Compare commits

...

27 Commits

Author SHA1 Message Date
Harry Fn Potter
b07e6bc12c 2.2.1 2021-07-17 15:43:10 -04:00
Harry Fn Potter
f8ee9b493a -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.2

+ Added custom naming scheme to Debug Log. Debug Log now uses 2 random nouns as its name when generated.
+ Added shortcut commands. Press F1 to see list of shortcuts.

  F1  = Shortcuts List
  F2  = Search
  F3  = Quest Options
  F4  = Rookie Settings
  F5  = Refresh Games List
  F11 = Copy Debug log to Desktop.
  F12 = Copy Crash Log to Desktop (if one exists).

  CTRL + R  = Run custom ADB command.
  CTRL + F  = Search
  CTRL + P  = Copy package name of selected game to Clipboard.
  CTRL + F4 = Restart program.

+ Added ability to upload debug logs to remote server (the server should be updated to reflect this sometime this week!)
= If Install.txt exists apk install and Obb copy will only be run from install.txt - this is to prevent double copy of obb files or double install of APKS.
= Fixed issue where if user started DL+install on one title then quickly selected a different title in the games list it would download the newly selected item instead of the originally intended item.
= Fixed issue that caused download progress bar to not work if multiple items were queued.
= Fixed other obb copying issues.
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDzKesACgkQx/Rql1Vo
czeiXQ/+OsH5CdnShheJR85/uIkVLGDf75Hkybj7k+5gV688imYwWbCRarudqa8k
aVC5g69mdKD8rD8DzWjccpFwxvOSq5MRQMWB/Nl/M2142Rnr1M4WdP6xEmMq1qmQ
X39T3tdpgxxKyDPIt4EX/iLT6qSHdB69qFtMeEoOsHmisqGDFDCHGs835VUUL9FU
PaZ218Dd07r9/W9cJKX5EI/ihWZ5lv+0defBofQu2A8GCOXzuWIudLtcG5uYIJwO
9frevYIKteuq+MmcXedgu3uWUb0CnQ+tEyShPYjTdrFdMJYgFrOzIIlogBWK5fm3
cp8YSzeHJpBnD8qQar/W92WTTzvWd7I9vk7YB/Pdn6MIzzTJX540R2fu2rwsYBCG
DciqA8+V5sDx5eRmrcUxrmxrsDMPlbpqos0R+yujCHyiLHzt1d/oEohZ/mNw24y4
3MrjGyzlJqRZZFnaMLGNooLBrT9EeGcTXk/MgJjSO1XQjCVAWmrrsEHCXqcKwi8i
IW5OMKld80wqWr79LRF6dPxjcuwRgVE8mNd6G6qedX5TXvqjHUEVymMLFFvhVQnQ
QnOHX0HzWXF/64ghD6r3OR4pQ8C5xb7Z6tEwXX7soQVo610m7nJT1zaHm2m9HSJN
AA1bdfK9SEKXl3KJT7SCEnQ/2ED6Qr/VBFXcJB/10Il/n8AdJ2o=
=DFRR
-----END PGP SIGNATURE-----v
2021-07-17 15:08:55 -04:00
harryeffinpotter
25358d3a6d Merge pull request #66 from SamHoque/bugs/fix-download-games-dialog
bugs/fix-download-games-dialog
2021-07-17 04:16:29 -04:00
Sam Hoque
8088c2cf11 bugs/fix-download-games-dialog
- Recreated branch https://github.com/nerdunit/androidsideloader/pull/61 created by @dkgitdev since the branch had some merge conflicts, that was too long to resolve.
2021-07-17 14:15:57 +06:00
Harry Fn Potter
3b684142e9 Log upload 2021-07-17 02:47:12 -04:00
harryeffinpotter
e0945a71ac Merge pull request #64 from SamHoque/master
Tidied up mirror drop down
2021-07-17 02:44:23 -04:00
harryeffinpotter
a63b8b2a5c Merge pull request #65 from SamHoque/bug/fix-crashes
bug/fix-crashes
2021-07-17 02:44:07 -04:00
Sam Hoque
69dfd9ca00 bug/fix-crashes
- Fixes two crashes that occurs when closing the application
2021-07-17 11:26:08 +06:00
Sam Hoque
ebacfc0e42 Tidied up mirror drop down
- Replaced the "VRP-mirror" text to be an empty string inside `remoteList.items`
- Changed `currentRemote` to concat ` "VRP-mirror" ` before the currently selected `remotelist` item
2021-07-17 11:05:57 +06:00
Harry Fn Potter
9a3e9617b5 F3 and F4 now open Rookie Settings and Quest Options, respectively. 2021-07-17 00:28:38 -04:00
Harry Fn Potter
20607bf3b4 Logger update. 2021-07-17 00:16:42 -04:00
Harry Fn Potter
063b0d05d5 Hotkeys update, fixed obb loading taking forever. 2021-07-17 00:15:25 -04:00
Harry Fn Potter
306e2eb19b 2.1.6
bug fix
2021-07-14 07:02:25 -04:00
Harry Fn Potter
119a95406e -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.1.5

+ Added Releasename to installing messages and download size message.
= Mulitple bugfixes.

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDums0ACgkQx/Rql1Vo
czc+PRAAmKSXHjNqO6JXpUKIQczrs3q15yZztgmOQMULNUImis3+/ykOxsMJit1A
W6ORtj3i2VH0TDBx/hhRghMPo+dNilyKnCWm928mXc3taMOEOKu+Dz8WfhnuNp0A
ENmV5fKfuChqrn/6jkUY8UG12NM0eu3A+7fH6LvRADxRxESVH81JUtcf4bSAlier
JuL/q67nv8mThFS3tRtjjvmu0nQMCUcvagfwRNFOUW0aob7NBAp6wxTsbxZo0yEq
oVOxyTAOR84IGHpWeDKDyMw+AySMnHQXl9Ty385zg4eHZr/l1uQcK61uNfiqVCK+
Pag6I1+vLs/3Z3v6qD84iUnis/RV2lqiZcenNeTHQgBKzSsxegB5t0WaID7qlnec
655QnEUbLbIxENS7HodMR1+CzWKgmmYpIH9jV+vH0+mTaKnAYmW56q/ae8OmjXqw
6NXSfog3Dv7U8Imq21Q8glxt/CXh1fY0I8JLxpMjbwEDm56fvvzdRAeE3TeXJR0y
CD9HbH/G8oH/OhLaj1UR5y9FR3PLIBhHmnl9VHtxcvv/nrHMQHbM9bAjPUpNdnSg
30yZxPw/eqv8KLhGxxc+cBnXv3p5bNf2j27gY1Q8XbgcL8PAM6NlVBN/9oaDQ5cL
r5Cc4d5r9F+Q+QrhpZlw3jshHdoVKqgc4ut6xBAWulztNWNvLok=
=tySN
-----END PGP SIGNATURE-----
2021-07-14 04:24:54 -04:00
Harry Fn Potter
2bd4bda513 2.1.5 many bugfixes added gamename to installation messaging. 2021-07-14 04:23:44 -04:00
Harry Fn Potter
4126c82f4d updater fix 2021-07-12 06:29:13 -04:00
Harry Fn Potter
d35fed0217 2.1.4
2.1.3.2 wouldnt work with updater.
2021-07-12 06:21:07 -04:00
Harry Fn Potter
111d3a7176 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.1.3.2

