mirror of
https://github.com/Masquerade64/SuperSteamPacker.git
synced 2026-02-04 05:31:18 +01:00
992 lines
48 KiB
C#
992 lines
48 KiB
C#
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using SteamKit2;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Http;
|
|
using System.Resources;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace SuperSteamPacker
|
|
{
|
|
public partial class MainWindow : Form
|
|
{
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
|
|
if (Directory.Exists("Jobs"))
|
|
{
|
|
Directory.Delete("Jobs", true);
|
|
}
|
|
if (Directory.Exists("Temp"))
|
|
{
|
|
Directory.Delete("Temp", true);
|
|
}
|
|
if (!File.Exists("settings.ini"))
|
|
{
|
|
File.WriteAllBytes("settings.ini", Properties.Resources.Settings);
|
|
}
|
|
if (!File.Exists("settings.ini"))
|
|
{
|
|
File.WriteAllBytes("settings.ini", Properties.Resources.Settings);
|
|
}
|
|
if (!Directory.Exists("Language"))
|
|
{
|
|
Directory.CreateDirectory("Language");
|
|
}
|
|
if (!File.Exists("Compressor\\7z.exe"))
|
|
{
|
|
if (!Directory.Exists("Compressor"))
|
|
{
|
|
Directory.CreateDirectory("Compressor");
|
|
}
|
|
File.WriteAllBytes("Compressor\\7z.exe", Properties.Resources._7z);
|
|
}
|
|
if (!File.Exists("Compressor\\rar.exe"))
|
|
{
|
|
if (!Directory.Exists("Compressor"))
|
|
{
|
|
Directory.CreateDirectory("Compressor");
|
|
}
|
|
File.WriteAllBytes("Compressor\\rar.exe", Properties.Resources.rar);
|
|
}
|
|
|
|
ResourceSet resourceSet = Properties.Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.CurrentCulture, true, true);
|
|
|
|
foreach (DictionaryEntry resource in resourceSet)
|
|
{
|
|
string resourcename = resource.Key.ToString();
|
|
if (resourcename.StartsWith("LANGDATA_"))
|
|
{
|
|
byte[] resourceBytes = (byte[])resource.Value;
|
|
File.WriteAllBytes("Language\\" + resourcename.Substring(9) + ".ini", resourceBytes);
|
|
}
|
|
}
|
|
|
|
|
|
var settingsini = new Ini("Settings.ini");
|
|
|
|
string compressorcheck = settingsini.Read("compressor", "SSP");
|
|
|
|
if (compressorcheck != "7z" && compressorcheck != "RAR")
|
|
{
|
|
settingsini.Write("compressor", "7z", "SSP");
|
|
}
|
|
|
|
var globalini = new Ini("Language\\Global.ini");
|
|
|
|
string readlanguage = settingsini.Read("language", "SSP");
|
|
|
|
if (String.IsNullOrEmpty(readlanguage) || !File.Exists("Language\\" + readlanguage + ".ini"))
|
|
{
|
|
readlanguage = "English";
|
|
settingsini.Write("language", readlanguage, "SSP");
|
|
}
|
|
|
|
var languageini = new Ini("Language\\" + readlanguage + ".ini");
|
|
|
|
Text = globalini.Read("Title", "SSP") + " " + globalini.Read("Version", "SSP") + " " + languageini.Read("by", "SSP") + " " + globalini.Read("Author", "SSP");
|
|
|
|
QueueLabel.Text = languageini.Read("queue", "SSP") + ":";
|
|
AddBtn.Text = languageini.Read("add", "SSP");
|
|
DelBtn.Text = languageini.Read("del", "SSP");
|
|
SaveLoginBtn.Text = languageini.Read("SaveLogin", "SSP");
|
|
StartBtn.Text = languageini.Read("Start", "SSP");
|
|
UsernameLabel.Text = languageini.Read("Username", "SSP");
|
|
PasswordLabel.Text = languageini.Read("Password", "SSP");
|
|
MoreSettingsBtn.Text = languageini.Read("MoreSettings", "SSP");
|
|
ClearQueueBtn.Text = languageini.Read("ClearQueue", "SSP");
|
|
csrinbtn.Text = globalini.Read("Forum", "SSP") + " " + languageini.Read("Forum", "SSP");
|
|
GithubBtn.Text = globalini.Read("Github", "SSP");
|
|
MoveUpBtn.Text = languageini.Read("MoveUp", "SSP");
|
|
MoveDownBtn.Text = languageini.Read("MoveDown", "SSP");
|
|
DelBtn.Enabled = false;
|
|
StartBtn.Enabled = false;
|
|
ClearQueueBtn.Enabled = false;
|
|
MoveUpBtn.Enabled = false;
|
|
MoveDownBtn.Enabled = false;
|
|
AddBtn.Enabled = false;
|
|
OSBox.Enabled = false;
|
|
ExportQueueButton.Enabled = false;
|
|
ExportQueueButton.Text = languageini.Read("Export", "SSP");
|
|
ImportQueueButton.Text = languageini.Read("Import", "SSP");
|
|
OSBox.SelectedIndex = 3;
|
|
|
|
if (File.Exists("userdata.ini"))
|
|
{
|
|
var userdata = new Ini("userdata.ini");
|
|
UsernameTextBox.Text = userdata.Read("username", "userdata");
|
|
PasswordTextBox.Text = userdata.Read("password", "userdata");
|
|
UsernameTextBox.Enabled = false;
|
|
PasswordTextBox.Enabled = false;
|
|
}
|
|
}
|
|
|
|
public static void EditVDF(string filePath, string keyToModify, string newValue)
|
|
{
|
|
string fileContents = File.ReadAllText(filePath);
|
|
Regex regex = new Regex("\"" + keyToModify + "\"\\s+\"([^\"]*)\"");
|
|
Match match = regex.Match(fileContents);
|
|
|
|
if (match.Success)
|
|
{
|
|
string oldValue = match.Groups[1].Value;
|
|
fileContents = fileContents.Replace("\"" + oldValue + "\"", "\"" + newValue + "\"");
|
|
File.WriteAllText(filePath, fileContents);
|
|
}
|
|
}
|
|
|
|
public static string ReadVDF(string filePath, string keyToRead)
|
|
{
|
|
string fileContents = File.ReadAllText(filePath);
|
|
Regex regex = new Regex("\"" + keyToRead + "\"\\s+\"([^\"]*)\"");
|
|
Match match = regex.Match(fileContents);
|
|
|
|
if (match.Success)
|
|
{
|
|
return match.Groups[1].Value;
|
|
}
|
|
else
|
|
{
|
|
return "0";
|
|
}
|
|
}
|
|
|
|
|
|
private void MainWindow_Load(object sender, EventArgs e)
|
|
{
|
|
if (!File.Exists("settings.ini") || !Directory.Exists("Language"))
|
|
{
|
|
MessageBox.Show("Important Data is missing! Please redownload this program.", "Super Steam Packer", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
|
Application.Exit();
|
|
}
|
|
|
|
if (File.Exists("userdata.ini"))
|
|
{
|
|
var userdataini = new Ini("userdata.ini");
|
|
UsernameTextBox.Text=userdataini.Read("username", "userdata");
|
|
PasswordTextBox.Text=userdataini.Read("password", "userdata");
|
|
SaveLoginBtn.Enabled = false;
|
|
}
|
|
}
|
|
|
|
private void AppIDExplain_Click(object sender, EventArgs e)
|
|
{
|
|
var settingsini = new Ini("Settings.ini");
|
|
var globalini = new Ini("Language\\Global.ini");
|
|
string readlanguage = settingsini.Read("language", "SSP");
|
|
var languageini = new Ini("Language\\" + readlanguage + ".ini");
|
|
|
|
MessageBox.Show(languageini.Read("AppIDInfoMsg1", "SSP") + "\n" + "\n" + languageini.Read("AppIDInfoMsg2", "SSP") + "\n" + "\n" + "https://store.steampowered.com/app/<APPID>/", "AppID", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
|
|
private void OSExplain_Click(object sender, EventArgs e)
|
|
{
|
|
var settingsini = new Ini("Settings.ini");
|
|
var globalini = new Ini("Language\\Global.ini");
|
|
string readlanguage = settingsini.Read("language", "SSP");
|
|
var languageini = new Ini("Language\\" + readlanguage + ".ini");
|
|
|
|
MessageBox.Show(languageini.Read("OSMsg1", "SSP") + "\n \n" + languageini.Read("OSMsg2", "SSP"), "OS", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
|
|
private void AddBtn_Click(object sender, EventArgs e)
|
|
{
|
|
var settingsini = new Ini("Settings.ini");
|
|
var globalini = new Ini("Language\\Global.ini");
|
|
string readlanguage = settingsini.Read("language", "SSP");
|
|
var languageini = new Ini("Language\\" + readlanguage + ".ini");
|
|
|
|
string appcheck = "";
|
|
|
|
switch (OSBox.SelectedItem.ToString())
|
|
{
|
|
case ("Windows x64"):
|
|
appcheck = "win64" + AppIDTxtBox.Text;
|
|
break;
|
|
case ("Windows x86"):
|
|
appcheck = "win32" + AppIDTxtBox.Text;
|
|
break;
|
|
case ("Linux"):
|
|
appcheck = "linux" + AppIDTxtBox.Text;
|
|
break;
|
|
case ("Mac"):
|
|
;
|
|
appcheck = "macos" + AppIDTxtBox.Text;
|
|
break;
|
|
}
|
|
if (!TmpLstBx.Items.Contains(appcheck))
|
|
{
|
|
ClearQueueBtn.Enabled = true;
|
|
ExportQueueButton.Enabled = true;
|
|
|
|
int parsedValue;
|
|
bool validappidcheck = int.TryParse(AppIDTxtBox.Text, out parsedValue);
|
|
|
|
if (!String.IsNullOrEmpty(AppIDTxtBox.Text) && validappidcheck == true)
|
|
{
|
|
if (OSBox.SelectedItem.ToString() == "Mac" || OSBox.SelectedItem.ToString() == "Linux")
|
|
{
|
|
QueueBox.Items.Add("AppID: " + AppIDTxtBox.Text + "\t\t" + "OS: " + OSBox.SelectedItem.ToString() + "\t\t\t" + languageini.Read("Status", "SSP") + ":" + " " + languageini.Read("READY", "SSP"));
|
|
}
|
|
else
|
|
{
|
|
QueueBox.Items.Add("AppID: " + AppIDTxtBox.Text + "\t\t" + "OS: " + OSBox.SelectedItem.ToString() + "\t\t" + languageini.Read("Status", "SSP") + ":" + " " + languageini.Read("READY", "SSP"));
|
|
}
|
|
switch (OSBox.SelectedItem.ToString())
|
|
{
|
|
case ("Windows x64"):
|
|
TmpLstBx.Items.Add("win64" + AppIDTxtBox.Text);
|
|
break;
|
|
case ("Windows x86"):
|
|
TmpLstBx.Items.Add("win32" + AppIDTxtBox.Text);
|
|
break;
|
|
case ("Linux"):
|
|
TmpLstBx.Items.Add("linux" + AppIDTxtBox.Text);
|
|
break;
|
|
case ("Mac"):
|
|
;
|
|
TmpLstBx.Items.Add("macos" + AppIDTxtBox.Text);
|
|
break;
|
|
}
|
|
AppIDTxtBox.Text="";
|
|
StartBtn.Enabled = true;
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(languageini.Read("AppIDWarning", "SSP"), languageini.Read("Warning", "SSP"), MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
AppIDTxtBox.Clear();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(languageini.Read("AlreadyAdded", "SSP"), languageini.Read("Warning", "SSP"), MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
|
|
private void DelBtn_Click(object sender, EventArgs e)
|
|
{
|
|
var settingsini = new Ini("Settings.ini");
|
|
var globalini = new Ini("Language\\Global.ini");
|
|
string readlanguage = settingsini.Read("language", "SSP");
|
|
var languageini = new Ini("Language\\" + readlanguage + ".ini");
|
|
|
|
if (QueueBox.SelectedItem != null)
|
|
{
|
|
int selectedindex = QueueBox.SelectedIndex;
|
|
TmpLstBx.SelectedIndex = QueueBox.SelectedIndex;
|
|
QueueBox.Items.Remove(QueueBox.SelectedItem);
|
|
TmpLstBx.Items.Remove(TmpLstBx.SelectedItem);
|
|
|
|
if (QueueBox.Items.Count == 0)
|
|
{
|
|
MoveUpBtn.Enabled = false;
|
|
MoveDownBtn.Enabled = false;
|
|
DelBtn.Enabled = false;
|
|
StartBtn.Enabled = false;
|
|
ClearQueueBtn.Enabled = false;
|
|
ExportQueueButton.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
QueueBox.SelectedIndex = selectedindex;
|
|
}
|
|
catch
|
|
{
|
|
QueueBox.SelectedIndex = selectedindex-1;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(languageini.Read("pleaseselectwarning", "SSP"), languageini.Read("information", "SSP"), MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
}
|
|
|
|
private void SaveLoginBtn_Click(object sender, EventArgs e)
|
|
{
|
|
var settingsini = new Ini("Settings.ini");
|
|
var globalini = new Ini("Language\\Global.ini");
|
|
string readlanguage = settingsini.Read("language", "SSP");
|
|
var languageini = new Ini("Language\\" + readlanguage + ".ini");
|
|
|
|
if (!String.IsNullOrEmpty(UsernameTextBox.Text))
|
|
{
|
|
if (settingsini.Read("loginwarningaccepted", "SSP") == "true")
|
|
{
|
|
File.WriteAllText("userdata.ini", "[userdata]\nusername=\npassword=");
|
|
var userini = new Ini("userdata.ini");
|
|
userini.Write("username", UsernameTextBox.Text, "userdata");
|
|
userini.Write("password", PasswordTextBox.Text, "userdata");
|
|
SaveLoginBtn.Enabled = false;
|
|
UsernameTextBox.Enabled = false;
|
|
PasswordTextBox.Enabled = false;
|
|
settingsini.Write("loginwarningaccepted", "true", "SSP");
|
|
}
|
|
else
|
|
{
|
|
DialogResult result = MessageBox.Show(languageini.Read("LoginSaveWarning1", "SSP") + "\n\n" + languageini.Read("LoginSaveWarning2", "SSP"), languageini.Read("Warning", "SSP"), MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
|
|
if (result == DialogResult.OK)
|
|
{
|
|
File.WriteAllText("userdata.ini", "[userdata]\nusername=\npassword=");
|
|
var userini = new Ini("userdata.ini");
|
|
userini.Write("username", UsernameTextBox.Text, "userdata");
|
|
userini.Write("password", PasswordTextBox.Text, "userdata");
|
|
SaveLoginBtn.Enabled = false;
|
|
UsernameTextBox.Enabled = false;
|
|
PasswordTextBox.Enabled = false;
|
|
settingsini.Write("loginwarningaccepted", "true", "SSP");
|
|
settingsini.Write("userdatasaved", "true", "SSP");
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(languageini.Read("loginwarning", "SSP"), languageini.Read("Warning", "SSP"), MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
|
|
}
|
|
|
|
private async void StartBtn_Click(object sender, EventArgs e)
|
|
{
|
|
AppIDTxtBox.Enabled = false;
|
|
OSBox.Enabled = false;
|
|
if (Directory.Exists("Jobs"))
|
|
{
|
|
Directory.Delete("Jobs", true);
|
|
}
|
|
if (Directory.Exists("Temp"))
|
|
{
|
|
Directory.Delete("Temp", true);
|
|
}
|
|
if (Directory.Exists("SteamCMD\\steamapps"))
|
|
{
|
|
Directory.Delete("SteamCMD\\steamapps", true);
|
|
}
|
|
if (Directory.Exists("SteamCMD\\depotcache"))
|
|
{
|
|
Directory.Delete("SteamCMD\\depotcache", true);
|
|
}
|
|
|
|
var settingsini = new Ini("Settings.ini");
|
|
var globalini = new Ini("Language\\Global.ini");
|
|
string readlanguage = settingsini.Read("language", "SSP");
|
|
var languageini = new Ini("Language\\" + readlanguage + ".ini");
|
|
|
|
bool anonymousloginconfirmation = false;
|
|
|
|
if (String.IsNullOrEmpty(UsernameTextBox.Text))
|
|
{
|
|
UsernameTextBox.Text = "anonymous";
|
|
}
|
|
if (UsernameTextBox.Text == "anonymous")
|
|
{
|
|
DialogResult result = MessageBox.Show(languageini.Read("anonymousconfirmation", "SSP"), languageini.Read("Warning", "SSP"), MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
|
|
if (result == DialogResult.OK)
|
|
{
|
|
anonymousloginconfirmation = true;
|
|
}
|
|
}
|
|
|
|
if ((!String.IsNullOrEmpty(UsernameTextBox.Text) && !String.IsNullOrEmpty(PasswordTextBox.Text)) || anonymousloginconfirmation == true)
|
|
{
|
|
if (!File.Exists("SteamCMD\\steamcmd.exe"))
|
|
{
|
|
var client = new WebClient();
|
|
client.DownloadFile("https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip", "download.tmp");
|
|
ZipFile.ExtractToDirectory("download.tmp", "SteamCMD");
|
|
File.Delete("download.tmp");
|
|
|
|
Process loadsteam1 = new Process();
|
|
loadsteam1.StartInfo.FileName = "SteamCMD\\steamcmd.exe";
|
|
loadsteam1.StartInfo.Arguments = "+quit";
|
|
loadsteam1.Start();
|
|
loadsteam1.WaitForExit();
|
|
}
|
|
Directory.CreateDirectory("Jobs");
|
|
for (int i = 0; i < TmpLstBx.Items.Count; i++)
|
|
{
|
|
TmpLstBx.SelectedIndex = i;
|
|
string workinput = TmpLstBx.SelectedItem.ToString();
|
|
string appid = workinput.Substring(5);
|
|
string os = "";
|
|
switch (workinput.Substring(0, 5))
|
|
{
|
|
case "win64":
|
|
os = "\n@sSteamCmdForcePlatformType windows\n@sSteamCmdForcePlatformBitness 64";
|
|
break;
|
|
case "win32":
|
|
os = "\n@sSteamCmdForcePlatformType windows\n@sSteamCmdForcePlatformBitness 32";
|
|
break;
|
|
case "macos":
|
|
case "linux":
|
|
os = "\n@sSteamCmdForcePlatformType " + workinput.Substring(0, 5);
|
|
break;
|
|
}
|
|
if (i == 0)
|
|
{
|
|
File.WriteAllText("Jobs\\" + i + "_" + appid + "_" + workinput.Substring(0, 5) + ".JOB", "login " + UsernameTextBox.Text + " " + PasswordTextBox.Text + os + "\napp_update " + appid +" validate\nquit");
|
|
}
|
|
else
|
|
{
|
|
File.WriteAllText("Jobs\\" + i + "_" + appid + "_" + workinput.Substring(0, 5) + ".JOB", "login " + UsernameTextBox.Text + os + "\napp_update " + appid +" validate\nquit");
|
|
}
|
|
|
|
}
|
|
string[] files = Directory.GetFiles("Jobs", "*.JOB");
|
|
|
|
foreach (string file in files)
|
|
{
|
|
TmpLstBx.SelectedIndex = int.Parse(file.Substring(5, 1));
|
|
string AppID = TmpLstBx.SelectedItem.ToString().Substring(5);
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("READY", "SSP"), languageini.Read("GETINFO", "SSP"));
|
|
var steamGameData = await GetSteamGameDataAsync(AppID);
|
|
string GameNameEarly = "";
|
|
string OS = "";
|
|
string BuildNoEarly = "";
|
|
string BuildTime = "";
|
|
string[] parts = file.Split('_');
|
|
if (parts.Length > 2)
|
|
{
|
|
string outputString = parts[2].Substring(0, Math.Min(5, parts[2].Length));
|
|
switch (outputString)
|
|
{
|
|
case "win64":
|
|
OS = "Win64";
|
|
break;
|
|
case "win32":
|
|
OS = "Win32";
|
|
break;
|
|
case "macos":
|
|
OS = "Mac";
|
|
break;
|
|
case "linux":
|
|
OS = "Linux";
|
|
break;
|
|
}
|
|
}
|
|
if (steamGameData != null)
|
|
{
|
|
JToken buildid = steamGameData["data"][AppID]["depots"]["branches"]["public"]["buildid"];
|
|
JToken buildtime = steamGameData["data"][AppID]["depots"]["branches"]["public"]["timeupdated"];
|
|
JToken gamename = steamGameData["data"][AppID]["common"]["name"];
|
|
|
|
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(buildtime.Value<long>());
|
|
BuildTime = dateTime.ToString("MMMM d, yyyy - HH:mm:ss UTC");
|
|
|
|
GameNameEarly = steamGameData["data"][AppID]["common"]["name"].Value<string>();
|
|
GameNameEarly = GameNameEarly.Replace(" ", "_");
|
|
BuildNoEarly = buildid.Value<string>();
|
|
}
|
|
else
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("GETINFO", "SSP"), languageini.Read("UNABLETOREACH", "SSP"));
|
|
continue;
|
|
}
|
|
try
|
|
{
|
|
string[] filesearly = Directory.GetFiles("Completed\\", GameNameEarly+".Build."+BuildNoEarly+"."+OS + ".*");
|
|
|
|
if (filesearly.Length != 0)
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("GETINFO", "SSP"), languageini.Read("SKIPPED", "SSP"));
|
|
continue;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("GETINFO", "SSP"), languageini.Read("DOWNLOADING", "SSP"));
|
|
Directory.SetCurrentDirectory("SteamCMD");
|
|
if (Directory.Exists("Logs"))
|
|
{
|
|
Directory.Delete("Logs", true);
|
|
}
|
|
Process SteamCMD = new Process();
|
|
SteamCMD.StartInfo.FileName = "steamcmd.exe";
|
|
SteamCMD.StartInfo.Arguments = "+runscript" + " ..\\" + file;
|
|
SteamCMD.Start();
|
|
SteamCMD.WaitForExit();
|
|
|
|
bool failedsubscription = false;
|
|
bool ratelimited = false;
|
|
bool invalidpassword = false;
|
|
bool hascode = false;
|
|
|
|
|
|
if (File.Exists("Logs\\content_log.txt"))
|
|
{
|
|
failedsubscription = File.ReadAllText("Logs\\content_log.txt").Contains("No subscription") ? true : false;
|
|
hascode = File.ReadAllText("Logs\\content_log.txt").Contains("apps from install folder") ? true : false;
|
|
}
|
|
if (File.Exists("Logs\\connection_log.txt"))
|
|
{
|
|
ratelimited = File.ReadAllText("Logs\\connection_log.txt").Contains("Rate Limit Exceeded") ? true : false;
|
|
invalidpassword = File.ReadAllText("Logs\\connection_log.txt").Contains("Invalid Password") ? true : false;
|
|
}
|
|
|
|
if (SteamCMD.ExitCode != 0 || ratelimited || failedsubscription || !hascode || invalidpassword)
|
|
{
|
|
if (Directory.Exists("steamapps"))
|
|
{
|
|
Directory.Delete("steamapps", true);
|
|
}
|
|
if (Directory.Exists("depotcache"))
|
|
{
|
|
Directory.Delete("depotcache", true);
|
|
}
|
|
|
|
if (ratelimited && !failedsubscription)
|
|
{
|
|
DialogResult ratelimitask = MessageBox.Show(languageini.Read("RateLimitWarn", "SSP"), languageini.Read("WARNING", "SSP"), MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
|
|
if (ratelimitask == DialogResult.OK)
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("DOWNLOADING", "SSP"), languageini.Read("RATELIMITED", "SSP"));
|
|
Directory.SetCurrentDirectory("..");
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
for (int ratelimititems = int.Parse(file.Substring(5, 1)); ratelimititems < QueueBox.Items.Count; ratelimititems++)
|
|
{
|
|
QueueBox.Items[ratelimititems] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("DOWNLOADING", "SSP"), languageini.Read("RATELIMITED", "SSP"));
|
|
QueueBox.Items[ratelimititems] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("READY", "SSP"), languageini.Read("RATELIMITED", "SSP"));
|
|
}
|
|
if (Directory.Exists("steamapps"))
|
|
{
|
|
Directory.Delete("steamapps", true);
|
|
}
|
|
if (Directory.Exists("depotcache"))
|
|
{
|
|
Directory.Delete("depotcache", true);
|
|
}
|
|
if (Directory.Exists("logs"))
|
|
{
|
|
Directory.Delete("logs", true);
|
|
}
|
|
Directory.SetCurrentDirectory("..");
|
|
if (Directory.Exists("Temp"))
|
|
{
|
|
Directory.Delete("Temp", true);
|
|
}
|
|
if (Directory.Exists("Jobs"))
|
|
{
|
|
Directory.Delete("Jobs", true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!hascode || invalidpassword)
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("DOWNLOADING", "SSP"), languageini.Read("BADLOGIN", "SSP"));
|
|
}
|
|
else
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("DOWNLOADING", "SSP"), languageini.Read("FAIL", "SSP"));
|
|
}
|
|
Directory.SetCurrentDirectory("..");
|
|
continue;
|
|
}
|
|
}
|
|
|
|
Directory.SetCurrentDirectory("..");
|
|
if (!Directory.Exists("Temp"))
|
|
{
|
|
Directory.CreateDirectory("Temp");
|
|
}
|
|
DirectoryInfo depotcachedir = new DirectoryInfo("SteamCMD\\depotcache");
|
|
depotcachedir.MoveTo("Temp\\depotcache");
|
|
DirectoryInfo steamappsdir = new DirectoryInfo("SteamCMD\\steamapps");
|
|
steamappsdir.MoveTo("Temp\\steamapps");
|
|
if (File.Exists("Temp\\steamapps\\libraryfolders.vdf"))
|
|
{
|
|
File.Delete("Temp\\steamapps\\libraryfolders.vdf");
|
|
}
|
|
if (Directory.Exists("Temp\\steamapps\\downloading"))
|
|
{
|
|
Directory.Delete("Temp\\steamapps\\downloading", true);
|
|
}
|
|
if (Directory.Exists("Temp\\steamapps\\temp"))
|
|
{
|
|
Directory.Delete("Temp\\steamapps\\temp", true);
|
|
}
|
|
string[] acffiles = Directory.GetFiles("Temp\\steamapps", "*.acf");
|
|
foreach (string acffile in acffiles)
|
|
{
|
|
EditVDF(acffile, "LastOwner", "0");
|
|
EditVDF(acffile, "LauncherPath", "0");
|
|
}
|
|
|
|
|
|
string GameName = ReadVDF("Temp\\steamapps\\appmanifest_" + AppID + ".acf", "name");
|
|
GameName = GameName.Replace(" ", ".");
|
|
char[] forbiddenchars = Path.GetInvalidFileNameChars();
|
|
GameName = Regex.Replace(GameName, "[" + Regex.Escape(new string(forbiddenchars)) + "]", "");
|
|
string BuildNo = ReadVDF("Temp\\steamapps\\appmanifest_" + AppID + ".acf", "buildid");
|
|
Directory.CreateDirectory("Completed");
|
|
Directory.SetCurrentDirectory("Temp");
|
|
if (Directory.Exists("steamapps\\workshop"))
|
|
{
|
|
Directory.Delete("steamapps\\workshop", true);
|
|
}
|
|
|
|
List<string> DepotManifestList = new List<string>();
|
|
|
|
foreach (string ACFPath in Directory.GetFiles("steamapps", "*.acf"))
|
|
{
|
|
JObject json = JObject.Parse(JsonConvert.SerializeObject(KeyValue.LoadFromString(Regex.Replace(File.ReadAllText(ACFPath), "//.*\n", "\n"))));
|
|
JObject installedDepots = (JObject)json["Children"].FirstOrDefault(c => c["Name"].Value<string>() == "InstalledDepots");
|
|
|
|
if (installedDepots != null)
|
|
{
|
|
JArray depots = (JArray)installedDepots["Children"];
|
|
foreach (JObject depot in depots)
|
|
{
|
|
string depotid = depot["Name"].Value<string>();
|
|
string manifest = depot["Children"].FirstOrDefault(c => c["Name"].Value<string>() == "manifest")?["Value"].Value<string>();
|
|
|
|
DepotManifestList.Add(depotid + " - DepotName [Manifest " + manifest + "]");
|
|
}
|
|
}
|
|
}
|
|
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("DOWNLOADING", "SSP"), languageini.Read("COMPRESSING", "SSP"));
|
|
|
|
Process Compress = new Process();
|
|
if (settingsini.Read("compressor", "SSP") == "7z")
|
|
{
|
|
Compress.StartInfo.FileName = "..\\Compressor\\7z.exe";
|
|
if (String.IsNullOrEmpty(settingsini.Read("customcompressoption", "SSP")))
|
|
{
|
|
if (File.Exists("..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".7z") || File.Exists("..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".7z.001"))
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("COMPRESSING", "SSP"), languageini.Read("SKIPPED", "SSP"));
|
|
Directory.SetCurrentDirectory("..");
|
|
Directory.Delete("Temp", true);
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
Compress.StartInfo.Arguments = "a -mx9 -sdel -pcs.rin.ru -v5g ..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".7z *";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if (File.Exists("..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".7z") || File.Exists("..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".7z.001"))
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("COMPRESSING", "SSP"), languageini.Read("SKIPPED", "SSP"));
|
|
Directory.SetCurrentDirectory("..");
|
|
Directory.Delete("Temp", true);
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
Compress.StartInfo.Arguments = "a " + settingsini.Read("customcompressoption", "SSP") + " ..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".7z *";
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Compress.StartInfo.FileName = "..\\Compressor\\rar.exe";
|
|
if (String.IsNullOrEmpty(settingsini.Read("customcompressoption", "SSP")))
|
|
{
|
|
if (File.Exists("..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".rar") || File.Exists("..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".part1.rar"))
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("COMPRESSING", "SSP"), languageini.Read("SKIPPED", "SSP"));
|
|
Directory.SetCurrentDirectory("..");
|
|
Directory.Delete("Temp", true);
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
Compress.StartInfo.Arguments = "a -df -hpcs.rin.ru -htc -v5000000k -r ..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".rar *";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (File.Exists("..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".rar") || File.Exists("..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".part1.rar"))
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("COMPRESSING", "SSP"), languageini.Read("SKIPPED", "SSP"));
|
|
Directory.SetCurrentDirectory("..");
|
|
Directory.Delete("Temp", true);
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
Compress.StartInfo.Arguments = "a " + settingsini.Read("customcompressoption", "SSP") + " ..\\Completed\\" + GameName+".Build."+BuildNo+"."+OS + ".rar *";
|
|
}
|
|
}
|
|
}
|
|
Compress.Start();
|
|
Compress.WaitForExit();
|
|
|
|
if (Compress.ExitCode!=0)
|
|
{
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("COMPRESSING", "SSP"), languageini.Read("FAIL", "SSP"));
|
|
Directory.SetCurrentDirectory("..");
|
|
DirectoryInfo directoryInfo = new DirectoryInfo("Completed");
|
|
foreach (FileInfo fileToDelete in directoryInfo.GetFiles(GameName+".Build."+BuildNo+"."+OS+".*"))
|
|
{
|
|
fileToDelete.Delete();
|
|
}
|
|
continue;
|
|
}
|
|
|
|
if (!File.Exists("..\\Completed\\"+ GameName+".Build."+BuildNo+"."+OS + ".7z.002") && settingsini.Read("compressor", "SSP") == "7z")
|
|
{
|
|
if (File.Exists("..\\Completed\\"+ GameName+".Build."+BuildNo+"."+OS + ".7z.001"))
|
|
{
|
|
File.Move("..\\Completed\\"+ GameName+".Build."+BuildNo+"."+OS + ".7z.001", "..\\Completed\\"+ GameName+".Build."+BuildNo+"."+OS + ".7z");
|
|
}
|
|
|
|
}
|
|
Directory.SetCurrentDirectory("..");
|
|
Directory.Delete("Temp", true);
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("COMPRESSING", "SSP"), languageini.Read("WRITINGINFO", "SSP"));
|
|
|
|
using (StreamWriter RINfo = new StreamWriter("Completed\\[CS.RIN.RU Info] " + GameName+".Build."+BuildNo+"."+OS+".txt"))
|
|
{
|
|
GameName = GameName.Replace("_", " ");
|
|
GameName = GameName.Replace(".", " ");
|
|
RINfo.WriteLine("[url=][color=white][b]" + GameName + " (Clean Steam Files)[/b][/color][/url]");
|
|
RINfo.WriteLine("[size=85][color=white][b]Version:[/b] [i]" + BuildTime + " [Build " + BuildNo + "][/i][/color][/size]");
|
|
RINfo.WriteLine();
|
|
RINfo.WriteLine("[spoiler=\"[color=white]Depots & Manifests[/color]\"][code=text]");
|
|
foreach (string item in DepotManifestList)
|
|
{
|
|
RINfo.WriteLine(item);
|
|
}
|
|
RINfo.WriteLine("[/code][/spoiler][color=white][b]Uploaded version:[/b] [i]" + BuildTime + " [Build " + BuildNo + "][/i][/color]");
|
|
}
|
|
|
|
QueueBox.Items[int.Parse(file.Substring(5, 1))] = QueueBox.Items[int.Parse(file.Substring(5, 1))].ToString().Replace(languageini.Read("WRITINGINFO", "SSP"), languageini.Read("COMPLETE", "SSP"));
|
|
}
|
|
if (Directory.Exists("Jobs"))
|
|
{
|
|
Directory.Delete("Jobs", true);
|
|
}
|
|
MessageBox.Show(languageini.Read("jobscomplete", "SSP") + "\n\n" + languageini.Read("jobscomplete2", "SSP"), languageini.Read("information", "SSP"), MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
StartBtn.Enabled=false;
|
|
AddBtn.Enabled=false;
|
|
DelBtn.Enabled=false;
|
|
ClearQueueBtn.PerformClick();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(languageini.Read("loginwarning", "SSP"), languageini.Read("Warning", "SSP"), MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
PasswordTextBox.Enabled = true;
|
|
UsernameTextBox.Enabled = true;
|
|
}
|
|
}
|
|
|
|
private void MoreSettingsBtn_Click(object sender, EventArgs e)
|
|
{
|
|
MoreSettingsForm settingsMenu = new MoreSettingsForm();
|
|
settingsMenu.ShowDialog();
|
|
this.Refresh();
|
|
if (!File.Exists("userdata.ini"))
|
|
{
|
|
SaveLoginBtn.Enabled=true;
|
|
UsernameTextBox.Enabled=true;
|
|
PasswordTextBox.Enabled=true;
|
|
}
|
|
}
|
|
|
|
private void UsernameTextBox_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (UsernameTextBox.Text == "anonymous")
|
|
{
|
|
PasswordTextBox.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
PasswordTextBox.Enabled = true;
|
|
}
|
|
}
|
|
|
|
private void ClearQueueBtn_Click(object sender, EventArgs e)
|
|
{
|
|
MoveUpBtn.Enabled = false;
|
|
MoveDownBtn.Enabled = false;
|
|
ClearQueueBtn.Enabled = false;
|
|
StartBtn.Enabled = false;
|
|
DelBtn.Enabled = false;
|
|
ExportQueueButton.Enabled = false;
|
|
TmpLstBx.Items.Clear();
|
|
QueueBox.Items.Clear();
|
|
AppIDTxtBox.Enabled = true;
|
|
OSBox.Enabled = true;
|
|
|
|
}
|
|
|
|
private void csrinbtn_Click(object sender, EventArgs e)
|
|
{
|
|
Process.Start("https://cs.rin.ru/forum");
|
|
}
|
|
|
|
private void GithubBtn_Click(object sender, EventArgs e)
|
|
{
|
|
Process.Start("https://github.com/Masquerade64");
|
|
}
|
|
|
|
private void QueueBox_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
DelBtn.Enabled=true;
|
|
if (QueueBox.Items.Count != 1)
|
|
{
|
|
if (QueueBox.SelectedIndex == 0)
|
|
{
|
|
MoveUpBtn.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
MoveUpBtn.Enabled = true;
|
|
}
|
|
if (QueueBox.SelectedIndex == QueueBox.Items.Count-1)
|
|
{
|
|
MoveDownBtn.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
MoveDownBtn.Enabled = true;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void MoveUpBtn_Click(object sender, EventArgs e)
|
|
{
|
|
object selecteditem = QueueBox.SelectedItem;
|
|
int newindex = QueueBox.SelectedIndex - 1;
|
|
|
|
QueueBox.Items.Remove(selecteditem);
|
|
TmpLstBx.Items.Remove(selecteditem);
|
|
QueueBox.Items.Insert(newindex, selecteditem);
|
|
TmpLstBx.Items.Insert(newindex, selecteditem);
|
|
QueueBox.SetSelected(newindex, true);
|
|
}
|
|
|
|
private void MoveDownBtn_Click(object sender, EventArgs e)
|
|
{
|
|
object selecteditem = QueueBox.SelectedItem;
|
|
int newindex = QueueBox.SelectedIndex + 1;
|
|
|
|
QueueBox.Items.Remove(selecteditem);
|
|
TmpLstBx.Items.Remove(selecteditem);
|
|
QueueBox.Items.Insert(newindex, selecteditem);
|
|
TmpLstBx.Items.Insert(newindex, selecteditem);
|
|
QueueBox.SetSelected(newindex, true);
|
|
}
|
|
|
|
private void ExportQueueButton_Click(object sender, EventArgs e)
|
|
{
|
|
var settingsini = new Ini("Settings.ini");
|
|
var globalini = new Ini("Language\\Global.ini");
|
|
string readlanguage = settingsini.Read("language", "SSP");
|
|
var languageini = new Ini("Language\\" + readlanguage + ".ini");
|
|
|
|
SaveFileDialog savequeue = new SaveFileDialog();
|
|
savequeue.Title = languageini.Read("Export", "SSP");
|
|
savequeue.Filter = "SSP Queue Files (*.SSPQ)|*.SSPQ";
|
|
DialogResult result = savequeue.ShowDialog();
|
|
if (result == DialogResult.OK)
|
|
{
|
|
string filePath = savequeue.FileName;
|
|
using (StreamWriter writer = new StreamWriter(filePath))
|
|
{
|
|
foreach (var item in TmpLstBx.Items)
|
|
{
|
|
writer.WriteLine(item.ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ImportQueueButton_Click(object sender, EventArgs e)
|
|
{
|
|
var settingsini = new Ini("Settings.ini");
|
|
var globalini = new Ini("Language\\Global.ini");
|
|
string readlanguage = settingsini.Read("language", "SSP");
|
|
var languageini = new Ini("Language\\" + readlanguage + ".ini");
|
|
|
|
OpenFileDialog openqueue = new OpenFileDialog();
|
|
openqueue.Title = languageini.Read("Import", "SSP");
|
|
openqueue.Filter = "SSP Queue Files (*.SSPQ)|*.SSPQ";
|
|
DialogResult result = openqueue.ShowDialog();
|
|
if (result == DialogResult.OK)
|
|
{
|
|
QueueBox.Items.Clear();
|
|
TmpLstBx.Items.Clear();
|
|
|
|
string[] lines = File.ReadAllLines(openqueue.FileName);
|
|
|
|
foreach (string line in lines)
|
|
{
|
|
TmpLstBx.Items.Add(line);
|
|
string os = line.Substring(0, 5);
|
|
switch (os)
|
|
{
|
|
case "win64":
|
|
os = "Windows x64";
|
|
break;
|
|
case "win32":
|
|
os = "Windows x86";
|
|
break;
|
|
case "macos":
|
|
os = "Mac";
|
|
break;
|
|
case "linux":
|
|
os = "Linux";
|
|
break;
|
|
}
|
|
if (os == "Mac" || os == "Linux")
|
|
{
|
|
QueueBox.Items.Add("AppID: " + line.Substring(5) + "\t\t" + "OS: " + os + "\t\t\t" + languageini.Read("Status", "SSP") + ":" + " " + languageini.Read("READY", "SSP"));
|
|
}
|
|
else
|
|
{
|
|
QueueBox.Items.Add("AppID: " + line.Substring(5) + "\t\t" + "OS: " + os + "\t\t" + languageini.Read("Status", "SSP") + ":" + " " + languageini.Read("READY", "SSP"));
|
|
}
|
|
|
|
DelBtn.Enabled = true;
|
|
ClearQueueBtn.Enabled = true;
|
|
StartBtn.Enabled = true;
|
|
ExportQueueButton.Enabled = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void AppIDTxtBox_TextChanged(object sender, EventArgs e)
|
|
{
|
|
AddBtn.Enabled = true;
|
|
OSBox.Enabled = true;
|
|
}
|
|
|
|
static async Task<JObject> GetSteamGameDataAsync(string appId)
|
|
{
|
|
using (var httpClient = new HttpClient())
|
|
{
|
|
var url = $"https://api.steamcmd.net/v1/info/{appId}";
|
|
var response = await httpClient.GetAsync(url);
|
|
response.EnsureSuccessStatusCode();
|
|
var jsonString = await response.Content.ReadAsStringAsync();
|
|
return JObject.Parse(jsonString);
|
|
}
|
|
}
|
|
}
|
|
} |