Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8d0eb4a84d | ||
|
|
6f20154599 | ||
|
|
bbe84000b7 | ||
|
|
30ead79ed1 | ||
|
|
97b6da3abe | ||
|
|
6c2a7413b4 | ||
|
|
744ce530dc | ||
|
|
8a299748aa | ||
|
|
e76f619311 | ||
|
|
b3ea6cacae | ||
|
|
93a4629739 | ||
|
|
93263a4afe | ||
|
|
23990935d1 | ||
|
|
bf41013add | ||
|
|
0acc36feed | ||
|
|
3301227163 | ||
|
|
45d1981451 | ||
|
|
f22636d81f | ||
|
|
bd8e94c210 | ||
|
|
cac88cae92 | ||
|
|
4370e922ef | ||
|
|
caa4f78943 | ||
|
|
d3b988546f | ||
|
|
cbdde48344 | ||
|
|
3b830d9f67 | ||
|
|
7572ddb84e | ||
|
|
7c6f05361e | ||
|
|
5b54f195f1 | ||
|
|
bd71e07b19 | ||
|
|
5b5ce78471 | ||
|
|
c96a98b38a | ||
|
|
b0bb41732d | ||
|
|
0b04783962 |
@@ -2,6 +2,6 @@
|
||||
"ExpandedNodes": [
|
||||
""
|
||||
],
|
||||
"SelectedNode": "\\AndroidSideloader.sln",
|
||||
"SelectedNode": "\\Sideloader.cs",
|
||||
"PreviewInSolutionExplorer": false
|
||||
}
|
||||
BIN
.vs/slnx.sqlite
BIN
.vs/slnx.sqlite
Binary file not shown.
198
ADB.cs
198
ADB.cs
@@ -12,18 +12,20 @@ namespace AndroidSideloader
|
||||
class ADB
|
||||
{
|
||||
static Process adb = new Process();
|
||||
public static string adbFolderPath = $"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\\RSL\\2.14HF4\\ADB";
|
||||
public static string adbFolderPath = "C:\\RSL\\2.1.1\\ADB";
|
||||
public static string adbFilePath = adbFolderPath + "\\adb.exe";
|
||||
public static string DeviceID = "";
|
||||
public static string package = "";
|
||||
public static ProcessOutput RunAdbCommandToString(string command)
|
||||
{
|
||||
Properties.Settings.Default.ADBFolder = adbFolderPath;
|
||||
Properties.Settings.Default.ADBPath = adbFilePath;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
if (DeviceID.Length > 1)
|
||||
command = $" -s {DeviceID} {command}";
|
||||
Logger.Log($"Running command {command}");
|
||||
adb.StartInfo.FileName = @adbFilePath;
|
||||
adb.StartInfo.FileName = adbFilePath;
|
||||
adb.StartInfo.Arguments = command;
|
||||
adb.StartInfo.RedirectStandardError = true;
|
||||
adb.StartInfo.RedirectStandardInput = true;
|
||||
@@ -55,16 +57,26 @@ namespace AndroidSideloader
|
||||
}
|
||||
else
|
||||
adb.WaitForExit();
|
||||
if (error.Contains("ADB_VENDOR_KEYS"))
|
||||
{
|
||||
MessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.");
|
||||
ADB.WakeDevice();
|
||||
}
|
||||
if (error.Contains("not enough storage space"))
|
||||
{
|
||||
MessageBox.Show("There is not enough room on your device to install this package. Please clear AT LEAST 2x the amount of the app you are trying to install.");
|
||||
}
|
||||
Logger.Log(output);
|
||||
Logger.Log(error);
|
||||
return new ProcessOutput(output, error);
|
||||
}
|
||||
public static ProcessOutput RunAdbCommandToStringWOADB(string result, string path)
|
||||
public static ProcessOutput RunAdbCommandToStringWOADB(string result, string file)
|
||||
{
|
||||
string command = result;
|
||||
Properties.Settings.Default.ADBFolder = adbFolderPath;
|
||||
Properties.Settings.Default.ADBPath = adbFilePath;
|
||||
Properties.Settings.Default.Save();
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -75,7 +87,7 @@ namespace AndroidSideloader
|
||||
adb.StartInfo.RedirectStandardOutput = true;
|
||||
adb.StartInfo.CreateNoWindow = true;
|
||||
adb.StartInfo.UseShellExecute = false;
|
||||
adb.StartInfo.WorkingDirectory = Path.GetDirectoryName(path);
|
||||
adb.StartInfo.WorkingDirectory = Path.GetDirectoryName(file);
|
||||
adb.Start();
|
||||
adb.StandardInput.WriteLine(command);
|
||||
adb.StandardInput.Flush();
|
||||
@@ -102,16 +114,20 @@ namespace AndroidSideloader
|
||||
else
|
||||
adb.WaitForExit();
|
||||
if (error.Contains("ADB_VENDOR_KEYS"))
|
||||
{
|
||||
MessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.");
|
||||
ADB.WakeDevice();
|
||||
}
|
||||
Logger.Log(output);
|
||||
Logger.Log(error);
|
||||
return new ProcessOutput(output, error);
|
||||
}
|
||||
|
||||
public static ProcessOutput RunCommandToString(string result, string path)
|
||||
public static ProcessOutput RunCommandToString(string result, string path = "", string file = "")
|
||||
{
|
||||
string command = result;
|
||||
|
||||
Properties.Settings.Default.ADBFolder = adbFolderPath;
|
||||
Properties.Settings.Default.ADBPath = adbFilePath;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
Logger.Log($"Running command {command}");
|
||||
adb.StartInfo.FileName = @"C:\windows\system32\cmd.exe";
|
||||
@@ -148,7 +164,10 @@ namespace AndroidSideloader
|
||||
else
|
||||
adb.WaitForExit();
|
||||
if (error.Contains("ADB_VENDOR_KEYS"))
|
||||
{
|
||||
MessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.");
|
||||
ADB.WakeDevice();
|
||||
}
|
||||
Logger.Log(output);
|
||||
Logger.Log(error);
|
||||
return new ProcessOutput(output, error);
|
||||
@@ -211,82 +230,104 @@ namespace AndroidSideloader
|
||||
|
||||
public static void WakeDevice()
|
||||
{
|
||||
if (Properties.Settings.Default.IPAddress.Contains("connect"))
|
||||
RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP");
|
||||
string devicesout = RunAdbCommandToString("devices").Output;
|
||||
if (!devicesout.Contains("found"))
|
||||
{
|
||||
RunAdbCommandToString(Properties.Settings.Default.IPAddress);
|
||||
string response = ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress).Output;
|
||||
|
||||
RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP");
|
||||
if (response.Contains("cannot"))
|
||||
if (Properties.Settings.Default.IPAddress.Contains("connect"))
|
||||
{
|
||||
DialogResult dialogResult = MessageBox.Show("Either your Quest is idle or you have rebooted the device.\nRSL's wireless ADB will persist on PC reboot but not on Quest reboot.\n\nNOTE: If you haven't rebooted your Quest it may be idle.\n\nTo prevent this press the HOLD button 2x prior to launching RSL. Or\nkeep your Quest plugged into power to keep it permanently \"awake\".\n\nHave you assigned your Quest a static IP in your router configuration?\n\nIf you no longer want to use Wireless ADB or your device was idle please hit CANCEL.", "DEVICE REBOOTED\\IDLE?", MessageBoxButtons.YesNoCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
|
||||
RunAdbCommandToString(Properties.Settings.Default.IPAddress);
|
||||
string response = RunAdbCommandToString(Properties.Settings.Default.IPAddress).Output;
|
||||
|
||||
if (response.Contains("cannot"))
|
||||
{
|
||||
DialogResult dialogResult2 = MessageBox.Show("Press OK to remove your stored IP address.\nIf your Quest went idle press the HOLD button on the device twice then press CANCEL to reconnect.", "REMOVE STORED IP?", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult2 == DialogResult.Cancel)
|
||||
ADB.WakeDevice();
|
||||
if (dialogResult2 == DialogResult.OK)
|
||||
DialogResult dialogResult = MessageBox.Show("Either your Quest is idle or you have rebooted the device.\nRSL's wireless ADB will persist on PC reboot but not on Quest reboot.\n\nNOTE: If you haven't rebooted your Quest it may be idle.\n\nTo prevent this press the HOLD button 2x prior to launching RSL. Or\nkeep your Quest plugged into power to keep it permanently \"awake\".\n\nHave you assigned your Quest a static IP in your router configuration?\n\nIf you no longer want to use Wireless ADB or your device was idle please hit CANCEL.", "DEVICE REBOOTED\\IDLE?", MessageBoxButtons.YesNoCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
{
|
||||
Properties.Settings.Default.IPAddress = "";
|
||||
Properties.Settings.Default.Save();
|
||||
ADB.WakeDevice();
|
||||
DialogResult dialogResult2 = MessageBox.Show("Press OK to remove your stored IP address.\nIf your Quest went idle press the HOLD button on the device twice then press CANCEL to reconnect.", "REMOVE STORED IP?", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult2 == DialogResult.Cancel)
|
||||
WakeDevice();
|
||||
if (dialogResult2 == DialogResult.OK)
|
||||
{
|
||||
Properties.Settings.Default.IPAddress = "";
|
||||
Properties.Settings.Default.Save();
|
||||
WakeDevice();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
MessageBox.Show("Connect your Quest to USB so we can reconnect to your saved IP address!");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
Thread.Sleep(250);
|
||||
ADB.RunAdbCommandToString("disconnect");
|
||||
Thread.Sleep(50);
|
||||
ADB.RunAdbCommandToString("connect");
|
||||
Thread.Sleep(50);
|
||||
ADB.RunAdbCommandToString("tcpip 5555");
|
||||
Thread.Sleep(500);
|
||||
ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress);
|
||||
}
|
||||
else if (dialogResult == DialogResult.No)
|
||||
{
|
||||
MessageBox.Show("You must repeat the entire connection process, press OK to begin.", "Reconfigure Wireless ADB", MessageBoxButtons.OK);
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
ADB.RunAdbCommandToString("tcpip 5555");
|
||||
MessageBox.Show("Press OK to get your Quest's local IP address.", "Obtain local IP address", MessageBoxButtons.OK);
|
||||
Thread.Sleep(1000);
|
||||
string input = ADB.RunAdbCommandToString("shell ip route").Output;
|
||||
|
||||
|
||||
string[] strArrayOne = new string[] { "" };
|
||||
strArrayOne = input.Split(' ');
|
||||
if (strArrayOne[0].Length > 7)
|
||||
else if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
string IPaddr = strArrayOne[8];
|
||||
string IPcmnd = "connect " + IPaddr + ":5555";
|
||||
MessageBox.Show($"Your Quest's local IP address is: {IPaddr}\n\nPlease disconnect your Quest then wait 2 seconds.\nOnce it is disconnected hit OK", "", MessageBoxButtons.OK);
|
||||
Thread.Sleep(2000);
|
||||
ADB.RunAdbCommandToString(IPcmnd);
|
||||
Properties.Settings.Default.IPAddress = IPcmnd;
|
||||
Properties.Settings.Default.Save();
|
||||
MessageBox.Show("Connect your Quest to USB so we can reconnect to your saved IP address!");
|
||||
RunAdbCommandToString("devices");
|
||||
Thread.Sleep(250);
|
||||
RunAdbCommandToString("disconnect");
|
||||
Thread.Sleep(50);
|
||||
RunAdbCommandToString("connect");
|
||||
Thread.Sleep(50);
|
||||
RunAdbCommandToString("tcpip 5555");
|
||||
Thread.Sleep(500);
|
||||
RunAdbCommandToString(Properties.Settings.Default.IPAddress);
|
||||
MessageBox.Show($"Connected! We can now automatically enable wake on wifi. This makes it so Rookie can work wirelessly even if the device has entered \"sleep mode\". This setting is NOT permanent and resets upon Quest reboot just like wireless ADB functionality.\n\n After testing with this setting off and on the difference in battery usage seems nonexistent. We recommend this setting for the majority of users for ease of use purposes. If you click NO you must keep your Quest connected to a charger OR wake your device and then put it back on hold before using Rookie wirelessly. Do you want to enable wake on wifi?", "Enable Wake on Wifi?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
|
||||
MessageBox.Show($"Connected!!", "", MessageBoxButtons.OK);
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
RunAdbCommandToString("shell settings put global wifi_wakeup_available 1");
|
||||
RunAdbCommandToString("shell settings put global wifi_wakeup_enabled 1");
|
||||
}
|
||||
if (dialogResult == DialogResult.No)
|
||||
{
|
||||
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (dialogResult == DialogResult.No)
|
||||
{
|
||||
MessageBox.Show("You must repeat the entire connection process, press OK to begin.", "Reconfigure Wireless ADB", MessageBoxButtons.OK);
|
||||
RunAdbCommandToString("devices");
|
||||
RunAdbCommandToString("tcpip 5555");
|
||||
MessageBox.Show("Press OK to get your Quest's local IP address.", "Obtain local IP address", MessageBoxButtons.OK);
|
||||
Thread.Sleep(1000);
|
||||
string input = RunAdbCommandToString("shell ip route").Output;
|
||||
|
||||
|
||||
Properties.Settings.Default.WirelessADB = true;
|
||||
Properties.Settings.Default.Save();
|
||||
string[] strArrayOne = new string[] { "" };
|
||||
strArrayOne = input.Split(' ');
|
||||
if (strArrayOne[0].Length > 7)
|
||||
{
|
||||
string IPaddr = strArrayOne[8];
|
||||
string IPcmnd = "connect " + IPaddr + ":5555";
|
||||
MessageBox.Show($"Your Quest's local IP address is: {IPaddr}\n\nPlease disconnect your Quest then wait 2 seconds.\nOnce it is disconnected hit OK", "", MessageBoxButtons.OK);
|
||||
Thread.Sleep(2000);
|
||||
ADB.RunAdbCommandToString(IPcmnd);
|
||||
Properties.Settings.Default.IPAddress = IPcmnd;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
MessageBox.Show($"Connected! We can now automatically disable the Quest wifi chip from falling asleep. This makes it so Rookie can work wirelessly even if the device has entered \"sleep mode\". This setting is NOT permanent and resets upon Quest reboot, just like wireless ADB functionality.\n\nNOTE: This may cause the device battery to drain while it is in sleep mode at a very slightly increased rate. We recommend this setting for the majority of users for ease of use purposes. If you click NO you must keep your Quest connected to a charger or wake your device and then put it back on hold before using Rookie wirelessly. Do you want us to stop sleep mode from disabling wireless ADB?", "", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
|
||||
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_available 1");
|
||||
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_enabled 1");
|
||||
}
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public static ProcessOutput Sideload(string path, string packagename = "")
|
||||
|
||||
|
||||
public static ProcessOutput Sideload(string path = "", string packagename = "")
|
||||
{
|
||||
|
||||
WakeDevice();
|
||||
|
||||
ProcessOutput ret = new ProcessOutput();
|
||||
package = packagename;
|
||||
|
||||
Program.form.ChangeTitle($"Sideloading {path}");
|
||||
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
|
||||
string out2 = ret.Output + ret.Error;
|
||||
@@ -295,7 +336,7 @@ namespace AndroidSideloader
|
||||
string BackupFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups");
|
||||
if (out2.Contains("offline"))
|
||||
{
|
||||
DialogResult dialogResult2 = MessageBox.Show("Device is offline. Press Yes to reconnect, or if you don't wish to connect and just want to download the game (we suggest unchecking delete games after install from settings menu) then press No.", "Device offline.", MessageBoxButtons.YesNoCancel);
|
||||
DialogResult dialogResult2 = MessageBox.Show("Device is offline. Press Yes to reconnect, or if you don't wish to connect and just want to download the game (requires unchecking \"Delete games after install\" from settings menu) then press No.", "Device offline.", MessageBoxButtons.YesNoCancel);
|
||||
if (dialogResult2 == DialogResult.Yes)
|
||||
ADB.WakeDevice();
|
||||
}
|
||||
@@ -335,13 +376,14 @@ namespace AndroidSideloader
|
||||
}
|
||||
if (File.Exists($"{Properties.Settings.Default.MainDir}\\Config.Json"))
|
||||
{
|
||||
string gameName = packagename;
|
||||
packagename = Sideloader.gameNameToPackageName(gameName);
|
||||
|
||||
|
||||
Program.form.ChangeTitle("Pushing Custom QU s3 Patch JSON.");
|
||||
if (!Directory.Exists($"/sdcard/android/data/{package}"))
|
||||
RunAdbCommandToString($"shell mkdir /sdcard/android/data/{package}");
|
||||
if (!Directory.Exists($"/sdcard/android/data/{package}/private"))
|
||||
RunAdbCommandToString($"shell mkdir /sdcard/android/data/{package}/private");
|
||||
Program.form.ChangeTitle("Pushing Custom QU S3 Config.JSON.");
|
||||
if (!Directory.Exists($"/sdcard/android/data/{packagename}"))
|
||||
RunAdbCommandToString($"shell mkdir /sdcard/android/data/{packagename}");
|
||||
if (!Directory.Exists($"/sdcard/android/data/{packagename}/private"))
|
||||
RunAdbCommandToString($"shell mkdir /sdcard/android/data/{packagename}/private");
|
||||
|
||||
Random r = new Random();
|
||||
int x = r.Next(999999999);
|
||||
@@ -357,11 +399,11 @@ namespace AndroidSideloader
|
||||
Properties.Settings.Default.QUStringF = $"{{\"user_id\":{sum},\"app_id\":\"{sum2}\",";
|
||||
Properties.Settings.Default.Save();
|
||||
string boff = Properties.Settings.Default.QUStringF + Properties.Settings.Default.QUString;
|
||||
File.WriteAllText("config.json", boff);
|
||||
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\config.json", boff);
|
||||
string blank = "";
|
||||
File.WriteAllText("delete_settings", blank);
|
||||
ret += ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\delete_settings\" /sdcard/android/data/{package}/private/delete_settings");
|
||||
ret += ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\config.json\" /sdcard/android/data/{package}/private/config.json");
|
||||
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\delete_settings", blank);
|
||||
ret += ADB.RunAdbCommandToString($"push \"{Properties.Settings.Default.MainDir}\\delete_settings\" /sdcard/android/data/{packagename}/private/delete_settings");
|
||||
ret += ADB.RunAdbCommandToString($"push \"{Properties.Settings.Default.MainDir}\\config.json\" /sdcard/android/data/{packagename}/private/config.json");
|
||||
|
||||
}
|
||||
Program.form.ChangeTitle("Sideload done");
|
||||
|
||||
@@ -252,6 +252,7 @@
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<None Include="version" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
@@ -259,6 +260,9 @@
|
||||
<ItemGroup>
|
||||
<Content Include="changelog.txt" />
|
||||
<Content Include="icon.ico" />
|
||||
<None Include="Resources\greenkey.png" />
|
||||
<None Include="Resources\orangekey.png" />
|
||||
<None Include="Resources\SearchGlass.PNG" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
|
||||
|
||||
@@ -113,6 +113,15 @@
|
||||
<setting name="CurrPckg" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="ADBFolder" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="WirelessADB" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="CurrentGamename" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
</AndroidSideloader.Properties.Settings>
|
||||
<AndroidADB.Sideloader.Properties.Settings>
|
||||
<setting name="checkForUpdates" serializeAs="String">
|
||||
|
||||
@@ -30,7 +30,7 @@ public class ListViewColumnSorter : IComparer
|
||||
ColumnToSort = 0;
|
||||
|
||||
// Initialize the sort order to 'none'
|
||||
OrderOfSort = SortOrder.None;
|
||||
OrderOfSort = SortOrder.Ascending;
|
||||
|
||||
// Initialize the CaseInsensitiveComparer object
|
||||
ObjectCompare = new CaseInsensitiveComparer();
|
||||
|
||||
224
MainForm.Designer.cs
generated
224
MainForm.Designer.cs
generated
@@ -68,7 +68,6 @@
|
||||
this.remotesList = new System.Windows.Forms.ComboBox();
|
||||
this.gamesListView = new System.Windows.Forms.ListView();
|
||||
this.searchTextBox = new System.Windows.Forms.TextBox();
|
||||
this.gamesPictureBox = new System.Windows.Forms.PictureBox();
|
||||
this.gamesQueueLabel = new System.Windows.Forms.Label();
|
||||
this.MountButton = new System.Windows.Forms.Button();
|
||||
this.ProgressText = new System.Windows.Forms.Label();
|
||||
@@ -76,12 +75,26 @@
|
||||
this.DragDropLbl = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.pictureBox3 = new System.Windows.Forms.PictureBox();
|
||||
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
||||
this.gamesPictureBox = new System.Windows.Forms.PictureBox();
|
||||
this.pictureBox4 = new System.Windows.Forms.PictureBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.panel1.SuspendLayout();
|
||||
this.otherContainer.SuspendLayout();
|
||||
this.backupContainer.SuspendLayout();
|
||||
this.sideloadContainer.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.gamesPictureBox)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.gamesPictureBox)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// m_combo
|
||||
@@ -97,7 +110,7 @@
|
||||
this.m_combo.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.m_combo.Location = new System.Drawing.Point(227, 8);
|
||||
this.m_combo.Name = "m_combo";
|
||||
this.m_combo.Size = new System.Drawing.Size(745, 24);
|
||||
this.m_combo.Size = new System.Drawing.Size(353, 24);
|
||||
this.m_combo.TabIndex = 0;
|
||||
this.m_combo.Text = "Select an app to uninstall...";
|
||||
//
|
||||
@@ -312,13 +325,14 @@
|
||||
this.downloadInstallGameButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.downloadInstallGameButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.downloadInstallGameButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.downloadInstallGameButton.Location = new System.Drawing.Point(601, 498);
|
||||
this.downloadInstallGameButton.Location = new System.Drawing.Point(601, 504);
|
||||
this.downloadInstallGameButton.Name = "downloadInstallGameButton";
|
||||
this.downloadInstallGameButton.Size = new System.Drawing.Size(371, 30);
|
||||
this.downloadInstallGameButton.TabIndex = 8;
|
||||
this.downloadInstallGameButton.Text = "Download and Install Game/Add to Queue";
|
||||
this.downloadInstallGameButton.UseVisualStyleBackColor = false;
|
||||
this.downloadInstallGameButton.Click += new System.EventHandler(this.downloadInstallGameButton_Click);
|
||||
this.downloadInstallGameButton.Enter += new System.EventHandler(this.downloadInstallGameButton_Click);
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
@@ -341,7 +355,7 @@
|
||||
this.panel1.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "ButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.panel1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.panel1.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(218, 775);
|
||||
this.panel1.TabIndex = 73;
|
||||
@@ -424,7 +438,7 @@
|
||||
this.otherContainer.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.otherContainer.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.otherContainer.Location = new System.Drawing.Point(0, 401);
|
||||
this.otherContainer.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.otherContainer.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.otherContainer.Name = "otherContainer";
|
||||
this.otherContainer.Size = new System.Drawing.Size(218, 167);
|
||||
this.otherContainer.TabIndex = 80;
|
||||
@@ -568,7 +582,7 @@
|
||||
this.otherDrop.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.otherDrop.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.otherDrop.Location = new System.Drawing.Point(0, 373);
|
||||
this.otherDrop.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.otherDrop.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.otherDrop.Name = "otherDrop";
|
||||
this.otherDrop.Padding = new System.Windows.Forms.Padding(7, 0, 0, 0);
|
||||
this.otherDrop.Size = new System.Drawing.Size(218, 28);
|
||||
@@ -586,7 +600,7 @@
|
||||
this.backupContainer.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.backupContainer.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.backupContainer.Location = new System.Drawing.Point(0, 313);
|
||||
this.backupContainer.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.backupContainer.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.backupContainer.Name = "backupContainer";
|
||||
this.backupContainer.Size = new System.Drawing.Size(218, 60);
|
||||
this.backupContainer.TabIndex = 76;
|
||||
@@ -604,7 +618,7 @@
|
||||
this.backupDrop.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.backupDrop.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.backupDrop.Location = new System.Drawing.Point(0, 285);
|
||||
this.backupDrop.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.backupDrop.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.backupDrop.Name = "backupDrop";
|
||||
this.backupDrop.Padding = new System.Windows.Forms.Padding(7, 0, 0, 0);
|
||||
this.backupDrop.Size = new System.Drawing.Size(218, 28);
|
||||
@@ -628,7 +642,7 @@
|
||||
this.sideloadContainer.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.sideloadContainer.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.sideloadContainer.Location = new System.Drawing.Point(0, 56);
|
||||
this.sideloadContainer.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.sideloadContainer.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.sideloadContainer.Name = "sideloadContainer";
|
||||
this.sideloadContainer.Size = new System.Drawing.Size(218, 229);
|
||||
this.sideloadContainer.TabIndex = 74;
|
||||
@@ -688,7 +702,7 @@
|
||||
this.sideloadDrop.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.sideloadDrop.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.sideloadDrop.Location = new System.Drawing.Point(0, 28);
|
||||
this.sideloadDrop.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.sideloadDrop.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.sideloadDrop.Name = "sideloadDrop";
|
||||
this.sideloadDrop.Padding = new System.Windows.Forms.Padding(7, 0, 0, 0);
|
||||
this.sideloadDrop.Size = new System.Drawing.Size(218, 28);
|
||||
@@ -771,7 +785,7 @@
|
||||
this.gamesQueListBox.FormattingEnabled = true;
|
||||
this.gamesQueListBox.ItemHeight = 16;
|
||||
this.gamesQueListBox.Location = new System.Drawing.Point(601, 530);
|
||||
this.gamesQueListBox.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.gamesQueListBox.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.gamesQueListBox.Name = "gamesQueListBox";
|
||||
this.gamesQueListBox.Size = new System.Drawing.Size(372, 114);
|
||||
this.gamesQueListBox.TabIndex = 9;
|
||||
@@ -790,9 +804,9 @@
|
||||
this.devicesComboBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.devicesComboBox.FormattingEnabled = true;
|
||||
this.devicesComboBox.Location = new System.Drawing.Point(227, 39);
|
||||
this.devicesComboBox.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.devicesComboBox.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.devicesComboBox.Name = "devicesComboBox";
|
||||
this.devicesComboBox.Size = new System.Drawing.Size(206, 24);
|
||||
this.devicesComboBox.Size = new System.Drawing.Size(161, 24);
|
||||
this.devicesComboBox.TabIndex = 1;
|
||||
this.devicesComboBox.Text = "Select your device";
|
||||
this.devicesComboBox.SelectedIndexChanged += new System.EventHandler(this.devicesComboBox_SelectedIndexChanged);
|
||||
@@ -808,12 +822,11 @@
|
||||
this.remotesList.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.remotesList.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.remotesList.FormattingEnabled = true;
|
||||
this.remotesList.Location = new System.Drawing.Point(530, 39);
|
||||
this.remotesList.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
|
||||
this.remotesList.Location = new System.Drawing.Point(527, 39);
|
||||
this.remotesList.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.remotesList.Name = "remotesList";
|
||||
this.remotesList.Size = new System.Drawing.Size(206, 24);
|
||||
this.remotesList.Size = new System.Drawing.Size(53, 24);
|
||||
this.remotesList.TabIndex = 3;
|
||||
this.remotesList.Text = "Select a mirror";
|
||||
this.remotesList.SelectedIndexChanged += new System.EventHandler(this.remotesList_SelectedIndexChanged);
|
||||
//
|
||||
// gamesListView
|
||||
@@ -826,13 +839,14 @@
|
||||
this.gamesListView.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.gamesListView.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.gamesListView.HideSelection = false;
|
||||
this.gamesListView.Location = new System.Drawing.Point(227, 71);
|
||||
this.gamesListView.Location = new System.Drawing.Point(234, 71);
|
||||
this.gamesListView.Name = "gamesListView";
|
||||
this.gamesListView.Size = new System.Drawing.Size(745, 423);
|
||||
this.gamesListView.TabIndex = 6;
|
||||
this.gamesListView.UseCompatibleStateImageBehavior = false;
|
||||
this.gamesListView.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||
this.gamesListView.SelectedIndexChanged += new System.EventHandler(this.gamesListView_SelectedIndexChanged);
|
||||
this.gamesListView.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.gamesListView_KeyPress);
|
||||
this.gamesListView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.gamesListView_MouseDoubleClick);
|
||||
//
|
||||
// searchTextBox
|
||||
@@ -845,22 +859,15 @@
|
||||
this.searchTextBox.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.searchTextBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.searchTextBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.searchTextBox.Location = new System.Drawing.Point(741, 40);
|
||||
this.searchTextBox.Location = new System.Drawing.Point(481, 274);
|
||||
this.searchTextBox.Name = "searchTextBox";
|
||||
this.searchTextBox.Size = new System.Drawing.Size(231, 22);
|
||||
this.searchTextBox.TabIndex = 5;
|
||||
this.searchTextBox.Text = "Search";
|
||||
this.searchTextBox.Visible = false;
|
||||
this.searchTextBox.TextChanged += new System.EventHandler(this.searchTextBox_TextChanged);
|
||||
//
|
||||
// gamesPictureBox
|
||||
//
|
||||
this.gamesPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.gamesPictureBox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
|
||||
this.gamesPictureBox.Location = new System.Drawing.Point(228, 529);
|
||||
this.gamesPictureBox.Name = "gamesPictureBox";
|
||||
this.gamesPictureBox.Size = new System.Drawing.Size(367, 214);
|
||||
this.gamesPictureBox.TabIndex = 84;
|
||||
this.gamesPictureBox.TabStop = false;
|
||||
this.searchTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.searchTextBox_KeyPress);
|
||||
this.searchTextBox.Leave += new System.EventHandler(this.searchTextBox_Leave);
|
||||
//
|
||||
// gamesQueueLabel
|
||||
//
|
||||
@@ -888,9 +895,9 @@
|
||||
this.MountButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.MountButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.MountButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.MountButton.Location = new System.Drawing.Point(438, 39);
|
||||
this.MountButton.Location = new System.Drawing.Point(393, 39);
|
||||
this.MountButton.Name = "MountButton";
|
||||
this.MountButton.Size = new System.Drawing.Size(87, 26);
|
||||
this.MountButton.Size = new System.Drawing.Size(66, 26);
|
||||
this.MountButton.TabIndex = 2;
|
||||
this.MountButton.Text = "Mount";
|
||||
this.MountButton.UseVisualStyleBackColor = false;
|
||||
@@ -941,7 +948,6 @@
|
||||
this.DragDropLbl.TabIndex = 25;
|
||||
this.DragDropLbl.Text = "DragDropLBL";
|
||||
this.DragDropLbl.Visible = false;
|
||||
this.DragDropLbl.Click += new System.EventHandler(this.DragDropLbl_Click);
|
||||
//
|
||||
// label1
|
||||
//
|
||||
@@ -967,13 +973,134 @@
|
||||
this.pictureBox1.ErrorImage = null;
|
||||
this.pictureBox1.ImageLocation = global::AndroidSideloader.Properties.Settings.Default.BackPicturePath;
|
||||
this.pictureBox1.InitialImage = null;
|
||||
this.pictureBox1.Location = new System.Drawing.Point(217, -1);
|
||||
this.pictureBox1.Location = new System.Drawing.Point(217, -2);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(764, 772);
|
||||
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||
this.pictureBox1.TabIndex = 74;
|
||||
this.pictureBox1.TabStop = false;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
|
||||
this.label2.Location = new System.Drawing.Point(460, 223);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(271, 110);
|
||||
this.label2.TabIndex = 89;
|
||||
this.label2.Visible = false;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
|
||||
this.label3.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.label3.Location = new System.Drawing.Point(494, 231);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(204, 34);
|
||||
this.label3.TabIndex = 90;
|
||||
this.label3.Text = "Start typing to search.\r\nEsc = Close, Enter = Install\r\n";
|
||||
this.label3.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
this.label3.Visible = false;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
|
||||
this.label4.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.label4.Location = new System.Drawing.Point(531, 303);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(132, 17);
|
||||
this.label4.TabIndex = 90;
|
||||
this.label4.Text = "Shorcut: CTRL+F";
|
||||
this.label4.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
this.label4.Visible = false;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
|
||||
this.label5.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.label5.Location = new System.Drawing.Point(616, 15);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(117, 17);
|
||||
this.label5.TabIndex = 90;
|
||||
this.label5.Text = "Search app list";
|
||||
this.label5.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
//
|
||||
// pictureBox3
|
||||
//
|
||||
this.pictureBox3.Image = global::AndroidSideloader.Properties.Resources.orangekey;
|
||||
this.pictureBox3.Location = new System.Drawing.Point(767, 10);
|
||||
this.pictureBox3.Name = "pictureBox3";
|
||||
this.pictureBox3.Size = new System.Drawing.Size(21, 20);
|
||||
this.pictureBox3.TabIndex = 92;
|
||||
this.pictureBox3.TabStop = false;
|
||||
//
|
||||
// pictureBox2
|
||||
//
|
||||
this.pictureBox2.Image = global::AndroidSideloader.Properties.Resources.SearchGlass;
|
||||
this.pictureBox2.Location = new System.Drawing.Point(666, 41);
|
||||
this.pictureBox2.Name = "pictureBox2";
|
||||
this.pictureBox2.Size = new System.Drawing.Size(28, 24);
|
||||
this.pictureBox2.TabIndex = 91;
|
||||
this.pictureBox2.TabStop = false;
|
||||
this.pictureBox2.Click += new System.EventHandler(this.pictureBox2_Click);
|
||||
//
|
||||
// gamesPictureBox
|
||||
//
|
||||
this.gamesPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.gamesPictureBox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
|
||||
this.gamesPictureBox.Location = new System.Drawing.Point(228, 529);
|
||||
this.gamesPictureBox.Name = "gamesPictureBox";
|
||||
this.gamesPictureBox.Size = new System.Drawing.Size(367, 214);
|
||||
this.gamesPictureBox.TabIndex = 84;
|
||||
this.gamesPictureBox.TabStop = false;
|
||||
//
|
||||
// pictureBox4
|
||||
//
|
||||
this.pictureBox4.Image = global::AndroidSideloader.Properties.Resources.greenkey;
|
||||
this.pictureBox4.Location = new System.Drawing.Point(767, 39);
|
||||
this.pictureBox4.Name = "pictureBox4";
|
||||
this.pictureBox4.Size = new System.Drawing.Size(21, 20);
|
||||
this.pictureBox4.TabIndex = 92;
|
||||
this.pictureBox4.TabStop = false;
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
|
||||
this.label6.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.label6.Location = new System.Drawing.Point(792, 12);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(145, 17);
|
||||
this.label6.TabIndex = 90;
|
||||
this.label6.Text = "= Update Available";
|
||||
this.label6.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
//
|
||||
// label7
|
||||
//
|
||||
this.label7.AutoSize = true;
|
||||
this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
|
||||
this.label7.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.label7.Location = new System.Drawing.Point(792, 41);
|
||||
this.label7.Name = "label7";
|
||||
this.label7.Size = new System.Drawing.Size(98, 17);
|
||||
this.label7.TabIndex = 90;
|
||||
this.label7.Text = "= Up to date";
|
||||
this.label7.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
//
|
||||
// label8
|
||||
//
|
||||
this.label8.AutoSize = true;
|
||||
this.label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
|
||||
this.label8.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.label8.Location = new System.Drawing.Point(459, 42);
|
||||
this.label8.Name = "label8";
|
||||
this.label8.Size = new System.Drawing.Size(65, 17);
|
||||
this.label8.TabIndex = 90;
|
||||
this.label8.Text = "Mirror #";
|
||||
this.label8.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AllowDrop = true;
|
||||
@@ -981,14 +1108,22 @@
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
|
||||
this.ClientSize = new System.Drawing.Size(980, 775);
|
||||
this.Controls.Add(this.pictureBox4);
|
||||
this.Controls.Add(this.pictureBox3);
|
||||
this.Controls.Add(this.pictureBox2);
|
||||
this.Controls.Add(this.label7);
|
||||
this.Controls.Add(this.label6);
|
||||
this.Controls.Add(this.label8);
|
||||
this.Controls.Add(this.label5);
|
||||
this.Controls.Add(this.label4);
|
||||
this.Controls.Add(this.searchTextBox);
|
||||
this.Controls.Add(this.label3);
|
||||
this.Controls.Add(this.freeDisclaimer);
|
||||
this.Controls.Add(this.DragDropLbl);
|
||||
this.Controls.Add(this.MountButton);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.gamesQueueLabel);
|
||||
this.Controls.Add(this.gamesPictureBox);
|
||||
this.Controls.Add(this.searchTextBox);
|
||||
this.Controls.Add(this.gamesListView);
|
||||
this.Controls.Add(this.remotesList);
|
||||
this.Controls.Add(this.devicesComboBox);
|
||||
this.Controls.Add(this.gamesQueListBox);
|
||||
@@ -998,6 +1133,8 @@
|
||||
this.Controls.Add(this.m_combo);
|
||||
this.Controls.Add(this.notesRichTextBox);
|
||||
this.Controls.Add(this.ProgressText);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.gamesListView);
|
||||
this.Controls.Add(this.pictureBox1);
|
||||
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.MaximizeBox = false;
|
||||
@@ -1016,8 +1153,11 @@
|
||||
this.otherContainer.ResumeLayout(false);
|
||||
this.backupContainer.ResumeLayout(false);
|
||||
this.sideloadContainer.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.gamesPictureBox)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.gamesPictureBox)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@@ -1072,6 +1212,16 @@
|
||||
private System.Windows.Forms.Button removeQUSetting;
|
||||
private System.Windows.Forms.Button InstallQUset;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.PictureBox pictureBox2;
|
||||
private System.Windows.Forms.PictureBox pictureBox3;
|
||||
private System.Windows.Forms.PictureBox pictureBox4;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.Label label8;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
655
MainForm.cs
655
MainForm.cs
@@ -12,8 +12,10 @@ using System.Net.NetworkInformation;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Timers;
|
||||
using System.Windows.Forms;
|
||||
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
public partial class MainForm : Form
|
||||
@@ -35,12 +37,201 @@ namespace AndroidSideloader
|
||||
|
||||
{
|
||||
InitializeComponent();
|
||||
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
|
||||
t.Interval = 840000; // 14 mins between wakeup commands
|
||||
t.Tick += new EventHandler(timer_Tick);
|
||||
t.Start();
|
||||
lvwColumnSorter = new ListViewColumnSorter();
|
||||
this.gamesListView.ListViewItemSorter = lvwColumnSorter;
|
||||
if (searchTextBox.Visible)
|
||||
searchTextBox.Focus();
|
||||
|
||||
}
|
||||
|
||||
private string oldTitle = "";
|
||||
|
||||
|
||||
private async void Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
string adbFile = "C:\\RSL\\2.1.1\\adb\\adb.exe";
|
||||
string adbDir = "C:\\RSL\\2.1.1\\adb";
|
||||
string fileName = "";
|
||||
string destFile = "";
|
||||
string date_time = DateTime.Now.ToString("dddd, MMMM dd @ hh:mmtt (UTC)");
|
||||
Logger.Log($"\n\n##############\n##############\n##############\n\nAPP LAUNCH DATE/TIME: " + date_time + "\n\n##############\n##############\n##############\n\n");
|
||||
Properties.Settings.Default.MainDir = Environment.CurrentDirectory;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
if (!File.Exists(adbFile))
|
||||
{
|
||||
Directory.CreateDirectory(adbDir);
|
||||
if (System.IO.Directory.Exists($"{Environment.CurrentDirectory}\\adb"))
|
||||
{
|
||||
string[] ADBfiles = System.IO.Directory.GetFiles($"{Properties.Settings.Default.MainDir}\\adb");
|
||||
|
||||
// Copy the files and overwrite destination files if they already exist.
|
||||
foreach (string s in ADBfiles)
|
||||
{
|
||||
fileName = System.IO.Path.GetFileName(s);
|
||||
destFile = System.IO.Path.Combine(adbDir, fileName);
|
||||
System.IO.File.Copy(s, destFile, true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
Properties.Settings.Default.ADBPath = adbFile;
|
||||
Properties.Settings.Default.Save();
|
||||
if (File.Exists(Sideloader.CrashLogPath))
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show(this, $"Sideloader crashed during your last use.\nPlease report issue @ https://github.com/nerdunit/androidsideloader/issues + send the crashlog to a mod or dev.\n\n(Crashlog.txt is located here: {Path.GetFullPath(Sideloader.CrashLogPath)})\n\nIf you've already sent it press YES to delete it and prevent this message. Press NO if you'd still like to send it.", "Crash Detected", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
File.Delete(Sideloader.CrashLogPath);
|
||||
else
|
||||
Process.Start("explorer.exe", Properties.Settings.Default.MainDir);
|
||||
}
|
||||
CheckForInternet();
|
||||
|
||||
if (HasInternet == true)
|
||||
Sideloader.downloadFiles();
|
||||
else
|
||||
FlexibleMessageBox.Show("Cannot connect to google dns, your internet may be down, won't use rclone or online features!");
|
||||
await Task.Delay(100);
|
||||
|
||||
if (!Directory.Exists(BackupFolder))
|
||||
Directory.CreateDirectory(BackupFolder);
|
||||
|
||||
if (Directory.Exists(Sideloader.TempFolder))
|
||||
{
|
||||
Directory.Delete(Sideloader.TempFolder, true);
|
||||
Directory.CreateDirectory(Sideloader.TempFolder);
|
||||
}
|
||||
|
||||
//Delete the Debug file if it is more than 5MB
|
||||
if (File.Exists(Logger.logfile))
|
||||
{
|
||||
long length = new System.IO.FileInfo(Logger.logfile).Length;
|
||||
if (length > 5000000) File.Delete(Logger.logfile);
|
||||
}
|
||||
|
||||
RCLONE.Init();
|
||||
try { Spoofer.spoofer.Init(); } catch { }
|
||||
|
||||
if (Properties.Settings.Default.CallUpgrade)
|
||||
{
|
||||
Properties.Settings.Default.Upgrade();
|
||||
Properties.Settings.Default.CallUpgrade = false;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
this.CenterToScreen();
|
||||
gamesListView.View = View.Details;
|
||||
gamesListView.FullRowSelect = true;
|
||||
gamesListView.GridLines = true;
|
||||
etaLabel.Text = "";
|
||||
speedLabel.Text = "";
|
||||
diskLabel.Text = "";
|
||||
|
||||
try
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
await CheckForDevice();
|
||||
ChangeTitlebarToDevice();
|
||||
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
|
||||
private async void Form1_Shown(object sender, EventArgs e)
|
||||
{
|
||||
new Thread(() =>
|
||||
{
|
||||
Thread.Sleep(10000);
|
||||
freeDisclaimer.Invoke(() => { freeDisclaimer.Dispose(); });
|
||||
}).Start();
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
if (!debugMode && Properties.Settings.Default.checkForUpdates)
|
||||
{
|
||||
Updater.AppName = "AndroidSideloader";
|
||||
Updater.Repostory = "nerdunit/androidsideloader";
|
||||
Updater.Update();
|
||||
}
|
||||
progressBar.Invoke(() => { progressBar.Style = ProgressBarStyle.Marquee; });
|
||||
ChangeTitle("Initializing Mirrors");
|
||||
initMirrors(true);
|
||||
ChangeTitle("Initializing Games");
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
if (!Directory.Exists(SideloaderRCLONE.ThumbnailsFolder) || !Directory.Exists(SideloaderRCLONE.NotesFolder))
|
||||
{
|
||||
MessageBox.Show("It seems you are missing the thumbnails and/or notes database, the first start of the sideloader takes a bit more time, so dont worry if it looks stuck!");
|
||||
}
|
||||
ChangeTitle("Syncing Game Photos");
|
||||
SideloaderRCLONE.UpdateGamePhotos(currentRemote);
|
||||
ChangeTitle("Checking for Updates on server...");
|
||||
SideloaderRCLONE.UpdateGameNotes(currentRemote);
|
||||
listappsbtn();
|
||||
});
|
||||
t1.SetApartmentState(ApartmentState.STA);
|
||||
t1.IsBackground = false;
|
||||
if (HasInternet)
|
||||
t1.Start();
|
||||
|
||||
showAvailableSpace();
|
||||
|
||||
intToolTips();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
ChangeTitle("GREEN = Up to date, ORANGE = Out of date - Checking installed app versions, please wait...");
|
||||
|
||||
initListView();
|
||||
ChangeTitle("Loaded");
|
||||
downloadInstallGameButton.Enabled = true;
|
||||
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
isLoading = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void intToolTips()
|
||||
{
|
||||
ToolTip ListDevicesToolTip = new ToolTip();
|
||||
ListDevicesToolTip.SetToolTip(this.devicesbutton, "Lists the devices in a message box, also updates title bar");
|
||||
ToolTip SideloadAPKToolTip = new ToolTip();
|
||||
SideloadAPKToolTip.SetToolTip(this.startsideloadbutton, "Sideloads/Installs one apk on the android device");
|
||||
ToolTip OBBToolTip = new ToolTip();
|
||||
OBBToolTip.SetToolTip(this.obbcopybutton, "Copies an obb folder to the Android/Obb folder from the device, some games/apps need this");
|
||||
ToolTip BackupGameDataToolTip = new ToolTip();
|
||||
BackupGameDataToolTip.SetToolTip(this.backupbutton, "Saves the game and apps data to the sideloader folder, does not save apk's and obb's");
|
||||
ToolTip RestoreGameDataToolTip = new ToolTip();
|
||||
RestoreGameDataToolTip.SetToolTip(this.restorebutton, "Restores the game and apps data to the device, first use Backup Game Data button");
|
||||
ToolTip GetAPKToolTip = new ToolTip();
|
||||
GetAPKToolTip.SetToolTip(this.getApkButton, "Saves the selected apk to the folder where the sideloader is");
|
||||
ToolTip sideloadFolderToolTip = new ToolTip();
|
||||
sideloadFolderToolTip.SetToolTip(this.sideloadFolderButton, "Sideloads every apk from a folder");
|
||||
ToolTip uninstallAppToolTip = new ToolTip();
|
||||
uninstallAppToolTip.SetToolTip(this.uninstallAppButton, "Uninstalls selected app");
|
||||
ToolTip userjsonToolTip = new ToolTip();
|
||||
userjsonToolTip.SetToolTip(this.ADBWirelessEnable, "After you enter your username it will create an user.json file needed for some games");
|
||||
ToolTip etaToolTip = new ToolTip();
|
||||
etaToolTip.SetToolTip(this.etaLabel, "Estimated time when game will finish download, updates every 5 seconds, format is HH:MM:SS");
|
||||
ToolTip dlsToolTip = new ToolTip();
|
||||
dlsToolTip.SetToolTip(this.speedLabel, "Current download speed, updates every second, in mbps");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void timer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
ADB.RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP");
|
||||
}
|
||||
|
||||
public async void ChangeTitle(string txt, bool reset = true)
|
||||
{
|
||||
this.Invoke(() => { oldTitle = txt; this.Text = "Rookie's Sideloader | " + txt; });
|
||||
@@ -52,6 +243,9 @@ namespace AndroidSideloader
|
||||
ProgressText.Invoke(() => { ProgressText.Text = oldTitle; });
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void ShowSubMenu(Panel subMenu)
|
||||
{
|
||||
if (subMenu.Visible == false)
|
||||
@@ -60,6 +254,8 @@ namespace AndroidSideloader
|
||||
subMenu.Visible = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private async void startsideloadbutton_Click(object sender, EventArgs e)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
@@ -97,6 +293,9 @@ namespace AndroidSideloader
|
||||
ShowPrcOutput(output);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void ShowPrcOutput(ProcessOutput prcout)
|
||||
{
|
||||
string message = $"Output: {prcout.Output}";
|
||||
@@ -105,18 +304,28 @@ namespace AndroidSideloader
|
||||
FlexibleMessageBox.Show(this, message);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public List<string> Devices = new List<string>();
|
||||
|
||||
|
||||
|
||||
|
||||
public async Task<int> CheckForDevice()
|
||||
{
|
||||
|
||||
Devices.Clear();
|
||||
string output = string.Empty;
|
||||
string error = string.Empty;
|
||||
ADB.DeviceID = GetDeviceID();
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
output = ADB.RunAdbCommandToString("devices").Output;
|
||||
output = ADB.RunAdbCommandToString("devices").Output;
|
||||
output = ADB.RunAdbCommandToString("devices").Output;
|
||||
});
|
||||
|
||||
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
@@ -132,12 +341,12 @@ namespace AndroidSideloader
|
||||
foreach (string currLine in line)
|
||||
{
|
||||
if (i > 0 && currLine.Length > 0)
|
||||
{
|
||||
Devices.Add(currLine.Split(' ')[0]);
|
||||
devicesComboBox.Items.Add(currLine.Split(' ')[0]);
|
||||
Logger.Log(currLine.Split(' ')[0] + "\n", false);
|
||||
}
|
||||
Debug.WriteLine(currLine);
|
||||
{
|
||||
Devices.Add(currLine.Split(' ')[0]);
|
||||
devicesComboBox.Items.Add(currLine.Split(' ')[0]);
|
||||
Logger.Log(currLine.Split(' ')[0] + "\n", false);
|
||||
}
|
||||
Debug.WriteLine(currLine);
|
||||
i++;
|
||||
}
|
||||
|
||||
@@ -148,6 +357,9 @@ namespace AndroidSideloader
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public async void devicesbutton_Click(object sender, EventArgs e)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
@@ -241,6 +453,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public async void showAvailableSpace()
|
||||
{
|
||||
string AvailableSpace = string.Empty;
|
||||
@@ -286,121 +499,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
catch { HasInternet = false; }
|
||||
}
|
||||
|
||||
private async void Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
string adbFile = $"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\\RSL\\2.14HF4\\adb\\adb.exe";
|
||||
string adbDir = $"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\\RSL\\2.14HF4\\adb";
|
||||
string fileName = "";
|
||||
string destFile = "";
|
||||
Properties.Settings.Default.MainDir = Environment.CurrentDirectory;
|
||||
Properties.Settings.Default.Save();
|
||||
if (!File.Exists(adbFile))
|
||||
{
|
||||
Directory.CreateDirectory(adbDir);
|
||||
if (System.IO.Directory.Exists($"{Environment.CurrentDirectory}\\adb"))
|
||||
{
|
||||
string[] ADBfiles = System.IO.Directory.GetFiles($"{Properties.Settings.Default.MainDir}\\adb");
|
||||
|
||||
// Copy the files and overwrite destination files if they already exist.
|
||||
foreach (string s in ADBfiles)
|
||||
{
|
||||
fileName = System.IO.Path.GetFileName(s);
|
||||
destFile = System.IO.Path.Combine(adbDir, fileName);
|
||||
System.IO.File.Copy(s, destFile, true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Properties.Settings.Default.ADBPath = adbFile;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
if (File.Exists(Sideloader.CrashLogPath))
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show(this, $@"Looks like sideloader crashed last time, please make an issue at https://github.com/nerdunit/androidsideloader/issues
|
||||
Please don't forget to post the crash.log and fill in any details you can
|
||||
Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this message will not appear when you start the sideloader but please first report this issue)", "Crash Detected", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
File.Delete(Sideloader.CrashLogPath);
|
||||
}
|
||||
CheckForInternet();
|
||||
|
||||
if (HasInternet == true)
|
||||
Sideloader.downloadFiles();
|
||||
else
|
||||
FlexibleMessageBox.Show("Cannot connect to google dns, your internet may be down, won't use rclone or online features!");
|
||||
await Task.Delay(100);
|
||||
|
||||
if (!Directory.Exists(BackupFolder))
|
||||
Directory.CreateDirectory(BackupFolder);
|
||||
|
||||
if (Directory.Exists(Sideloader.TempFolder))
|
||||
{
|
||||
Directory.Delete(Sideloader.TempFolder, true);
|
||||
Directory.CreateDirectory(Sideloader.TempFolder);
|
||||
}
|
||||
|
||||
//Delete the Debug file if it is more than 5MB
|
||||
if (File.Exists(Logger.logfile))
|
||||
{
|
||||
long length = new System.IO.FileInfo(Logger.logfile).Length;
|
||||
if (length > 5000000) File.Delete(Logger.logfile);
|
||||
}
|
||||
|
||||
RCLONE.Init();
|
||||
try { Spoofer.spoofer.Init(); } catch { }
|
||||
|
||||
if (Properties.Settings.Default.CallUpgrade)
|
||||
{
|
||||
Properties.Settings.Default.Upgrade();
|
||||
Properties.Settings.Default.CallUpgrade = false;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
this.CenterToScreen();
|
||||
gamesListView.View = View.Details;
|
||||
gamesListView.FullRowSelect = true;
|
||||
gamesListView.GridLines = true;
|
||||
etaLabel.Text = "";
|
||||
speedLabel.Text = "";
|
||||
diskLabel.Text = "";
|
||||
|
||||
try
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
await CheckForDevice();
|
||||
ChangeTitlebarToDevice();
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
private void intToolTips()
|
||||
{
|
||||
ToolTip ListDevicesToolTip = new ToolTip();
|
||||
ListDevicesToolTip.SetToolTip(this.devicesbutton, "Lists the devices in a message box, also updates title bar");
|
||||
ToolTip SideloadAPKToolTip = new ToolTip();
|
||||
SideloadAPKToolTip.SetToolTip(this.startsideloadbutton, "Sideloads/Installs one apk on the android device");
|
||||
ToolTip OBBToolTip = new ToolTip();
|
||||
OBBToolTip.SetToolTip(this.obbcopybutton, "Copies an obb folder to the Android/Obb folder from the device, some games/apps need this");
|
||||
ToolTip BackupGameDataToolTip = new ToolTip();
|
||||
BackupGameDataToolTip.SetToolTip(this.backupbutton, "Saves the game and apps data to the sideloader folder, does not save apk's and obb's");
|
||||
ToolTip RestoreGameDataToolTip = new ToolTip();
|
||||
RestoreGameDataToolTip.SetToolTip(this.restorebutton, "Restores the game and apps data to the device, first use Backup Game Data button");
|
||||
ToolTip GetAPKToolTip = new ToolTip();
|
||||
GetAPKToolTip.SetToolTip(this.getApkButton, "Saves the selected apk to the folder where the sideloader is");
|
||||
ToolTip sideloadFolderToolTip = new ToolTip();
|
||||
sideloadFolderToolTip.SetToolTip(this.sideloadFolderButton, "Sideloads every apk from a folder");
|
||||
ToolTip uninstallAppToolTip = new ToolTip();
|
||||
uninstallAppToolTip.SetToolTip(this.uninstallAppButton, "Uninstalls selected app");
|
||||
ToolTip userjsonToolTip = new ToolTip();
|
||||
userjsonToolTip.SetToolTip(this.ADBWirelessEnable, "After you enter your username it will create an user.json file needed for some games");
|
||||
ToolTip etaToolTip = new ToolTip();
|
||||
etaToolTip.SetToolTip(this.etaLabel, "Estimated time when game will finish download, updates every 5 seconds, format is HH:MM:SS");
|
||||
ToolTip dlsToolTip = new ToolTip();
|
||||
dlsToolTip.SetToolTip(this.speedLabel, "Current download speed, updates every second, in mbps");
|
||||
}
|
||||
|
||||
public static string BackupFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups");
|
||||
|
||||
public static string taa = "";
|
||||
@@ -481,7 +580,7 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
string forsettings = String.Join("", line);
|
||||
Properties.Settings.Default.InstalledApps = forsettings;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
|
||||
for (int i = 0; i < line.Length; i++)
|
||||
{
|
||||
if (line[i].Length > 9)
|
||||
@@ -522,7 +621,7 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
|
||||
string GameName = m_combo.SelectedItem.ToString();
|
||||
ProcessOutput output = new ProcessOutput("", "");
|
||||
|
||||
ChangeTitle("Extracting APK....");
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
output = Sideloader.getApk(GameName);
|
||||
@@ -533,7 +632,8 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
|
||||
ChangeTitle("APK Extracted to " + Properties.Settings.Default.MainDir +". Opening folder now.");
|
||||
Process.Start("explorer.exe", Properties.Settings.Default.MainDir);
|
||||
ShowPrcOutput(output);
|
||||
}
|
||||
|
||||
@@ -653,7 +753,7 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
string directory = Path.GetDirectoryName(data);
|
||||
//if is directory
|
||||
string dir = Path.GetDirectoryName(data);
|
||||
string path = $"{dir}\\Install.txt";
|
||||
string file = $"{dir}\\Install.txt";
|
||||
if (Directory.Exists(data))
|
||||
{
|
||||
output += ADB.CopyOBB(data);
|
||||
@@ -670,7 +770,7 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
return;
|
||||
else
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
output += Sideloader.RunADBCommandsFromFile(path);
|
||||
output += Sideloader.RunADBCommandsFromFile(file);
|
||||
if (output.Error.Contains("mkdir"))
|
||||
output.Error = "";
|
||||
if (output.Error.Contains("reserved"))
|
||||
@@ -679,12 +779,12 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
}
|
||||
}
|
||||
string[] files = Directory.GetFiles(data);
|
||||
foreach (string file in files)
|
||||
foreach (string file2 in files)
|
||||
{
|
||||
if (File.Exists(file))
|
||||
if (file.EndsWith(".apk"))
|
||||
if (File.Exists(file2))
|
||||
if (file2.EndsWith(".apk"))
|
||||
{
|
||||
output += ADB.Sideload(file);
|
||||
output += ADB.Sideload(file2);
|
||||
}
|
||||
}
|
||||
string[] folders = Directory.GetDirectories(data);
|
||||
@@ -704,14 +804,14 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
{
|
||||
if (File.Exists($"{dir}\\Install.txt"))
|
||||
{
|
||||
|
||||
file = data;
|
||||
DialogResult dialogResult = MessageBox.Show("Special instructions have been found with this file, would you like to run them automatically?", "Special Instructions found!", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
return;
|
||||
else
|
||||
{
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
output += Sideloader.RunADBCommandsFromFile(path);
|
||||
output += Sideloader.RunADBCommandsFromFile(file);
|
||||
ChangeTitle("Done.");
|
||||
}
|
||||
}
|
||||
@@ -738,7 +838,7 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
if (extension == ".txt")
|
||||
{
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
output += Sideloader.RunADBCommandsFromFile(path);
|
||||
output += Sideloader.RunADBCommandsFromFile(file);
|
||||
ChangeTitle("Done.");
|
||||
}
|
||||
}
|
||||
@@ -778,7 +878,7 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
if (!File.Exists("installedPackages.json"))
|
||||
File.Create("installedPackages.json");
|
||||
if (File.Exists("instlledPackages.json"))
|
||||
Sideloader.InstalledPackages = JsonConvert.DeserializeObject<Dictionary<string, string>>(File.ReadAllText("installedPackages.json"));
|
||||
Sideloader.InstalledPackages = JsonConvert.DeserializeObject<Dictionary<string, string>>(File.ReadAllText("installedPackages.json"));
|
||||
foreach (string column in SideloaderRCLONE.gameProperties)
|
||||
{
|
||||
gamesListView.Columns.Add(column, 150);
|
||||
@@ -847,57 +947,6 @@ Do you want to delete the {Sideloader.CrashLogPath} (if you press yes, this mess
|
||||
gamesListView.EndUpdate();
|
||||
}
|
||||
|
||||
private async void Form1_Shown(object sender, EventArgs e)
|
||||
{
|
||||
new Thread(() =>
|
||||
{
|
||||
Thread.Sleep(10000);
|
||||
freeDisclaimer.Invoke(() => { freeDisclaimer.Dispose(); });
|
||||
}).Start();
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
if (!debugMode && Properties.Settings.Default.checkForUpdates)
|
||||
{
|
||||
Updater.AppName = "AndroidSideloader";
|
||||
Updater.Repostory = "nerdunit/androidsideloader";
|
||||
Updater.Update();
|
||||
}
|
||||
progressBar.Invoke(() => { progressBar.Style = ProgressBarStyle.Marquee; });
|
||||
ChangeTitle("Initializing Mirrors");
|
||||
initMirrors(true);
|
||||
ChangeTitle("Initializing Games");
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
if (!Directory.Exists(SideloaderRCLONE.ThumbnailsFolder) || !Directory.Exists(SideloaderRCLONE.NotesFolder))
|
||||
{
|
||||
MessageBox.Show("It seems you are missing the thumbnails and/or notes database, the first start of the sideloader takes a bit more time, so dont worry if it looks stuck!");
|
||||
}
|
||||
ChangeTitle("Syncing Game Photos");
|
||||
SideloaderRCLONE.UpdateGamePhotos(currentRemote);
|
||||
ChangeTitle("Checking for Updates on server...");
|
||||
SideloaderRCLONE.UpdateGameNotes(currentRemote);
|
||||
listappsbtn();
|
||||
});
|
||||
t1.SetApartmentState(ApartmentState.STA);
|
||||
t1.IsBackground = false;
|
||||
if (HasInternet)
|
||||
t1.Start();
|
||||
|
||||
showAvailableSpace();
|
||||
|
||||
intToolTips();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
ChangeTitle("GREEN = Up to date, ORANGE = Out of date - Checking installed app versions, please wait...");
|
||||
|
||||
initListView();
|
||||
ChangeTitle("Loaded");
|
||||
downloadInstallGameButton.Enabled = true;
|
||||
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
isLoading = false;
|
||||
}
|
||||
|
||||
private void initMirrors(bool random)
|
||||
{
|
||||
@@ -970,13 +1019,14 @@ without him none of this would be possible
|
||||
- Thanks to Serge Weinstock for developing SergeUtils, which is used to search the combo box
|
||||
- Thanks to Mike Gold https://www.c-sharpcorner.com/members/mike-gold2 for the scrollable message box
|
||||
|
||||
- HFP Thanks to: Roma/Rookie, Pmow, Flow, Sarah, Kaladin, and the mod staff!";
|
||||
- HFP Thanks to: Roma/Rookie, Pmow, Flow, Kaladin, and the mod staff!";
|
||||
|
||||
FlexibleMessageBox.Show(about);
|
||||
}
|
||||
|
||||
private async void ADBWirelessEnable_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
ADB.WakeDevice();
|
||||
DialogResult dialogResult = MessageBox.Show("Make sure your Quest is plugged in VIA USB then press OK, if you need a moment press Cancel and come back when you're ready.", "Connect Quest now.", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
@@ -989,31 +1039,39 @@ without him none of this would be possible
|
||||
Thread.Sleep(1000);
|
||||
string input = ADB.RunAdbCommandToString("shell ip route").Output;
|
||||
|
||||
Properties.Settings.Default.WirelessADB = true;
|
||||
Properties.Settings.Default.Save();
|
||||
string[] strArrayOne = new string[] { "" };
|
||||
strArrayOne = input.Split(' ');
|
||||
if (strArrayOne[0].Length > 7)
|
||||
{
|
||||
string[] strArrayOne = new string[] { "" };
|
||||
strArrayOne = input.Split(' ');
|
||||
if (strArrayOne[0].Length > 7)
|
||||
{
|
||||
string IPaddr = strArrayOne[8];
|
||||
string IPcmnd = "connect " + IPaddr + ":5555";
|
||||
MessageBox.Show($"Your Quest's local IP address is: {IPaddr}\n\nPlease disconnect your Quest then wait 2 seconds.\nOnce it is disconnected hit OK", "", MessageBoxButtons.OK);
|
||||
Thread.Sleep(2000);
|
||||
ADB.RunAdbCommandToString(IPcmnd);
|
||||
await Program.form.CheckForDevice();
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
Program.form.showAvailableSpace();
|
||||
Properties.Settings.Default.IPAddress = IPcmnd;
|
||||
Properties.Settings.Default.Save();
|
||||
string IPaddr = strArrayOne[8];
|
||||
string IPcmnd = "connect " + IPaddr + ":5555";
|
||||
MessageBox.Show($"Your Quest's local IP address is: {IPaddr}\n\nPlease disconnect your Quest then wait 2 seconds.\nOnce it is disconnected hit OK", "", MessageBoxButtons.OK);
|
||||
Thread.Sleep(2000);
|
||||
ADB.RunAdbCommandToString(IPcmnd);
|
||||
await Program.form.CheckForDevice();
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
Program.form.showAvailableSpace();
|
||||
Properties.Settings.Default.IPAddress = IPcmnd;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
MessageBox.Show($"Connected!!", "", MessageBoxButtons.OK);
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
MessageBox.Show($"Connected! We can now automatically disable the Quest wifi chip from falling asleep. This makes it so Rookie can work wirelessly even if the device has entered \"sleep mode\". This setting is NOT permanent and resets upon Quest reboot, just like wireless ADB functionality.\n\nNOTE: This may cause the device battery to drain while it is in sleep mode at a very slightly increased rate. We recommend this setting for the majority of users for ease of use purposes. If you click NO you must keep your Quest connected to a charger or wake your device and then put it back on hold before using Rookie wirelessly. Do you want us to stop sleep mode from disabling wireless ADB?", "", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_available 1");
|
||||
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_enabled 1");
|
||||
}
|
||||
else
|
||||
MessageBox.Show("No device connected!");
|
||||
|
||||
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_available 1");
|
||||
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_enabled 1");
|
||||
}
|
||||
else
|
||||
MessageBox.Show("No device connected!");
|
||||
|
||||
}
|
||||
|
||||
private async void listApkButton_Click(object sender, EventArgs e)
|
||||
private async void listApkButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
|
||||
@@ -1068,6 +1126,7 @@ without him none of this would be possible
|
||||
|
||||
private async void downloadInstallGameButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
ChangeTitle("Checking filesize...");
|
||||
long selectedGamesSize = 0;
|
||||
int count = 0;
|
||||
string[] GameSizeGame = new string[1];
|
||||
@@ -1112,8 +1171,10 @@ without him none of this would be possible
|
||||
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"Are you sure you want to download the selected game(s)? The size is {String.Format("{0:0.00}", (double)selectedGamesSize)} MB", "Are you sure?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult != DialogResult.Yes)
|
||||
{
|
||||
ChangeTitle("");
|
||||
return;
|
||||
|
||||
}
|
||||
//Add games to the queue
|
||||
if (gamesToAddList.Count > 0)
|
||||
gamesQueueList.AddRange(gamesToAddList);
|
||||
@@ -1142,7 +1203,6 @@ without him none of this would be possible
|
||||
//Do user json on firsttime
|
||||
if (Properties.Settings.Default.userJsonOnGameInstall)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
Thread userJsonThread = new Thread(() => { ChangeTitle("Pushing user.json"); Sideloader.PushUserJsons(); });
|
||||
userJsonThread.IsBackground = true;
|
||||
userJsonThread.Start();
|
||||
@@ -1155,24 +1215,16 @@ without him none of this would be possible
|
||||
while (gamesQueueList.Count > 0)
|
||||
{
|
||||
gameName = gamesQueueList.ToArray()[0];
|
||||
string packagename = Sideloader.gameNameToPackageName(gameName);
|
||||
string dir = Path.GetDirectoryName(gameName);
|
||||
|
||||
string gameDirectory = Environment.CurrentDirectory + "\\" + gameName;
|
||||
string path = $"{gameDirectory}\\Install.txt";
|
||||
string path = gameDirectory;
|
||||
Directory.CreateDirectory(gameDirectory);
|
||||
ProcessOutput gameDownloadOutput = new ProcessOutput("", "");
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
gameDownloadOutput = RCLONE.runRcloneCommand($"copy \"{currentRemote}:{SideloaderRCLONE.RcloneGamesFolder}/{gameName}\" \"{Environment.CurrentDirectory}\\{gameName}\" --progress --drive-acknowledge-abuse --rc", Properties.Settings.Default.BandwithLimit);
|
||||
|
||||
if (File.Exists($"{gameDirectory}\\Install.txt"))
|
||||
{
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
output += Sideloader.RunADBCommandsFromFile(path);
|
||||
ChangeTitle("Done.");
|
||||
}
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
@@ -1253,6 +1305,7 @@ without him none of this would be possible
|
||||
}
|
||||
if (quotaError == false)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
ADB.DeviceID = GetDeviceID();
|
||||
quotaTries = 0;
|
||||
progressBar.Value = 0;
|
||||
@@ -1264,7 +1317,6 @@ without him none of this would be possible
|
||||
string[] files = Directory.GetFiles(Environment.CurrentDirectory + "\\" + gameName);
|
||||
|
||||
Debug.WriteLine("Game Folder is: " + Environment.CurrentDirectory + "\\" + gameName);
|
||||
|
||||
Debug.WriteLine("FILES IN GAME FOLDER: ");
|
||||
foreach (string file in files)
|
||||
{
|
||||
@@ -1274,14 +1326,7 @@ without him none of this would be possible
|
||||
{
|
||||
Thread apkThread = new Thread(() =>
|
||||
{
|
||||
string packagename = "";
|
||||
foreach (var release in SideloaderRCLONE.games)
|
||||
{
|
||||
if (string.Equals(release[SideloaderRCLONE.ReleaseNameIndex], gameName))
|
||||
packagename = release[SideloaderRCLONE.PackageNameIndex];
|
||||
}
|
||||
ADB.WakeDevice();
|
||||
|
||||
output += ADB.Sideload(file, packagename);
|
||||
});
|
||||
|
||||
@@ -1289,9 +1334,28 @@ without him none of this would be possible
|
||||
while (apkThread.IsAlive)
|
||||
await Task.Delay(100);
|
||||
}
|
||||
if (extension == ".txt")
|
||||
{
|
||||
string fullname = Path.GetFileName(file);
|
||||
if (fullname.Equals("install.txt") || fullname.Equals("Install.txt"))
|
||||
{
|
||||
Thread installtxtThread = new Thread(() =>
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
output += Sideloader.RunADBCommandsFromFile(file);
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
});
|
||||
|
||||
installtxtThread.Start();
|
||||
while (installtxtThread.IsAlive)
|
||||
await Task.Delay(100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Debug.WriteLine(wrDelimiter);
|
||||
ADB.WakeDevice();
|
||||
string[] folders = Directory.GetDirectories(Environment.CurrentDirectory + "\\" + gameName);
|
||||
|
||||
foreach (string folder in folders)
|
||||
@@ -1310,7 +1374,6 @@ without him none of this would be possible
|
||||
|
||||
while (obbThread.IsAlive)
|
||||
await Task.Delay(100);
|
||||
ChangeTitle("Done");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1326,8 +1389,6 @@ without him none of this would be possible
|
||||
gamesQueListBox.DataSource = gamesQueueList;
|
||||
ChangeTitlebarToDevice();
|
||||
showAvailableSpace();
|
||||
listappsbtn(); //reload list to reflect newly installed games
|
||||
initListView();
|
||||
}
|
||||
}
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
@@ -1338,6 +1399,8 @@ without him none of this would be possible
|
||||
ChangeTitlebarToDevice();
|
||||
gamesAreDownloading = false;
|
||||
ShowPrcOutput(output);
|
||||
listappsbtn();
|
||||
initListView();
|
||||
}
|
||||
|
||||
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
|
||||
@@ -1409,6 +1472,17 @@ without him none of this would be possible
|
||||
private void remotesList_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
remotesList.Invoke(() => { currentRemote = remotesList.SelectedItem.ToString(); });
|
||||
if (remotesList.Text.Contains("VRP"))
|
||||
{
|
||||
string lines = remotesList.Text;
|
||||
string pattern = "VRP-mirror";
|
||||
string replacement = "";
|
||||
Regex rgx = new Regex(pattern);
|
||||
string result = rgx.Replace(lines, replacement);
|
||||
char[] delims = new[] { '\r', '\n' };
|
||||
string[] strings = result.Split(delims, StringSplitOptions.RemoveEmptyEntries);
|
||||
remotesList.Text = result;
|
||||
}
|
||||
}
|
||||
|
||||
private void QuestOptionsButton_Click(object sender, EventArgs e)
|
||||
@@ -1451,15 +1525,65 @@ without him none of this would be possible
|
||||
this.gamesListView.Sort();
|
||||
}
|
||||
|
||||
private void CheckEnter(object sender, System.Windows.Forms.KeyPressEventArgs e)
|
||||
{
|
||||
if (e.KeyChar == (char)Keys.Enter)
|
||||
{
|
||||
searchTextBox.Visible = false;
|
||||
label2.Visible = false;
|
||||
label3.Visible = false;
|
||||
label4.Visible = false;
|
||||
}
|
||||
if (e.KeyChar == (char)Keys.Escape)
|
||||
{
|
||||
searchTextBox.Visible = false;
|
||||
label2.Visible = false;
|
||||
label3.Visible = false;
|
||||
label4.Visible = false;
|
||||
}
|
||||
}
|
||||
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
||||
{
|
||||
if (keyData == (Keys.Control | Keys.F))
|
||||
{
|
||||
|
||||
//show search
|
||||
searchTextBox.Clear();
|
||||
searchTextBox.Visible = true;
|
||||
label2.Visible = true;
|
||||
label3.Visible = true;
|
||||
label4.Visible = true;
|
||||
searchTextBox.Focus();
|
||||
}
|
||||
return base.ProcessCmdKey(ref msg, keyData);
|
||||
}
|
||||
private void searchTextBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
gamesListView.SelectedItems.Clear();
|
||||
this.searchTextBox.KeyPress += new
|
||||
System.Windows.Forms.KeyPressEventHandler(CheckEnter);
|
||||
if (gamesListView.Items.Count > 0)
|
||||
{
|
||||
ListViewItem foundItem = gamesListView.FindItemWithText(searchTextBox.Text, true, 0, true);
|
||||
if (foundItem != null)
|
||||
{
|
||||
gamesListView.TopItem = foundItem;
|
||||
if (foundItem == gamesListView.TopItem)
|
||||
{
|
||||
gamesListView.TopItem.Selected = true;
|
||||
}
|
||||
else
|
||||
gamesListView.SelectedItems.Clear();
|
||||
|
||||
if (searchTextBox.Text.Length == 0)
|
||||
gamesListView.SelectedItems.Clear();
|
||||
|
||||
searchTextBox.Focus();
|
||||
this.searchTextBox.KeyPress += new
|
||||
System.Windows.Forms.KeyPressEventHandler(CheckEnter);
|
||||
}
|
||||
else
|
||||
gamesListView.SelectedItems.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1502,29 +1626,6 @@ without him none of this would be possible
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (string packagename in Sideloader.InstalledPackages.Keys)
|
||||
{
|
||||
foreach (var release in SideloaderRCLONE.games)
|
||||
{
|
||||
if (string.Equals(release[SideloaderRCLONE.PackageNameIndex], packagename))
|
||||
{
|
||||
//only keep numbers from 0 to 9 remove everything else then try to compare
|
||||
//FlexibleMessageBox.Show($"You have {packagename} installed on your device");
|
||||
string InstalledVersionCode = ADB.RunAdbCommandToString($"shell \"dumpsys package {packagename} | grep versionCode\"").Output;
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingBeforeFirst(InstalledVersionCode, "versionCode=");
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingAfterFirst(InstalledVersionCode, " ");
|
||||
ulong installedVersionInt = UInt64.Parse(Utilities.StringUtilities.KeepOnlyNumbers(InstalledVersionCode));
|
||||
ulong cloudVersionInt = UInt64.Parse(Utilities.StringUtilities.KeepOnlyNumbers(release[SideloaderRCLONE.VersionCodeIndex]));
|
||||
|
||||
if (installedVersionInt < cloudVersionInt)
|
||||
{
|
||||
//games.Add(release[SideloaderRCLONE.ReleaseNameIndex]);
|
||||
string IVC = InstalledVersionCode.Replace("versionCode=", "");
|
||||
// gamesToUpdate = $"{release[SideloaderRCLONE.GameNameIndex]} is outdated, you have version {IVC} while version {release[SideloaderRCLONE.VersionCodeIndex]} is available\n{gamesToUpdate}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (gamesToUpdate.Length > 0)
|
||||
// FlexibleMessageBox.Show(gamesToUpdate);
|
||||
// else
|
||||
@@ -1541,15 +1642,7 @@ without him none of this would be possible
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
|
||||
if (DeviceConnected)
|
||||
{
|
||||
if (ADB.DeviceID.Contains(":5555"))
|
||||
MessageBox.Show("Mounting does not work with Wireless ADB, you must plug Quest into PC to mount.");
|
||||
|
||||
ADB.RunAdbCommandToString("shell svc usb setFunctions mtp true");
|
||||
}
|
||||
else
|
||||
FlexibleMessageBox.Show("You must connect a device before mounting!");
|
||||
ADB.RunAdbCommandToString("shell svc usb setFunctions mtp true");
|
||||
}
|
||||
|
||||
private void freeDisclaimer_Click(object sender, EventArgs e)
|
||||
@@ -1557,10 +1650,6 @@ without him none of this would be possible
|
||||
Process.Start("https://github.com/nerdunit/androidsideloader");
|
||||
}
|
||||
|
||||
private void DragDropLbl_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Visible = false;
|
||||
}
|
||||
|
||||
private async void removeQUSetting_Click(object sender, EventArgs e)
|
||||
{
|
||||
@@ -1645,6 +1734,42 @@ without him none of this would be possible
|
||||
listappsbtn();
|
||||
initListView();
|
||||
}
|
||||
|
||||
private void pictureBox2_Click(object sender, EventArgs e)
|
||||
{
|
||||
searchTextBox.Clear();
|
||||
searchTextBox.Visible = true;
|
||||
label2.Visible = true;
|
||||
label3.Visible = true;
|
||||
label4.Visible = true;
|
||||
searchTextBox.Focus();
|
||||
}
|
||||
|
||||
private void searchTextBox_Leave(object sender, EventArgs e)
|
||||
{
|
||||
if (searchTextBox.Visible)
|
||||
searchTextBox.Focus();
|
||||
else
|
||||
gamesListView.Focus();
|
||||
}
|
||||
|
||||
private void gamesListView_KeyPress(object sender, KeyPressEventArgs e)
|
||||
{
|
||||
if (e.KeyChar == (char)Keys.Enter)
|
||||
{
|
||||
if (gamesListView.SelectedItems.Count > 0)
|
||||
downloadInstallGameButton_Click(sender, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void searchTextBox_KeyPress(object sender, KeyPressEventArgs e)
|
||||
{
|
||||
if (e.KeyChar == (char)Keys.Enter)
|
||||
{
|
||||
if (gamesListView.SelectedItems.Count > 0)
|
||||
downloadInstallGameButton_Click(sender, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,8 @@ namespace AndroidSideloader
|
||||
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
|
||||
{
|
||||
Exception e = (Exception)args.ExceptionObject;
|
||||
File.WriteAllText(Sideloader.CrashLogPath, $"Message: {e.Message}\nData: {e.Data}\nSource: {e.Source}\nTargetSite: {e.TargetSite}");
|
||||
string date_time = DateTime.Now.ToString("dddd, MMMM dd @ hh:mmtt (UTC)");
|
||||
File.WriteAllText(Sideloader.CrashLogPath, $"Date/Time of crash: {date_time}\nMessage: {e.Message}\nData: {e.Data}\nSource: {e.Source}\nTargetSite: {e.TargetSite}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
30
Properties/Resources.Designer.cs
generated
30
Properties/Resources.Designer.cs
generated
@@ -59,5 +59,35 @@ namespace AndroidSideloader.Properties {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
public static System.Drawing.Bitmap greenkey {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("greenkey", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
public static System.Drawing.Bitmap orangekey {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("orangekey", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
public static System.Drawing.Bitmap SearchGlass {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("SearchGlass", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,4 +117,14 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="orangekey" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\orangekey.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="SearchGlass" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\SearchGlass.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="greenkey" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\greenkey.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
38
Properties/Settings.Designer.cs
generated
38
Properties/Settings.Designer.cs
generated
@@ -12,7 +12,7 @@ namespace AndroidSideloader.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
@@ -430,5 +430,41 @@ namespace AndroidSideloader.Properties {
|
||||
this["CurrPckg"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string ADBFolder {
|
||||
get {
|
||||
return ((string)(this["ADBFolder"]));
|
||||
}
|
||||
set {
|
||||
this["ADBFolder"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool WirelessADB {
|
||||
get {
|
||||
return ((bool)(this["WirelessADB"]));
|
||||
}
|
||||
set {
|
||||
this["WirelessADB"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string CurrentGamename {
|
||||
get {
|
||||
return ((string)(this["CurrentGamename"]));
|
||||
}
|
||||
set {
|
||||
this["CurrentGamename"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,5 +104,14 @@
|
||||
<Setting Name="CurrPckg" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="ADBFolder" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="WirelessADB" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="CurrentGamename" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
@@ -166,9 +166,9 @@ namespace AndroidSideloader
|
||||
Properties.Settings.Default.QUString = $"\"refresh_rate\":{selected},\"eye_texture_width\":{ResBox.Text},\"fov_x\":{FOVx.Text},\"fov_y\":{FOVy.Text},\"username\":\"{UsrBox.Text}\"}}";
|
||||
Properties.Settings.Default.QUStringF = $"{{\"user_id\":{sum},\"app_id\":\"{sum2}\",";
|
||||
Properties.Settings.Default.Save();
|
||||
File.WriteAllText("delete_settings", "");
|
||||
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\delete_settings", "");
|
||||
string boff = Properties.Settings.Default.QUStringF + Properties.Settings.Default.QUString;
|
||||
File.WriteAllText("config.json", boff);
|
||||
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\config.json", boff);
|
||||
}
|
||||
|
||||
|
||||
@@ -282,8 +282,8 @@ namespace AndroidSideloader
|
||||
private void questVids_Click(object sender, EventArgs e)
|
||||
{
|
||||
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
|
||||
if (!Directory.Exists($"{path}\\Quest ScreenShots"))
|
||||
Directory.CreateDirectory($"{path}\\Quest ScreenShots");
|
||||
if (!Directory.Exists($"{path}\\Quest VideoShots"))
|
||||
Directory.CreateDirectory($"{path}\\Quest VideoShots");
|
||||
MessageBox.Show("Please wait until you get the message that the transfer has finished.");
|
||||
ADB.WakeDevice();
|
||||
Program.form.ChangeTitle("Pulling files...");
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
@@ -84,7 +85,7 @@ namespace AndroidSideloader
|
||||
rclone.WaitForExit();
|
||||
|
||||
//if there is one of these errors, we switch the mirrors
|
||||
if (error.Contains("cannot fetch token") || error.Contains("authError") || (error.Contains("quota") && error.Contains("exceeded")))
|
||||
if (error.Contains("cannot fetch token") || error.Contains("authError") || (error.Contains("quota") || error.Contains("exceeded")))
|
||||
{
|
||||
string oldRemote = MainForm.currentRemote;
|
||||
try
|
||||
@@ -102,8 +103,12 @@ namespace AndroidSideloader
|
||||
prcoutput.Output = output;
|
||||
prcoutput.Error = error;
|
||||
}
|
||||
if (!output.Contains("Game Name;Release Name;"))
|
||||
Logger.Log($"Rclone error: {error}\nRclone Output: {output}");
|
||||
return prcoutput;
|
||||
if (error.Contains("There is not enough space"))
|
||||
MessageBox.Show("There isn't enough space on your PC to properly install this game. Please have at least 2x the size of the game you are trying to download/install available on the drive where Rookie is installed.", "NOT ENOUGH SPACE");
|
||||
return prcoutput;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
Resources/SearchGlass.PNG
Normal file
BIN
Resources/SearchGlass.PNG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
BIN
Resources/greenkey.png
Normal file
BIN
Resources/greenkey.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
BIN
Resources/orangekey.png
Normal file
BIN
Resources/orangekey.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
@@ -69,9 +69,9 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
string replacement = "";
|
||||
string pattern = "adb";
|
||||
if (ADB.DeviceID.Length > 1)
|
||||
replacement = $"{Properties.Settings.Default.ADBPath} -s {ADB.DeviceID}";
|
||||
replacement = $"{Properties.Settings.Default.ADBPath} -s {ADB.DeviceID}";
|
||||
else
|
||||
replacement = $"{Properties.Settings.Default.ADBPath}";
|
||||
replacement = $"{Properties.Settings.Default.ADBPath}";
|
||||
Regex rgx = new Regex(pattern);
|
||||
string result = rgx.Replace(cmd, replacement);
|
||||
Program.form.ChangeTitle($"Running {result}");
|
||||
@@ -86,7 +86,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
output.Output += "Custom install successful!";
|
||||
return output;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
{
|
||||
foreach (string f in Directory.GetFiles(FolderPath))
|
||||
{
|
||||
if (Path.GetExtension(f)==".apk")
|
||||
if (Path.GetExtension(f) == ".apk")
|
||||
|
||||
RecursiveOutput += ADB.Sideload(f);
|
||||
}
|
||||
@@ -185,14 +185,11 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
|
||||
output += ADB.RunAdbCommandToString("pull " + apkPath); //pull apk
|
||||
|
||||
string currApkPath = apkPath;
|
||||
while (currApkPath.Contains("/"))
|
||||
currApkPath = currApkPath.Substring(currApkPath.IndexOf("/") + 1);
|
||||
|
||||
if (File.Exists(Environment.CurrentDirectory + "\\" + packageName + ".apk"))
|
||||
File.Delete(Environment.CurrentDirectory + "\\" + packageName + ".apk");
|
||||
if (File.Exists(Properties.Settings.Default.ADBFolder + "\\" + packageName + ".apk"))
|
||||
File.Delete(Properties.Settings.Default.ADBFolder + "\\" + packageName + ".apk");
|
||||
|
||||
File.Move(Environment.CurrentDirectory + "\\adb\\" + currApkPath, Environment.CurrentDirectory + "\\" + packageName + ".apk");
|
||||
File.Move(Properties.Settings.Default.ADBFolder + "\\base.apk", Environment.CurrentDirectory + "\\" + packageName + ".apk");
|
||||
|
||||
return output;
|
||||
}
|
||||
@@ -203,6 +200,8 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
{
|
||||
if (gameName.Equals(game[SideloaderRCLONE.GameNameIndex]))
|
||||
return game[SideloaderRCLONE.PackageNameIndex];
|
||||
if (gameName.Equals(game[SideloaderRCLONE.ReleaseNameIndex]))
|
||||
return game[SideloaderRCLONE.PackageNameIndex];
|
||||
}
|
||||
return gameName;
|
||||
}
|
||||
@@ -259,5 +258,5 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
10
Updater.cs
10
Updater.cs
@@ -16,12 +16,10 @@ namespace AndroidSideloader
|
||||
public static string Repostory { get; set; }
|
||||
private static string RawGitHubUrl;
|
||||
private static string GitHubUrl;
|
||||
|
||||
static readonly public string LocalVersion = "2.1HF4";
|
||||
static readonly public string LocalVersion = "2.1.2H";
|
||||
public static string currentVersion = string.Empty;
|
||||
public static string changelog = string.Empty;
|
||||
|
||||
//Check if there is a new version of the sideloader
|
||||
private static bool IsUpdateAvailable()
|
||||
{
|
||||
HttpClient client = new HttpClient();
|
||||
@@ -34,8 +32,6 @@ namespace AndroidSideloader
|
||||
catch { return false; }
|
||||
return LocalVersion != currentVersion;
|
||||
}
|
||||
|
||||
//Call this to ask the user if they want to update
|
||||
public static void Update()
|
||||
{
|
||||
RawGitHubUrl = $"https://raw.githubusercontent.com/nerdunit/androidsideloader";
|
||||
@@ -44,14 +40,11 @@ namespace AndroidSideloader
|
||||
doUpdate();
|
||||
}
|
||||
|
||||
//If the user wants to update
|
||||
private static void doUpdate()
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"There is a new update you have version {LocalVersion}, do you want to update?\nCHANGELOG\n{changelog}", $"Version {currentVersion} is available", MessageBoxButtons.YesNo);
|
||||
if (dialogResult != DialogResult.Yes)
|
||||
return;
|
||||
|
||||
//Download new sideloader with version appended to file name so there is no chance of overwriting the current exe
|
||||
try
|
||||
{
|
||||
var fileClient = new WebClient();
|
||||
@@ -63,7 +56,6 @@ namespace AndroidSideloader
|
||||
|
||||
Logger.Log($"Starting {AppName} v{currentVersion}.exe");
|
||||
Process.Start($"{AppName} v{currentVersion}.exe");
|
||||
//Delete current version
|
||||
AndroidSideloader.Utilities.GeneralUtilities.Melt();
|
||||
}
|
||||
catch { }
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
@@ -8,10 +9,16 @@ namespace AndroidSideloader
|
||||
|
||||
public static bool Log(string text, bool ret = true)
|
||||
{
|
||||
string newline = "\n";
|
||||
if (text.Length > 40 && text.Contains("\n"))
|
||||
newline += "\n\n";
|
||||
try { File.AppendAllText(logfile, text + newline); } catch { }
|
||||
string time = DateTime.Now.ToString("hh:mmtt(UTC): ");
|
||||
if (text.Length > 5)
|
||||
{
|
||||
|
||||
string newline = "\n";
|
||||
if (text.Length > 40 && text.Contains("\n"))
|
||||
newline += "\n\n";
|
||||
try { File.AppendAllText(logfile, time + text + newline); } catch { }
|
||||
return ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
106
changelog.txt
106
changelog.txt
@@ -1,8 +1,114 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.1.2
|
||||
|
||||
+ Added quick search (ctrl+f or click magnifying glass), Automatically selects whatever game it finds, user can press ENTER to start DL+Install
|
||||
= Fixed massive issues caused by accidental branch merge.
|
||||
= UI Improvements
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDpZykACgkQx/Rql1Vo
|
||||
czckmxAAl1my1ZUALewOuh1JQbDQhdSDrtRDo9Bx2z9u6FXfp4BKC3w7O8p6B+cT
|
||||
wcWruppIiC2MkN11Ls8i7OjE3f6xYnRo8E8FDH5UMcful/SFJ3XjD9CMf+2e1Mxu
|
||||
VYVGXWRltYdklGy4IOWfvRXbaYUYYlznVUz1lDxsp8w4h4Csz5IiLKWlivsFoPSl
|
||||
tQgcDC1FPKxH0HwSxxBLsygqNFi5GXawF85SyRMB3EpWySWrkYKjMfxub965f2by
|
||||
zP3mn5HigPgS26tOq1u9zVC7TktwJotoPxjgarsBm0IMXggMFZZ2xuCanMXoZ1xK
|
||||
gEw/Ni6tlM8N/CkpZJuQnPajIOHa7TYWOP8cQM38VPmS3cT0ifmqqGpTKMUYEJ8W
|
||||
Hx/QhABpUnhNeIUIAHj0q9BX0zOdebne831SWO8aMUE1+xw0n6ljuVwam/AyiOtJ
|
||||
1uCL+axDpWN8TncOqvoPIrFFSS4Ya8Ml5DQzs7/qI7EXM4lK3/m34Vhekh/ctnY7
|
||||
HAa+io1phPyBb89zgdjfODFVyoadS5pokBs0VUIV78NlZjMx8Dsfh95tVuAhZHYr
|
||||
1smOeqAVZhDsUR5R2hNRH7z1LfY7YKKF+XAFT+XeecG/qK0CuRnrYdrBh8zHmkhV
|
||||
U2ZH6JayNiZ9Eq2QgTYY8M9bo9J+CK2hCTFoXozk8a+eHD1aqk4=
|
||||
=Pdkb
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.1.1
|
||||
|
||||
+ Added optional Wake on Wifi setting so Wireless ADB will still connect as long as device is not powered off or dead.
|
||||
+ RSL will now automatically choose any Oculus device over devices made by other manufacturers if more than one ADB device is present.
|
||||
= Fixed Download+Install QUSettings application if QUSettings are set.
|
||||
= Fixed Pull APK from device.
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDjcnQACgkQx/Rql1Vo
|
||||
czchqg//WStjc1ANHJK1P06ormJ4ArZFA70UkL0Xd7QUcwJhEiR2/uIIHpOCeCdZ
|
||||
ymf6fvsqcyMkAMMq2YA1sNd5fPTFgcaqWZhkir+TywPBfrpcMJYP2lcJGXuhcmjm
|
||||
GJo4uymOjci9SBrjb7o8Z5q3cxInRPLfgksgRVN+b3Y965yqETm0OcSXBrCuDyXV
|
||||
SqgAJzAFNqElE91LRtz3BqOJ8eNXmEbmC9iSFnllwC9fSYwDefNkIRAVfmD5inqs
|
||||
acSW/6URwF4xnF578mnHfdhKlhROqt7XJ/dqIrrh1o0/kV7VbOR4J7rq8vD1nHrZ
|
||||
uOAZ+zBKnk37Px61F4XWtUmX0MDHoTuJChAZqKzdZkIUy9Dq/l5asMFufGaGLrHa
|
||||
OGjuXNQOTGzSKzp6SNsrU+BkBAJDW4NBWrgacC9PqgE+uZSgedreDZb86UWtZ6ZA
|
||||
MR7MFiqaKBGx0GMfbO/JWu/REa9GkdCghwbSKrnPCIK2wsY7zECFflmIaf/BQWzw
|
||||
p6hicDZc5053Cu+ZHPy8AiKbv+3FB5AWiujYbl/QkBifoEL03tHepCREAHMD6MBn
|
||||
OqgnRU2gwtqke2FSnThyx1qgnnXLLi2M4we171DreBziF9DE23W/hcE+RU3WtucR
|
||||
QflQ1p4c5o1q8B2QDkDSjcsCfCXRnfQ52YRv0N7cdKZ9M56GAF0=
|
||||
=KqGL
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
Update RSL2.1HF5
|
||||
|
||||
Fixed ADB path for usernames containing spaces. ADB now located at c:\RSL\VersionNumber\ADB
|
||||
|
||||
- -HarryEffingPotter-
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDdNvsACgkQx/Rql1Vo
|
||||
czdIWQ/+OvvchZOuwMZJvd6d/N4WmBUPKm3TzyiF5JM/STLEbLIHB1p6LQg+6J3K
|
||||
3d9x3mQmu/gMHMumsfmuOuHHI7OOs9CLOVY2UFm7CqTnDf7iCxl8+6/iQw48yfj9
|
||||
63qwUKZdLueRX9IqtcV2MwZJP7eKdZmtv6ALyRbjWmo2fgbm/Fs1U+TfGnlY7qLg
|
||||
wIascv5DuKRyHvRzlgdn6OqmewWTxHDOTwCTjodROIK9guCELNYhEWv/TtgMldv9
|
||||
gz1Lr8KZOcxNltpvstJgdbeFy61LK67su0rKZHsGMu4x0hDe4YOyjyMDtXrVJ0VH
|
||||
SJBqDgSKD3HE/MNYkCWusqs7np2XKXC8hP6nm2QO9zM44d+UWDfrJbwvvw6QUoez
|
||||
Iqk/PskC3sF7kWAv4O+LRmLDlrHD2RG5TkkE4ohiIi4D4VaNEx4QyVf6INN+A9xd
|
||||
IxcvXC9QkFwffUD93cThEdLNRnrnzZSsUFMRh3XrvPbq2wfvWjqZX1EGfD7ug0Mf
|
||||
r9uPX4RdILvsXeybefiiwLiw3UNMJtUlaKDvqIit5S78BIP6DY+dGnMMRIQJa1vd
|
||||
XBPnIHyifzvl1nyYd6TWCFRuOzZLYirv4Ug6xS1/KzyURXIz2P0EEhDURJAR/q+M
|
||||
ZmqSO2eQo64B7Dfa9oRLKkZRfhWFgtYA9QKm9ei7tOPbnJ+2718=
|
||||
=o5Nr
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.1HF4
|
||||
|
||||
= Moved ADB files to AppData\Roaming\RSL to fix compatibility issues across the board.
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDa9rQACgkQx/Rql1Vo
|
||||
czeiYQ//X6e3DD51Kgta/omu0fVtPM4lxt+P/H5ij1xbNPmoaL7w+QvNeFqVLPs0
|
||||
T8btbEkDT7pisOHQtHFKENs4G0Sck0RkI0jVNu1lYIT67tmTYyFGP4jOxopktmNE
|
||||
uydmI8g+8UkuTPYIKpkYJUOrWT1u4IV0SoBsdERYU7qRZmvCqWgwqdcs4R6wAdm0
|
||||
FNqWRbUo/LhFw1rQicny4vL7w6rf7PvAksWifqbl1KfBFAchf4cZ3+YKeyO4V2Ym
|
||||
7LcNgVGaSuPCr5dKmVr31B0kU0XrV8KPpKwgoIOym8eH8PNuaj3elwbndqYZ95fB
|
||||
xNFluF9z9qejiIkYM9UDSoeNEfeJaUwIfgb1WI4w+BdlTWaYZfsG+DF+VOBvSU/h
|
||||
YP1ucGrqCu2lLxcIS5ffNd7dTjS22D2x2rErqXGl+ETgqgVHK9NU9Bd02VVyP171
|
||||
Ryq/JRd9tvFknAG6YViVADJDzKdnuwFYeo/T5wgt8P7GtzVZWmZbur6crXK454IH
|
||||
TkyLn9XFbJneGPxjLNm4VwCR0XWFmhAsE+CfRz52hL18RAxyeohWq7RBTt+d49t9
|
||||
eOhTTzOHoWgroOVTV793r+FLdc4nYDhLXRm6I65qhvQhEPCqZDIA1xuvzPbSectb
|
||||
VNNRuPmhxDgtevFFsU/sX8xOv8pKi6naW8N6jobXPavwegABCEg=
|
||||
=61BS
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.1HF3
|
||||
|
||||
= Fixed QUSettings not working issue.(unused fields in QUSettings MUST have 0's in them or it will not work, reset/clear all fields button now reflect this.)
|
||||
= Fixed Uninstall auto-save-backup
|
||||
= Fixed Install.txt automation messages.
|
||||
|
||||
Reference in New Issue
Block a user