+ Added checkbox to enable Enter to Download+Install.
= Fixed crash that occurred when user held down up arrow or down arrow on gamelist.
= Fixed all issues with Install.txt path.
= Clicking out of search box now closes it.
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDsFZ8ACgkQx/Rql1Vo
czcwJg/+PFiXfh6PPZNIRf2Zeht7WN8oxuUFV907KnD5+gKD0rzNd1NzgrcPOgAh
/oJakvY6ryLyaopJFZ8bm7++tQ3w6mbnzPaGweNoOF7/oLDb9NKVlK5/VjA3JPPN
QtOebRgBsigoRGGTq0s7ZRZV99vtSm2R1+1z9qlEu5Fm2hEiIggLvSBdGWDhbGnZ
jnvAZixeYgR+R6x4MZTsDao+qIYMio7heiVdN03gQ4hAaPbZ/I6s3cS+K33k02Nz
IEATqkwoLOevmN/D773A0cMzh/ZQWs557E3aKtwB+EHo/0ucCk0WaMSt4WdH8Qqe
WWF6+UT8FEEN2M76SQrg80xBj3QxzfIi92c231rVvtHMiVn5qUhTrDYb2wqx7J99
cJeMgANBmWSBZRBNW7jwhAxUVXE9vE8eqBza9MarXbJaLtq3Mf0ECLWvFPllA8dU
lnBcdSuTESvZkBAokkCwEJOb7sootBpEz5BZtE268mZEfsHUGWo3/VZDrJ7lLXJW
mEE2aCcHpNWysa9CsSee/QWNgLH2v+9PM3r/1SJyQ23C2hwyQI+F2lkch8Ar5Qfn
YxMWnhAcYXTRtcxY0s7xuhpUr/TGc6m9QY6NeVYMvb3g1gbmGOyyN/MELNOkEF/l
FXnrY4AfaNTs6EL6/id/viGcHc1MnnjgzlTNg5rgoxtFrHdVwP4=
=o0TQ
-----END PGP SIGNATURE-----
2021-07-12 06:17:21 -04:00
Harry Fn Potter
5e235c5125 Search will now select games at bottom of list too.
Added hidden shortcut CTRL+P which will turn on a property that copies the packagename of selected games to the clipboard.
2021-07-10 13:06:33 -04:00
Harry Fn Potter
9ccf7811e5 2.1.1H wouldnt work so, 2.1.3 2021-07-10 06:28:09 -04:00
harryeffinpotter
93d606bcac remove newline 2021-07-10 06:24:30 -04:00
Harry Fn Potter
8d0eb4a84d version code HF 2021-07-10 06:18:35 -04:00
Harry Fn Potter
6f20154599 Hotfix - adb kill server was running BEFORE adb was copied to correct directory. It's not an RSL update without one program breaking bug! 2021-07-10 06:18:19 -04:00
Harry Fn Potter
bbe84000b7 Fixed crash when clicking DragDrop label during load. 2021-07-10 05:34:29 -04:00
Harry Fn Potter
30ead79ed1 version # 2021-07-10 05:25:30 -04:00
Harry Fn Potter
97b6da3abe 2.1.2 ALL issues fixed. 2021-07-10 05:18:13 -04:00
Harry Fn Potter
6c2a7413b4 Fixed all merge/branch destruction. 2021-07-10 01:17:25 -04:00
24 changed files with 1895 additions and 881 deletions

175
ADB.cs
View File

@@ -12,11 +12,7 @@ namespace AndroidSideloader
class ADB
{
static Process adb = new Process();
<<<<<<< HEAD
public static string adbFolderPath = "C:\\RSL\\2.1.1\\ADB";
=======
public static string adbFolderPath = "C:\\RSL\\2.1HF5\\ADB";
>>>>>>> + Added optional Wake on Wifi setting so Wireless ADB will still connect as long as device is not powered off or dead.
public static string adbFilePath = adbFolderPath + "\\adb.exe";
public static string DeviceID = "";
public static string package = "";
@@ -25,10 +21,15 @@ namespace AndroidSideloader
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}");
}
if (!command.Contains("dumpsys") && !command.Contains("shell pm list packages") && !command.Contains("KEYCODE_WAKEUP"))
{
string loggedcommand = Utilities.StringUtilities.RemoveEverythingBeforeFirst(command, "adb.exe");
Logger.Log($"Running command{loggedcommand}");
}
adb.StartInfo.FileName = adbFilePath;
adb.StartInfo.Arguments = command;
adb.StartInfo.RedirectStandardError = true;
@@ -70,11 +71,12 @@ namespace AndroidSideloader
{
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.");
}
if (!output.Contains("version") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("Filesystem") && !output.Contains("package:") && !output.Equals(null))
Logger.Log(output);
Logger.Log(error);
return new ProcessOutput(output, error);
}
public static ProcessOutput RunAdbCommandToStringWOADB(string result, string file)
public static ProcessOutput RunAdbCommandToStringWOADB(string result, string path)
{
string command = result;
Properties.Settings.Default.ADBFolder = adbFolderPath;
@@ -91,7 +93,7 @@ namespace AndroidSideloader
adb.StartInfo.RedirectStandardOutput = true;
adb.StartInfo.CreateNoWindow = true;
adb.StartInfo.UseShellExecute = false;
adb.StartInfo.WorkingDirectory = Path.GetDirectoryName(file);
adb.StartInfo.WorkingDirectory = Path.GetDirectoryName(path);
adb.Start();
adb.StandardInput.WriteLine(command);
adb.StandardInput.Flush();
@@ -126,12 +128,7 @@ namespace AndroidSideloader
Logger.Log(error);
return new ProcessOutput(output, error);
}
<<<<<<< HEAD
public static ProcessOutput RunCommandToString(string result, string file = "")
=======
public static ProcessOutput RunCommandToString(string result, string path = "")
>>>>>>> + Added optional Wake on Wifi setting so Wireless ADB will still connect as long as device is not powered off or dead.
public static ProcessOutput RunCommandToString(string result, string path)
{
string command = result;
Properties.Settings.Default.ADBFolder = adbFolderPath;
@@ -146,7 +143,7 @@ namespace AndroidSideloader
adb.StartInfo.RedirectStandardOutput = true;
adb.StartInfo.CreateNoWindow = true;
adb.StartInfo.UseShellExecute = false;
adb.StartInfo.WorkingDirectory = Path.GetDirectoryName(file);
adb.StartInfo.WorkingDirectory = Path.GetDirectoryName(path);
adb.Start();
adb.StandardInput.WriteLine(command);
adb.StandardInput.Flush();
@@ -237,146 +234,51 @@ namespace AndroidSideloader
return $"Total space: {String.Format("{0:0.00}", (double)totalSize / 1000)}GB\nUsed space: {String.Format("{0:0.00}", (double)usedSize / 1000)}GB\nFree space: {String.Format("{0:0.00}", (double)freeSize / 1000)}GB";
}
private static bool dialogisup = false;
public static void WakeDevice()
{
<<<<<<< HEAD
string output = RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP").Error;
RunAdbCommandToString("Devices");
if (output.Contains("found"))
{
if (Properties.Settings.Default.IPAddress.Contains("connect"))
{
ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress);
string response = ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress).Error;
if (response.Contains("cannot"))
if (!dialogisup)
{
{
dialogisup = true;
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)
{
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();
dialogisup = false;
if (dialogResult2 == DialogResult.OK)
{
Properties.Settings.Default.IPAddress = "";
Properties.Settings.Default.Save();
ADB.WakeDevice();
dialogisup = false;
}
}
else if (dialogResult == DialogResult.Yes)
{
dialogisup = false;
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);
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)
{
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_available 1");
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_enabled 1");
}
if (dialogResult == DialogResult.No)
{
return;
}
}
else if (dialogResult == DialogResult.No)
{
dialogisup = false;
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;
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");
}
}
}
}
}
=======
RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP");
string devicesout = RunAdbCommandToString("devices").Output;
string devicesout = RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP").Output;
if (!devicesout.Contains("found"))
{
if (Properties.Settings.Default.IPAddress.Contains("connect"))
{
RunAdbCommandToString(Properties.Settings.Default.IPAddress);
string response = ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress).Output;
string response = RunAdbCommandToString(Properties.Settings.Default.IPAddress).Output;
if (response.Contains("cannot"))
if (response.Contains("cannot") || String.IsNullOrEmpty(response))
{
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)
{
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();
WakeDevice();
if (dialogResult2 == DialogResult.OK)
{
Properties.Settings.Default.IPAddress = "";
Properties.Settings.Default.Save();
ADB.WakeDevice();
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");
RunAdbCommandToString("devices");
Thread.Sleep(250);
ADB.RunAdbCommandToString("disconnect");
RunAdbCommandToString("disconnect");
Thread.Sleep(50);
ADB.RunAdbCommandToString("connect");
RunAdbCommandToString("connect");
Thread.Sleep(50);
ADB.RunAdbCommandToString("tcpip 5555");
RunAdbCommandToString("tcpip 5555");
Thread.Sleep(500);
ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress);
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)
{
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_available 1");
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_enabled 1");
RunAdbCommandToString("shell settings put global wifi_wakeup_available 1");
RunAdbCommandToString("shell settings put global wifi_wakeup_enabled 1");
}
if (dialogResult == DialogResult.No)
{
@@ -388,11 +290,11 @@ namespace AndroidSideloader
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");
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 = ADB.RunAdbCommandToString("shell ip route").Output;
string input = RunAdbCommandToString("shell ip route").Output;
Properties.Settings.Default.WirelessADB = true;
Properties.Settings.Default.Save();
@@ -420,7 +322,6 @@ namespace AndroidSideloader
}
}
>>>>>>> + Added optional Wake on Wifi setting so Wireless ADB will still connect as long as device is not powered off or dead.
}
}
@@ -432,7 +333,7 @@ namespace AndroidSideloader
WakeDevice();
ProcessOutput ret = new ProcessOutput();
Program.form.ChangeTitle($"Sideloading {path}");
Program.form.ChangeTitle($"Sideloading {Path.GetFileName(path)}");
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
string out2 = ret.Output + ret.Error;
if (out2.Contains("failed"))
@@ -478,11 +379,13 @@ namespace AndroidSideloader
}
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
}
if (File.Exists($"{Properties.Settings.Default.MainDir}\\Config.Json"))
string gamenameforQU = Sideloader.PackageNametoGameName(packagename);
if (File.Exists($"{Properties.Settings.Default.MainDir}\\Config.Json") && gamenameforQU.Contains("-QU") || path.Contains("-QU"))
{
string gameName = packagename;
packagename = Sideloader.gameNameToPackageName(gameName);
Program.form.ChangeTitle("Pushing Custom QU S3 Config.JSON.");
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"))
@@ -509,15 +412,21 @@ namespace AndroidSideloader
ret += ADB.RunAdbCommandToString($"push \"{Properties.Settings.Default.MainDir}\\config.json\" /sdcard/android/data/{packagename}/private/config.json");
}
Program.form.ChangeTitle("Sideload done");
Program.form.ChangeTitle("");
return ret;
}
public static ProcessOutput CopyOBB(string path)
{
WakeDevice();
if (SideloaderUtilities.CheckFolderIsObb(path))
return RunAdbCommandToString($"push \"{path}\" /sdcard/Android/obb");
if (Path.GetDirectoryName(path).Contains(".") && !Path.GetDirectoryName(path).Contains("_data") || path.Contains("."))
{
var ext = System.IO.Path.GetExtension(path);
if (ext == String.Empty)
return RunAdbCommandToString($"push \"{path}\" \"/sdcard/Android/obb\"");
else
return RunAdbCommandToString($"push \"{Path.GetDirectoryName(path)}\" /sdcard/Android/obb");
}
return new ProcessOutput();
}
}

View File

@@ -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">

View File

@@ -51,7 +51,7 @@
<value>White</value>
</setting>
<setting name="FontStyle" serializeAs="String">
<value>Microsoft Sans Serif, 9.5pt</value>
<value>Microsoft Sans Serif, 12pt</value>
</setting>
<setting name="BackPicturePath" serializeAs="String">
<value />
@@ -119,6 +119,30 @@
<setting name="WirelessADB" serializeAs="String">
<value>False</value>
</setting>
<setting name="CurrentGamename" serializeAs="String">
<value />
</setting>
<setting name="PackageNameToCB" serializeAs="String">
<value>False</value>
</setting>
<setting name="EnterKeyInstall" serializeAs="String">
<value>False</value>
</setting>
<setting name="DownUpHeld" serializeAs="String">
<value>False</value>
</setting>
<setting name="CurrentLogTitle" serializeAs="String">
<value />
</setting>
<setting name="CurrentLogName" serializeAs="String">
<value />
</setting>
<setting name="CurrentCrashTitle" serializeAs="String">
<value />
</setting>
<setting name="CurrentCrashName" serializeAs="String">
<value />
</setting>
</AndroidSideloader.Properties.Settings>
<AndroidADB.Sideloader.Properties.Settings>
<setting name="checkForUpdates" serializeAs="String">

601
MainForm.Designer.cs generated

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -28,8 +28,8 @@ namespace AndroidSideloader
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
string date_time = DateTime.Today.ToString("dddd, MMMM dd @ hh:mmtt");
File.WriteAllText(Sideloader.CrashLogPath, $"\n\n################\nDate/Time of crash: {date_time}################\n\nMessage: {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}");
}
}
}

View File

@@ -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));
}
}
}
}

View File

@@ -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>

View File

@@ -181,7 +181,7 @@ namespace AndroidSideloader.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Microsoft Sans Serif, 9.5pt")]
[global::System.Configuration.DefaultSettingValueAttribute("Microsoft Sans Serif, 12pt")]
public global::System.Drawing.Font FontStyle {
get {
return ((global::System.Drawing.Font)(this["FontStyle"]));
@@ -454,5 +454,101 @@ namespace AndroidSideloader.Properties {
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;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool PackageNameToCB {
get {
return ((bool)(this["PackageNameToCB"]));
}
set {
this["PackageNameToCB"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool EnterKeyInstall {
get {
return ((bool)(this["EnterKeyInstall"]));
}
set {
this["EnterKeyInstall"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool DownUpHeld {
get {
return ((bool)(this["DownUpHeld"]));
}
set {
this["DownUpHeld"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrentLogTitle {
get {
return ((string)(this["CurrentLogTitle"]));
}
set {
this["CurrentLogTitle"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrentLogName {
get {
return ((string)(this["CurrentLogName"]));
}
set {
this["CurrentLogName"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrentCrashTitle {
get {
return ((string)(this["CurrentCrashTitle"]));
}
set {
this["CurrentCrashTitle"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrentCrashName {
get {
return ((string)(this["CurrentCrashName"]));
}
set {
this["CurrentCrashName"] = value;
}
}
}
}

View File

@@ -42,7 +42,7 @@
<Value Profile="(Default)">White</Value>
</Setting>
<Setting Name="FontStyle" Type="System.Drawing.Font" Scope="User">
<Value Profile="(Default)">Microsoft Sans Serif, 9.5pt</Value>
<Value Profile="(Default)">Microsoft Sans Serif, 12pt</Value>
</Setting>
<Setting Name="BackPicturePath" Type="System.String" Scope="User">
<Value Profile="(Default)" />
@@ -110,5 +110,29 @@
<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>
<Setting Name="PackageNameToCB" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="EnterKeyInstall" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="DownUpHeld" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="CurrentLogTitle" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="CurrentLogName" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="CurrentCrashTitle" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="CurrentCrashName" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>

34
QuestForm.Designer.cs generated
View File

@@ -332,7 +332,7 @@ namespace AndroidSideloader
"4"});
this.CPUComboBox.Location = new System.Drawing.Point(13, 126);
this.CPUComboBox.Name = "CPUComboBox";
this.CPUComboBox.Size = new System.Drawing.Size(345, 24);
this.CPUComboBox.Size = new System.Drawing.Size(345, 28);
this.CPUComboBox.TabIndex = 2;
this.CPUComboBox.Text = "Select CPU level (0 for default)";
//
@@ -354,7 +354,7 @@ namespace AndroidSideloader
"4"});
this.GPUComboBox.Location = new System.Drawing.Point(13, 97);
this.GPUComboBox.Name = "GPUComboBox";
this.GPUComboBox.Size = new System.Drawing.Size(345, 24);
this.GPUComboBox.Size = new System.Drawing.Size(345, 28);
this.GPUComboBox.TabIndex = 1;
this.GPUComboBox.Text = "Select GPU level (0 for default)";
//
@@ -368,11 +368,10 @@ namespace AndroidSideloader
this.label7.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label7.Location = new System.Drawing.Point(13, 532);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(49, 16);
this.label7.Size = new System.Drawing.Size(66, 20);
this.label7.TabIndex = 3;
this.label7.Text = "Fov - X";
this.label7.Visible = false;
this.label7.Click += new System.EventHandler(this.label7_Click);
//
// label8
//
@@ -384,11 +383,10 @@ namespace AndroidSideloader
this.label8.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label8.Location = new System.Drawing.Point(191, 532);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(50, 16);
this.label8.Size = new System.Drawing.Size(66, 20);
this.label8.TabIndex = 3;
this.label8.Text = "Fov - Y";
this.label8.Visible = false;
this.label8.Click += new System.EventHandler(this.label8_Click);
//
// label9
//
@@ -400,7 +398,7 @@ namespace AndroidSideloader
this.label9.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label9.Location = new System.Drawing.Point(11, 583);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(87, 16);
this.label9.Size = new System.Drawing.Size(117, 20);
this.label9.TabIndex = 3;
this.label9.Text = "Refresh Rate";
this.label9.Visible = false;
@@ -415,11 +413,10 @@ namespace AndroidSideloader
this.label6.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label6.Location = new System.Drawing.Point(13, 484);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(153, 16);
this.label6.Size = new System.Drawing.Size(206, 20);
this.label6.TabIndex = 3;
this.label6.Text = "Enter Custom Username";
this.label6.Visible = false;
this.label6.Click += new System.EventHandler(this.label6_Click);
//
// label5
//
@@ -431,11 +428,10 @@ namespace AndroidSideloader
this.label5.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label5.Location = new System.Drawing.Point(12, 434);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(301, 16);
this.label5.Size = new System.Drawing.Size(410, 20);
this.label5.TabIndex = 3;
this.label5.Text = "Custom Resolution Width (Height auto calculated)";
this.label5.Visible = false;
this.label5.Click += new System.EventHandler(this.label5_Click);
//
// ResolutionLabel
//
@@ -447,7 +443,7 @@ namespace AndroidSideloader
this.ResolutionLabel.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.ResolutionLabel.Location = new System.Drawing.Point(11, 183);
this.ResolutionLabel.Name = "ResolutionLabel";
this.ResolutionLabel.Size = new System.Drawing.Size(177, 16);
this.ResolutionLabel.Size = new System.Drawing.Size(241, 20);
this.ResolutionLabel.TabIndex = 3;
this.ResolutionLabel.Text = "Resolution (p eye, 0=default)";
//
@@ -461,7 +457,7 @@ namespace AndroidSideloader
this.FOVy.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.FOVy.Location = new System.Drawing.Point(191, 507);
this.FOVy.Name = "FOVy";
this.FOVy.Size = new System.Drawing.Size(167, 22);
this.FOVy.Size = new System.Drawing.Size(167, 26);
this.FOVy.TabIndex = 12;
this.FOVy.Text = "0";
this.FOVy.Visible = false;
@@ -477,7 +473,7 @@ namespace AndroidSideloader
this.FOVx.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.FOVx.Location = new System.Drawing.Point(13, 507);
this.FOVx.Name = "FOVx";
this.FOVx.Size = new System.Drawing.Size(169, 22);
this.FOVx.Size = new System.Drawing.Size(169, 26);
this.FOVx.TabIndex = 11;
this.FOVx.Text = "0";
this.FOVx.Visible = false;
@@ -493,7 +489,7 @@ namespace AndroidSideloader
this.UsrBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.UsrBox.Location = new System.Drawing.Point(13, 459);
this.UsrBox.Name = "UsrBox";
this.UsrBox.Size = new System.Drawing.Size(345, 22);
this.UsrBox.Size = new System.Drawing.Size(345, 26);
this.UsrBox.TabIndex = 10;
this.UsrBox.Text = "0";
this.UsrBox.Visible = false;
@@ -509,7 +505,7 @@ namespace AndroidSideloader
this.ResBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.ResBox.Location = new System.Drawing.Point(13, 409);
this.ResBox.Name = "ResBox";
this.ResBox.Size = new System.Drawing.Size(345, 22);
this.ResBox.Size = new System.Drawing.Size(345, 26);
this.ResBox.TabIndex = 9;
this.ResBox.Text = "0";
this.ResBox.Visible = false;
@@ -525,7 +521,7 @@ namespace AndroidSideloader
this.TextureResTextBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.TextureResTextBox.Location = new System.Drawing.Point(13, 155);
this.TextureResTextBox.Name = "TextureResTextBox";
this.TextureResTextBox.Size = new System.Drawing.Size(169, 22);
this.TextureResTextBox.Size = new System.Drawing.Size(169, 26);
this.TextureResTextBox.TabIndex = 3;
this.TextureResTextBox.Text = "0";
//
@@ -581,7 +577,7 @@ namespace AndroidSideloader
"120"});
this.QURfrRt.Location = new System.Drawing.Point(12, 555);
this.QURfrRt.Name = "QURfrRt";
this.QURfrRt.Size = new System.Drawing.Size(170, 24);
this.QURfrRt.Size = new System.Drawing.Size(170, 28);
this.QURfrRt.TabIndex = 13;
this.QURfrRt.Text = "0";
this.QURfrRt.Visible = false;
@@ -603,7 +599,7 @@ namespace AndroidSideloader
"120"});
this.RefreshRateComboBox.Location = new System.Drawing.Point(13, 68);
this.RefreshRateComboBox.Name = "RefreshRateComboBox";
this.RefreshRateComboBox.Size = new System.Drawing.Size(345, 24);
this.RefreshRateComboBox.Size = new System.Drawing.Size(345, 28);
this.RefreshRateComboBox.TabIndex = 0;
this.RefreshRateComboBox.Text = "Select refresh rate";
//

View File

@@ -306,24 +306,23 @@ namespace AndroidSideloader
Form.Show();
}
private void label5_Click(object sender, EventArgs e)
{
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
private void label6_Click(object sender, EventArgs e)
{
}
private void label8_Click(object sender, EventArgs e)
{
}
private void label7_Click(object sender, EventArgs e)
{
}
}
}

View File

@@ -103,7 +103,7 @@ namespace AndroidSideloader
prcoutput.Output = output;
prcoutput.Error = error;
}
if (!output.Contains("Game Name;Release APK Path;"))
if (!output.Contains("Game Name;Release Name;") && !output.Contains("package:"))
Logger.Log($"Rclone error: {error}\nRclone Output: {output}");
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");

BIN
Resources/SearchGlass.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
Resources/greenkey.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
Resources/orangekey.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -38,6 +38,10 @@
this.BandwithTextbox = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.BandwithComboBox = new System.Windows.Forms.ComboBox();
this.DebugLogCopy = new System.Windows.Forms.Button();
this.CrashLogCopy = new System.Windows.Forms.Button();
this.debuglogID = new System.Windows.Forms.Label();
this.crashlogID = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// checkForUpdatesCheckBox
@@ -47,7 +51,7 @@
this.checkForUpdatesCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.checkForUpdatesCheckBox.Location = new System.Drawing.Point(13, 13);
this.checkForUpdatesCheckBox.Name = "checkForUpdatesCheckBox";
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(135, 20);
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(175, 24);
this.checkForUpdatesCheckBox.TabIndex = 0;
this.checkForUpdatesCheckBox.Text = "Check for updates";
this.checkForUpdatesCheckBox.UseVisualStyleBackColor = true;
@@ -62,7 +66,7 @@
this.applyButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.applyButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.applyButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.applyButton.Location = new System.Drawing.Point(12, 185);
this.applyButton.Location = new System.Drawing.Point(12, 178);
this.applyButton.Name = "applyButton";
this.applyButton.Size = new System.Drawing.Size(101, 31);
this.applyButton.TabIndex = 5;
@@ -77,7 +81,7 @@
this.enableMessageBoxesCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.enableMessageBoxesCheckBox.Location = new System.Drawing.Point(13, 36);
this.enableMessageBoxesCheckBox.Name = "enableMessageBoxesCheckBox";
this.enableMessageBoxesCheckBox.Size = new System.Drawing.Size(284, 20);
this.enableMessageBoxesCheckBox.Size = new System.Drawing.Size(367, 24);
this.enableMessageBoxesCheckBox.TabIndex = 1;
this.enableMessageBoxesCheckBox.Text = "Enable Message Boxes on task completed";
this.enableMessageBoxesCheckBox.UseVisualStyleBackColor = true;
@@ -92,7 +96,7 @@
this.resetSettingsButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.resetSettingsButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.resetSettingsButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.resetSettingsButton.Location = new System.Drawing.Point(119, 185);
this.resetSettingsButton.Location = new System.Drawing.Point(119, 178);
this.resetSettingsButton.Name = "resetSettingsButton";
this.resetSettingsButton.Size = new System.Drawing.Size(101, 31);
this.resetSettingsButton.TabIndex = 4;
@@ -107,7 +111,7 @@
this.deleteAfterInstallCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.deleteAfterInstallCheckBox.Location = new System.Drawing.Point(13, 59);
this.deleteAfterInstallCheckBox.Name = "deleteAfterInstallCheckBox";
this.deleteAfterInstallCheckBox.Size = new System.Drawing.Size(266, 20);
this.deleteAfterInstallCheckBox.Size = new System.Drawing.Size(350, 24);
this.deleteAfterInstallCheckBox.TabIndex = 3;
this.deleteAfterInstallCheckBox.Text = "Delete games after download and install";
this.deleteAfterInstallCheckBox.UseVisualStyleBackColor = true;
@@ -120,7 +124,7 @@
this.updateConfigCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.updateConfigCheckBox.Location = new System.Drawing.Point(13, 83);
this.updateConfigCheckBox.Name = "updateConfigCheckBox";
this.updateConfigCheckBox.Size = new System.Drawing.Size(193, 20);
this.updateConfigCheckBox.Size = new System.Drawing.Size(251, 24);
this.updateConfigCheckBox.TabIndex = 6;
this.updateConfigCheckBox.Text = "Update config automatically";
this.updateConfigCheckBox.UseVisualStyleBackColor = true;
@@ -133,7 +137,7 @@
this.userJsonOnGameInstall.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.userJsonOnGameInstall.Location = new System.Drawing.Point(13, 106);
this.userJsonOnGameInstall.Name = "userJsonOnGameInstall";
this.userJsonOnGameInstall.Size = new System.Drawing.Size(218, 20);
this.userJsonOnGameInstall.Size = new System.Drawing.Size(288, 24);
this.userJsonOnGameInstall.TabIndex = 9;
this.userJsonOnGameInstall.Text = "Push random user.json on install";
this.userJsonOnGameInstall.UseVisualStyleBackColor = true;
@@ -147,9 +151,9 @@
this.BandwithTextbox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.BandwithTextbox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.BandwithTextbox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.BandwithTextbox.Location = new System.Drawing.Point(12, 155);
this.BandwithTextbox.Location = new System.Drawing.Point(12, 148);
this.BandwithTextbox.Name = "BandwithTextbox";
this.BandwithTextbox.Size = new System.Drawing.Size(177, 21);
this.BandwithTextbox.Size = new System.Drawing.Size(177, 26);
this.BandwithTextbox.TabIndex = 11;
//
// label1
@@ -157,9 +161,9 @@
this.label1.AutoSize = true;
this.label1.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label1.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.label1.Location = new System.Drawing.Point(10, 134);
this.label1.Location = new System.Drawing.Point(10, 127);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(224, 16);
this.label1.Size = new System.Drawing.Size(298, 20);
this.label1.TabIndex = 12;
this.label1.Text = "Download speed limiter, 0 to disable";
//
@@ -178,17 +182,72 @@
"K",
"M",
"G"});
this.BandwithComboBox.Location = new System.Drawing.Point(195, 153);
this.BandwithComboBox.Location = new System.Drawing.Point(195, 146);
this.BandwithComboBox.Name = "BandwithComboBox";
this.BandwithComboBox.Size = new System.Drawing.Size(55, 23);
this.BandwithComboBox.Size = new System.Drawing.Size(55, 28);
this.BandwithComboBox.TabIndex = 13;
//
// DebugLogCopy
//
this.DebugLogCopy.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.DebugLogCopy.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.DebugLogCopy.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.DebugLogCopy.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.DebugLogCopy.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.DebugLogCopy.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.DebugLogCopy.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.DebugLogCopy.Location = new System.Drawing.Point(12, 223);
this.DebugLogCopy.Name = "DebugLogCopy";
this.DebugLogCopy.Size = new System.Drawing.Size(285, 31);
this.DebugLogCopy.TabIndex = 5;
this.DebugLogCopy.Text = "Send DebugLog to server.";
this.DebugLogCopy.UseVisualStyleBackColor = false;
this.DebugLogCopy.Click += new System.EventHandler(this.DebugLogCopy_click);
//
// CrashLogCopy
//
this.CrashLogCopy.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.CrashLogCopy.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.CrashLogCopy.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.CrashLogCopy.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.CrashLogCopy.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.CrashLogCopy.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.CrashLogCopy.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.CrashLogCopy.Location = new System.Drawing.Point(12, 296);
this.CrashLogCopy.Name = "CrashLogCopy";
this.CrashLogCopy.Size = new System.Drawing.Size(285, 31);
this.CrashLogCopy.TabIndex = 5;
this.CrashLogCopy.Text = "Copy CrashLog to Desktop";
this.CrashLogCopy.UseVisualStyleBackColor = false;
this.CrashLogCopy.Click += new System.EventHandler(this.CrashLogCopy_click);
//
// debuglogID
//
this.debuglogID.AutoSize = true;
this.debuglogID.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
this.debuglogID.Location = new System.Drawing.Point(15, 260);
this.debuglogID.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.debuglogID.Name = "debuglogID";
this.debuglogID.Size = new System.Drawing.Size(0, 18);
this.debuglogID.TabIndex = 14;
//
// crashlogID
//
this.crashlogID.AutoSize = true;
this.crashlogID.Location = new System.Drawing.Point(13, 333);
this.crashlogID.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.crashlogID.Name = "crashlogID";
this.crashlogID.Size = new System.Drawing.Size(0, 13);
this.crashlogID.TabIndex = 15;
//
// SettingsForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.ClientSize = new System.Drawing.Size(315, 237);
this.ClientSize = new System.Drawing.Size(313, 372);
this.Controls.Add(this.crashlogID);
this.Controls.Add(this.debuglogID);
this.Controls.Add(this.BandwithComboBox);
this.Controls.Add(this.label1);
this.Controls.Add(this.BandwithTextbox);
@@ -196,17 +255,20 @@
this.Controls.Add(this.updateConfigCheckBox);
this.Controls.Add(this.deleteAfterInstallCheckBox);
this.Controls.Add(this.enableMessageBoxesCheckBox);
this.Controls.Add(this.CrashLogCopy);
this.Controls.Add(this.DebugLogCopy);
this.Controls.Add(this.applyButton);
this.Controls.Add(this.checkForUpdatesCheckBox);
this.Controls.Add(this.resetSettingsButton);
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.ForeColor = System.Drawing.Color.White;
this.MaximumSize = new System.Drawing.Size(331, 276);
this.MinimumSize = new System.Drawing.Size(331, 276);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "SettingsForm";
this.ShowIcon = false;
this.Text = "Settings";
this.Load += new System.EventHandler(this.SettingsForm_Load);
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SettingsForm_KeyPress);
this.Leave += new System.EventHandler(this.SettingsForm_Leave);
this.ResumeLayout(false);
this.PerformLayout();
@@ -224,5 +286,9 @@
private System.Windows.Forms.TextBox BandwithTextbox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox BandwithComboBox;
private System.Windows.Forms.Button DebugLogCopy;
private System.Windows.Forms.Button CrashLogCopy;
private System.Windows.Forms.Label crashlogID;
public System.Windows.Forms.Label debuglogID;
}
}

View File

@@ -1,5 +1,6 @@
using JR.Utils.GUI.Forms;
using System;
using System.IO;
using System.Windows.Forms;
namespace AndroidSideloader
@@ -14,9 +15,21 @@ namespace AndroidSideloader
private void SettingsForm_Load(object sender, EventArgs e)
{
this.CenterToParent();
if (!Properties.Settings.Default.CurrentLogName.Equals(null))
{
if (!Properties.Settings.Default.CurrentLogTitle.Equals(null))
{
Properties.Settings.Default.CurrentLogName = Properties.Settings.Default.CurrentLogTitle.Replace($"{Environment.CurrentDirectory}\\", "");
Properties.Settings.Default.Save();
Properties.Settings.Default.CurrentLogName = Properties.Settings.Default.CurrentLogName.Replace($".txt", "");
Properties.Settings.Default.Save();
}
}
debuglogID.Text = "DEBUGLOG ID: " + Properties.Settings.Default.CurrentLogName;
intSettings();
intToolTips();
}
@@ -28,12 +41,12 @@ namespace AndroidSideloader
deleteAfterInstallCheckBox.Checked = Properties.Settings.Default.deleteAllAfterInstall;
updateConfigCheckBox.Checked = Properties.Settings.Default.autoUpdateConfig;
userJsonOnGameInstall.Checked = Properties.Settings.Default.userJsonOnGameInstall;
if (Properties.Settings.Default.BandwithLimit.Length>1)
if (Properties.Settings.Default.BandwithLimit.Length > 1)
{
BandwithTextbox.Text = Properties.Settings.Default.BandwithLimit.Remove(Properties.Settings.Default.BandwithLimit.Length - 1);
BandwithComboBox.Text = Properties.Settings.Default.BandwithLimit[Properties.Settings.Default.BandwithLimit.Length-1].ToString();
BandwithComboBox.Text = Properties.Settings.Default.BandwithLimit[Properties.Settings.Default.BandwithLimit.Length - 1].ToString();
}
}
void intToolTips()
@@ -46,6 +59,40 @@ namespace AndroidSideloader
deleteAfterInstallToolTip.SetToolTip(this.deleteAfterInstallCheckBox, "If this is checked, the software will delete all game files after downloading and installing a game from a remote server");
}
public void DebugLogCopy_click(object sender, EventArgs e)
{
if (File.Exists($"{Properties.Settings.Default.CurrentLogTitle}"))
{
RCLONE.runRcloneCommand($"copy \"{Environment.CurrentDirectory}\\{Properties.Settings.Default.CurrentLogTitle}\" RSL-debuglog: --progress --drive-acknowledge-abuse --rc", Properties.Settings.Default.BandwithLimit);
MessageBox.Show($"Your debug log has been copied to the server. Please mention your DebugLog ID to the Mods\n\nDebugLog ID - {Properties.Settings.Default.CurrentLogName}");
}
}
public void CrashLogCopy_click(object sender, EventArgs e)
{
if (File.Exists($"{Properties.Settings.Default.MainDir}\\crashlog.txt"))
{
if (File.Exists($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\crashlog.txt"))
File.Delete($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\crashlog.txt");
System.IO.File.Copy($"{Properties.Settings.Default.MainDir}\\crashlog.txt", $"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\crashlog.txt", true);
MessageBox.Show("crashlog.txt copied to your desktop!");
}
else
MessageBox.Show("No crashlog found!");
}
//Apply settings
private void applyButton_Click(object sender, EventArgs e)
{
@@ -96,5 +143,37 @@ namespace AndroidSideloader
{
Properties.Settings.Default.userJsonOnGameInstall = userJsonOnGameInstall.Checked;
}
private void SettingsForm_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Escape)
{
this.Close();
}
}
private void SettingsForm_Leave(object sender, EventArgs e)
{
this.Close();
}
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
}
}

View File

@@ -34,6 +34,10 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
}
}
//List of all installed package names from connected device
public static Dictionary<string, string> InstalledPackages = new Dictionary<string, string>(); //Packagename and Version
//public static List<string> InstalledPackageNames = new List<string>();
//Remove folder from device
public static ProcessOutput RemoveFolder(string path)
{
@@ -47,32 +51,32 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
}
//For games that require manual install, like having another folder that isnt an obb
public static ProcessOutput RunADBCommandsFromFile(string file)
public static ProcessOutput RunADBCommandsFromFile(string path)
{
ADB.WakeDevice();
ProcessOutput output = new ProcessOutput();
var commands = File.ReadAllLines(file);
var commands = File.ReadAllLines(path);
foreach (string cmd in commands)
{
if (cmd.Contains("7z.exe"))
{
Program.form.ChangeTitle($"Running {cmd}");
Logger.Log($"Logging command: {cmd} from file: {file}");
output += ADB.RunCommandToString(cmd, file);
Logger.Log($"Logging command: {cmd} from file: {path}");
output += ADB.RunCommandToString(cmd, path);
}
if (cmd.StartsWith("adb"))
{
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}");
Logger.Log($"Logging command: {result} from file: {file}");
output += ADB.RunAdbCommandToStringWOADB(result, file);
Logger.Log($"Logging command: {result} from file: {path}");
output += ADB.RunAdbCommandToStringWOADB(result, path);
if (output.Error.Contains("mkdir"))
output.Error = "";
if (output.Output.Contains("reserved"))
@@ -82,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;
}
@@ -95,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);
}
@@ -170,6 +174,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
ProcessOutput output = new ProcessOutput("", "");
string packageName = Sideloader.gameNameToPackageName(GameName);
output = ADB.RunAdbCommandToString("shell pm path " + packageName);
string apkPath = output.Output; //Get apk
@@ -180,10 +185,12 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
output += ADB.RunAdbCommandToString("pull " + apkPath); //pull apk
if (File.Exists(Properties.Settings.Default.MainDir + "\\" + packageName + ".apk"))
File.Delete(Properties.Settings.Default.MainDir + "\\" + packageName + ".apk");
File.Move(Properties.Settings.Default.ADBFolder + "\\base.apk", Properties.Settings.Default.MainDir + "\\" + packageName + ".apk");
MessageBox.Show("APK is named" + packageName + ".apk. Opening containing folder now.");
File.Move(Properties.Settings.Default.ADBFolder + "\\base.apk", Environment.CurrentDirectory + "\\" + packageName + ".apk");
return output;
}
@@ -192,8 +199,32 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
{
foreach (string[] game in SideloaderRCLONE.games)
{
if (gameName.Contains(game[SideloaderRCLONE.GameNameIndex]) || gameName.Contains(game[SideloaderRCLONE.PackageNameIndex]))
if (gameName.Contains(game[SideloaderRCLONE.GameNameIndex]))
return game[SideloaderRCLONE.PackageNameIndex];
if (gameName.Contains(game[SideloaderRCLONE.ReleaseNameIndex]))
return game[SideloaderRCLONE.PackageNameIndex];
}
return gameName;
}
public static string PackageNametoGameName(string gameName)
{
foreach (string[] game in SideloaderRCLONE.games)
{
if (gameName.Contains(game[SideloaderRCLONE.PackageNameIndex]))
return game[SideloaderRCLONE.ReleaseNameIndex];
}
return gameName;
}
public static string gameNameToSimpleName(string gameName)
{
foreach (string[] game in SideloaderRCLONE.games)
{
if (gameName.Contains(game[SideloaderRCLONE.GameNameIndex]))
return game[SideloaderRCLONE.GameNameIndex];
if (gameName.Contains(game[SideloaderRCLONE.ReleaseNameIndex]))
return game[SideloaderRCLONE.GameNameIndex];
}
return gameName;
}
@@ -250,5 +281,5 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
}
}
}

View File

@@ -9,7 +9,7 @@ namespace AndroidSideloader
string[] files = Directory.GetFiles(path);
foreach (string file in files)
if (file.EndsWith(".obb"))
if (file.EndsWith(".obb") || Path.GetDirectoryName(file).Contains(".") && !Path.GetDirectoryName(file).Contains("_data"))
return true;
return false;
}

View File

@@ -17,11 +17,7 @@ namespace AndroidSideloader
private static string RawGitHubUrl;
private static string GitHubUrl;
<<<<<<< HEAD
static readonly public string LocalVersion = "2.1.1HF1";
=======
static readonly public string LocalVersion = "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.
static readonly public string LocalVersion = "2.2.1";
public static string currentVersion = string.Empty;
public static string changelog = string.Empty;

View File

@@ -1,17 +1,25 @@
using System.IO;
using System;
using System.IO;
using System.Windows.Forms;
namespace AndroidSideloader
{
class Logger
{
public static string logfile = "debuglog.txt";
public string logfile = Properties.Settings.Default.CurrentLogTitle;
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(Properties.Settings.Default.CurrentLogTitle, time + text + newline); } catch { }
return ret;
}
return ret;
}
}

View File

@@ -1,3 +1,203 @@
2.2.1
Turned bold font off.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
RSL 2.2
+ Added custom naming scheme to Debug Log. Debug Log now uses 2 random nouns as its name when generated.
+ Added shortcut commands. Press F1 to see list of shortcuts.
F1 = Shortcuts List
F2 = Search
F3 = Quest Options
F4 = Rookie Settings
F5 = Refresh Games List
F11 = Copy Debug log to Desktop.
F12 = Copy Crash Log to Desktop (if one exists).
CTRL + R = Run custom ADB command.
CTRL + F = Search
CTRL + P = Copy package name of selected game to Clipboard.
CTRL + F4 = Restart program.
+ Added ability to upload debug logs to remote server (the server should be updated to reflect this sometime this week!)
= If Install.txt exists apk install and Obb copy will only be run from install.txt - this is to prevent double copy of obb files or double install of APKS.
= Fixed issue where if user started DL+install on one title then quickly selected a different title in the games list it would download the newly selected item instead of the originally intended item.
= Fixed issue that caused download progress bar to not work if multiple items were queued.
= Fixed other obb copying issues.
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDzKesACgkQx/Rql1Vo
czeiXQ/+OsH5CdnShheJR85/uIkVLGDf75Hkybj7k+5gV688imYwWbCRarudqa8k
aVC5g69mdKD8rD8DzWjccpFwxvOSq5MRQMWB/Nl/M2142Rnr1M4WdP6xEmMq1qmQ
X39T3tdpgxxKyDPIt4EX/iLT6qSHdB69qFtMeEoOsHmisqGDFDCHGs835VUUL9FU
PaZ218Dd07r9/W9cJKX5EI/ihWZ5lv+0defBofQu2A8GCOXzuWIudLtcG5uYIJwO
9frevYIKteuq+MmcXedgu3uWUb0CnQ+tEyShPYjTdrFdMJYgFrOzIIlogBWK5fm3
cp8YSzeHJpBnD8qQar/W92WTTzvWd7I9vk7YB/Pdn6MIzzTJX540R2fu2rwsYBCG
DciqA8+V5sDx5eRmrcUxrmxrsDMPlbpqos0R+yujCHyiLHzt1d/oEohZ/mNw24y4
3MrjGyzlJqRZZFnaMLGNooLBrT9EeGcTXk/MgJjSO1XQjCVAWmrrsEHCXqcKwi8i
IW5OMKld80wqWr79LRF6dPxjcuwRgVE8mNd6G6qedX5TXvqjHUEVymMLFFvhVQnQ
QnOHX0HzWXF/64ghD6r3OR4pQ8C5xb7Z6tEwXX7soQVo610m7nJT1zaHm2m9HSJN
AA1bdfK9SEKXl3KJT7SCEnQ/2ED6Qr/VBFXcJB/10Il/n8AdJ2o=
=DFRR
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
RSL 2.1.6
= Fixed bug that occurred if image isn't available for game.
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDuxAsACgkQx/Rql1Vo
czdf5w/+NsRI6Sq2EOJ5SQ4z+AsET0ydR4Dw5505z2uuM3R5OajPc1TvzmI1vehz
E5I7gDtw1gMbDofKj88oC3E/pdRi1mRuc8swkJJLJUrDG2z9oVdiBu9ccESOImbV
Yk8CtaTjNvIAEXHr4zQwS+JLy+0suLmQpw5zp2IXugWAbGVE8lQ9ZF3J3p+LEooQ
Lf1eG1V+Y68LCdeStI5kEBfgUgsB5mHXbcKG7LPxtCDjdhiV8rZNjBD8qsreNjfi
oWvncIwZRZv5q7/InEYUq7X2nLVE8Twpdj4jtYt7tOlwk6uodidTVhp49/HQ03ni
ieDAwV72ZqNTqvW0Jzb5yOjBtSFxOMyaiNvyuVQExaYrOege7LbH4+fJm5Lu3w8t
3Fowf/SPj9ep6CZ8snhfyEeyYPLyhLAPcojn0LH9wc3+fDe1tCWW6IajMFQaG07u
wx1/eLR+TEI1/qVEc7/YK/bw+nArTysTKMI9Gi0aoJcU6jUsHwhJI9o5zDEtDh7i
6S4y++dHuobMiMw9ZF98TlSnxu8W5YtlJO59N99W9DHFm1hFamITg6fLpwCoBrHT
nqpLG6GyQ8zmUs34RcdAx1e8niADuU/UGk90zrqAHpKd66PE7N03Ay9fDS2emAgF
EZk2pJEqLi9g63wBfGVMFDT9GlTtL7qmgzf1oOVp0gG3cNTbAuk=
=4zcr
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
RSL 2.1.5
+ Added Releasename to installing messages and download size message.
= Mulitple bugfixes.
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDums0ACgkQx/Rql1Vo
czc+PRAAmKSXHjNqO6JXpUKIQczrs3q15yZztgmOQMULNUImis3+/ykOxsMJit1A
W6ORtj3i2VH0TDBx/hhRghMPo+dNilyKnCWm928mXc3taMOEOKu+Dz8WfhnuNp0A
ENmV5fKfuChqrn/6jkUY8UG12NM0eu3A+7fH6LvRADxRxESVH81JUtcf4bSAlier
JuL/q67nv8mThFS3tRtjjvmu0nQMCUcvagfwRNFOUW0aob7NBAp6wxTsbxZo0yEq
oVOxyTAOR84IGHpWeDKDyMw+AySMnHQXl9Ty385zg4eHZr/l1uQcK61uNfiqVCK+
Pag6I1+vLs/3Z3v6qD84iUnis/RV2lqiZcenNeTHQgBKzSsxegB5t0WaID7qlnec
655QnEUbLbIxENS7HodMR1+CzWKgmmYpIH9jV+vH0+mTaKnAYmW56q/ae8OmjXqw
6NXSfog3Dv7U8Imq21Q8glxt/CXh1fY0I8JLxpMjbwEDm56fvvzdRAeE3TeXJR0y
CD9HbH/G8oH/OhLaj1UR5y9FR3PLIBhHmnl9VHtxcvv/nrHMQHbM9bAjPUpNdnSg
30yZxPw/eqv8KLhGxxc+cBnXv3p5bNf2j27gY1Q8XbgcL8PAM6NlVBN/9oaDQ5cL
r5Cc4d5r9F+Q+QrhpZlw3jshHdoVKqgc4ut6xBAWulztNWNvLok=
=tySN
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
RSL 2.1.3.2
+ Added checkbox to enable Enter to Download+Install.
= Fixed crash that occurred when user held down up arrow or down arrow on gamelist.
= Fixed all issues with Install.txt path.
= Clicking out of search box now closes it.
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDsFZ8ACgkQx/Rql1Vo
czcwJg/+PFiXfh6PPZNIRf2Zeht7WN8oxuUFV907KnD5+gKD0rzNd1NzgrcPOgAh
/oJakvY6ryLyaopJFZ8bm7++tQ3w6mbnzPaGweNoOF7/oLDb9NKVlK5/VjA3JPPN
QtOebRgBsigoRGGTq0s7ZRZV99vtSm2R1+1z9qlEu5Fm2hEiIggLvSBdGWDhbGnZ
jnvAZixeYgR+R6x4MZTsDao+qIYMio7heiVdN03gQ4hAaPbZ/I6s3cS+K33k02Nz
IEATqkwoLOevmN/D773A0cMzh/ZQWs557E3aKtwB+EHo/0ucCk0WaMSt4WdH8Qqe
WWF6+UT8FEEN2M76SQrg80xBj3QxzfIi92c231rVvtHMiVn5qUhTrDYb2wqx7J99
cJeMgANBmWSBZRBNW7jwhAxUVXE9vE8eqBza9MarXbJaLtq3Mf0ECLWvFPllA8dU
lnBcdSuTESvZkBAokkCwEJOb7sootBpEz5BZtE268mZEfsHUGWo3/VZDrJ7lLXJW
mEE2aCcHpNWysa9CsSee/QWNgLH2v+9PM3r/1SJyQ23C2hwyQI+F2lkch8Ar5Qfn
YxMWnhAcYXTRtcxY0s7xuhpUr/TGc6m9QY6NeVYMvb3g1gbmGOyyN/MELNOkEF/l
FXnrY4AfaNTs6EL6/id/viGcHc1MnnjgzlTNg5rgoxtFrHdVwP4=
=o0TQ
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
2.1.3.1
= Fixed issue where if using Quick Search and game was near bottom of list it wouldn't be selected.
+ Added hidden CTRL+P shortcut that copies the packagename of selected game to clipboard (for ease of finding OBB/Save folders or adding images for games).
2.1.3
+ Added Quicksearch
+ Added shortcut (CTRL+F) to open Quicksearch
+ Crashlog window can now open folder directory with crashlog if user selects NO.
+ Get APK from device will now open folder where APK is extracted automatically after extraction.
+ Added timestamps to Dialogbox
+ Added pictures for all current titles.
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDp024ACgkQx/Rql1Vo
czcYvA/9EqVDtGRprPp2q/K+NPTPmMPmtsoiRNU/LEDmkwiEOCcRoPNwnLbRFz7S
uoM7Trh05aquLgadTVQmoPLZriJPYwUUT5KBJBso1UT5fVyJ5bkfh6+MBQqxOx2j
YDyqFHdPVQL6QqMQig/XEoyJIWaqHPD60DR0I63E5GOK88cbxPBD94KEQDNhXvcO
mcJXwr9TmyEqOT5IgsoIfOwMQotB+MnrMO7bSFitpl8sAcxSMpoURz/KOAdR8+f8
K+OwUTNzuI01C+WRNa9xOhxSp7rRhYoPoNZgxR1/3NOMtNeSU4dEPOk7n/hpEnDS
MM8DtXIZJ0o26Oo+uL60a61zxUZ1P1w8ks/IGEG3nzqc5b1Fh0LilgBzUtwh1eEs
g9LcXKALwStJbfYFTzpjhKDQfUlGFRZUSE52BFCcZ4MlgIjbR5buVF4l+QfnR6BW
PGW50NoTsA/U+Yqxg5xRXRkyKc9+wBFJj3r4dISNJj8psqzbtKgvodjJbMqKmJjL
ZE0lWp2bx/DP19IZjn5FVRzBSqYfBmilyLRx53syNmpDQQ1l2v1YdgXLxcbeL4JO
f2nfjyMTM2BrEztpevNb2s4oKm5zYjUCNxmJy1PUCt0RBMNCBKPVRa9KEE/se5UU
ZDbqfFJx1oqL1vcLH9CNTIhiA2Ar2SJEtBzB0GutoYkIdGo8dJY=
=dYs/
-----END PGP SIGNATURE-----
-----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

View File

@@ -1 +1 @@
2.1.1HF2
2.2.1