Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7923adb4fb | ||
|
|
4b9d00a042 | ||
|
|
0df0384f96 | ||
|
|
5402dadbd9 |
139
ADB.cs
139
ADB.cs
@@ -2,6 +2,7 @@
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using JR.Utils.GUI.Forms;
|
||||
using Newtonsoft.Json;
|
||||
@@ -273,99 +274,95 @@ 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";
|
||||
}
|
||||
|
||||
public static bool wirelessadbON;
|
||||
|
||||
public static void WakeDevice()
|
||||
{
|
||||
string devicesout = RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP").Output;
|
||||
if (!devicesout.Contains("found") && !Properties.Settings.Default.nodevicemode)
|
||||
{
|
||||
if (Properties.Settings.Default.IPAddress.Contains("connect"))
|
||||
if (wirelessadbON || !String.IsNullOrEmpty(Properties.Settings.Default.IPAddress))
|
||||
{
|
||||
|
||||
RunAdbCommandToString(Properties.Settings.Default.IPAddress);
|
||||
string response = RunAdbCommandToString(Properties.Settings.Default.IPAddress).Output;
|
||||
|
||||
if (response.Contains("cannot") || String.IsNullOrEmpty(response))
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.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)
|
||||
if (response.Contains("cannot") || String.IsNullOrEmpty(response))
|
||||
{
|
||||
DialogResult dialogResult2 = FlexibleMessageBox.Show("PRESS YES TO DISABLE WIRELESS ADB.\n\nIf your Quest went idle press the HOLD button on the device twice then press NO to reconnect.\n\nIf you just want to exit this prompt press CANCEL.", "DISABLE WIRELESS ADB?", MessageBoxButtons.YesNoCancel);
|
||||
if (dialogResult2 == DialogResult.No)
|
||||
WakeDevice();
|
||||
if (dialogResult2 == DialogResult.Yes)
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("RSL can't connect to your Quest IP, this is usually because you have rebooted your Quest or the Quest IP has changed. Set a static IP to prevent this in the future(recommended)!\n\n\nYES = Static IP is set, do not detect my IP again.\nNO = I have not set a static IP, detect my IP again.\nCANCEL = I want to disable Wireless ADB.", "DEVICE REBOOTED/IP HAS CHANGED!", MessageBoxButtons.YesNoCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
{
|
||||
wirelessadbON = false;
|
||||
Properties.Settings.Default.IPAddress = "";
|
||||
Properties.Settings.Default.Save();
|
||||
WakeDevice();
|
||||
|
||||
|
||||
}
|
||||
if (dialogResult2 == DialogResult.Cancel)
|
||||
else if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
else if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
FlexibleMessageBox.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)
|
||||
{
|
||||
|
||||
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)
|
||||
{
|
||||
FlexibleMessageBox.Show("You must repeat the entire connection process, press OK to begin.", "Reconfigure Wireless ADB", MessageBoxButtons.OK);
|
||||
RunAdbCommandToString("devices");
|
||||
RunAdbCommandToString("tcpip 5555");
|
||||
FlexibleMessageBox.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";
|
||||
FlexibleMessageBox.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);
|
||||
FlexibleMessageBox.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.\n(This makes it so Rookie can work wirelessly even if the device has entered \"sleep mode\" at extremely little battery cost (~1% per full charge))", "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");
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
return;
|
||||
}
|
||||
if (dialogResult == DialogResult.No)
|
||||
{
|
||||
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
return;
|
||||
}
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
}
|
||||
else if (dialogResult == DialogResult.No)
|
||||
{
|
||||
FlexibleMessageBox.Show("You must repeat the entire connection process, press OK to begin.", "Reconfigure Wireless ADB", MessageBoxButtons.OK);
|
||||
RunAdbCommandToString("devices");
|
||||
RunAdbCommandToString("tcpip 5555");
|
||||
FlexibleMessageBox.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";
|
||||
FlexibleMessageBox.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 enable wake on wifi.\n(This makes it so Rookie can work wirelessly even if the device has entered \"sleep mode\" at extremely little battery cost (~1% per full charge))", "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");
|
||||
Program.form.ChangeTitlebarToDevice();
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="BMBFchecked" serializeAs="String">
|
||||
<value>False</value>
|
||||
<value>True</value>
|
||||
</setting>
|
||||
</AndroidSideloader.Properties.Settings>
|
||||
<AndroidADB.Sideloader.Properties.Settings>
|
||||
|
||||
@@ -1,6 +1,106 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.8
|
||||
|
||||
+ Added modified date to games list columns.
|
||||
= Drag and drop install will now show current
|
||||
APK name.
|
||||
|
||||
HFP
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEYjb8ACgkQx/Rql1Vo
|
||||
czcinQ//fNTuVCVHvq+fovTzg+rcqyy8CJVvZq8iH7OxUGLpbIoDaXEkMZCjNSl1
|
||||
p+4XPoCEKda8gqIjWJ3RV9Uog7C/0guUWhFMyUTePtDcDVFGhF3ALMk02MJqFDZh
|
||||
d2E1np0xQ2CdwGVVQs4otyLxKcgB5ATvFQkBE24+QEIyhAMdxQE0wN0BmzwcD5/K
|
||||
ETc7nULnvFx/s83dNO6FuGeqDjlSJ9BTad0BdsyafJK6wXqA6hKx4eEZjPZmBS6W
|
||||
wTpRQEJy4fOFB19c/W1TpQtvhu2AF+E0ofvP9xzQbVctPpc9B6omrhr4j6AJ23PH
|
||||
2IKcpMhOu1N5yAAIbqCR9Gwd5WAKYN/xVcqzJF49V3DJS7VaEIAOCRiy6xSAg4mX
|
||||
1YSHhOxcoq2WfbW/h6tF6fM51YDIqQg5Iw/pNF+hFO8n9vCEo22dooPhO8CInutY
|
||||
PVchoY+9rdH+13SLAiXaSdXl2I8TlDJWL2Y6iNQvwlcfXp1dYJ+4sdcSkEhNszKx
|
||||
0N51kHXQ2kpMK+D8gBMESYOMgwh550f9iME/roKl+yb7JxdnQv51/BiCCTpTzgjq
|
||||
OQqvGJ9z3gS9s6de9H7LFOHB/Vd0kBflfWIm+qlOHefXXVfBt1SCcu6j6aX3EFYB
|
||||
AC+FxvR5X4uYk0iYGRJzZK9ChqI0LVVTfAjDq3/sHm2/70cdqXk=
|
||||
=0i1h
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.7.2
|
||||
|
||||
+ Fixed automated mirror switching to now try every
|
||||
single mirror (instead of stoping at highest and failing).
|
||||
|
||||
+ Fixed BMBF automated drag and drop (zip/zips/folder of
|
||||
zips) song install. Settings is also now OPT OUT instead
|
||||
of OPT IN. It can be disabled in the settings menu.
|
||||
|
||||
+ Dead mirrors will no longer cause the gamelist to fail
|
||||
to load, instead RSL will move on after 35 seconds of no
|
||||
list loading.
|
||||
|
||||
+ Simplified Wireless ADB messages and also made it easier
|
||||
to enable or disable wireless ADB.
|
||||
|
||||
+ Fixed bug where if mirror failed it said "No gamelist".
|
||||
|
||||
+ Fixed bug where if mirror failed to load RSL would ask
|
||||
users to donate every app on their device whether it was
|
||||
actually newer than the mirrors' version or not.
|
||||
|
||||
HFP
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEVXukACgkQx/Rql1Vo
|
||||
czdLaA//ZBZ6ar5Qxlg5bZ409cSCRT+9JRBWkH7GRZZ4X2aejgesHXkcsF9L+NRo
|
||||
cUjv/4s+lWCScY3EvzJg038Nr9zXUsZYdCfJuT1f3P3uBvEBP+XdtB0+1+bnSQnX
|
||||
QhjtyP0WwJJqDhiDINB0DHycHu68sGmvaqZXoksWkdrtU5xDpoOw540nkBhIEHTb
|
||||
anFNUBEdGsjafVj6ZhZ4dYOpewVsV+VJZbg5J7T7z/ZdYZunS6fTBjb7ho9CfnpF
|
||||
GaTsGrwf03GcBBv13wYkl5UwO7TZiv6U+hUDOv0bkHGmaSQWbto+1Nt5GEo7SPMh
|
||||
qOiVvLH0vr6RuLLeaKo2QGzKcOgr4sSSXfQFp70yiQGEP/UlIHGBXqRyJ0x/hAtV
|
||||
yD7ynTpVpVw5bh939lpmjtw2VHNoOzOG9fky9tp61jQSIjDYWGP39Ntow9fkLWyC
|
||||
Em4pHwHih1aWiHV91kzupWdSKIk8KKewcNIKXmxvV1A9zc6cxxyqnvYIcbOojg0i
|
||||
d10UmyF+Tjm5bVH5U+AVwNeaFEZiI6d4QrLgTDFl3klyunCj2FWPdJmCvUPxFSzV
|
||||
fRB5OWgRWnWB85tb63geNTJbbJURH1TJ88PWFn/3opgOEFTDu4UkRiuK6VviRQ8D
|
||||
F95CsnuCrHRBwBozozv2YHJ8rCi61i+vmXi95jPAVMQd0OmsR0o=
|
||||
=nH4m
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.7.1
|
||||
|
||||
= Fixed apk path for in-place reinstall. Should work correctly now.
|
||||
|
||||
HFP
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEOGwkACgkQx/Rql1Vo
|
||||
czfPHw//eXtKkM1g/mjz43/BLTjhT1PTrwvolCmds+LzMTHT1EfDyouJBZ2XxnXQ
|
||||
NiZkk9SR3m/VmJSr0FO7p7F9Ab07xEUIv280C7Mbqyr0KEPiQTvrlnL/eX4sx/Px
|
||||
1pmDCuPUL42u2zo4famGxDvduoVToyPrIzzv3QYt8qJGEAYRG4gtn26SB38+JslU
|
||||
eU6hJkB2E7BNZXRtpiDM7rsejOtzsIROdLeIztSyIyTl/sY4Az9nfgRiJFyHsPsJ
|
||||
ILRRkquCzkXbzzdjS8AqPPIzt+JZdp+ZZS2H3gSeld4We8rkm5CzBef7pzeP6ZKZ
|
||||
WGYnw1Et9dtflSAmfDb6i4Rr5Y3mPLk2OzIeYebZ0fCGmyrpJ7QlRfYqJNJ7JMH9
|
||||
DOmsSNVUvFRR+b0FnT414uSg4Q79cYXWsJ/Wi28PIOQF0nQwtPIKly2x1kB4NE7P
|
||||
CItXy8VJ//q0/2ijHB3ZQIiMkj78TVePCAC6TQT4RnBgWS0HeItBKZJYCcyvhe72
|
||||
6H9qzOVsIKHgxnfbRON9tZOWxpxIdnbFsaE5TsiXp+80SsaHhxcxuAyjh0M0CaKu
|
||||
lh3z9FJmZW8CrxIA1G1sQePxqF3iObVhqJPqp8G7N6UC1wBnhJWmnBKTYm1iHs6P
|
||||
pj8ggpyFTT55UxGeRklLUyoSxSnqSE7Oj2zluLvBFHPi1KAMlEg=
|
||||
=HVQ5
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
|
||||
RSL 2.7
|
||||
|
||||
|
||||
2
MainForm.Designer.cs
generated
2
MainForm.Designer.cs
generated
@@ -1304,7 +1304,6 @@
|
||||
private System.Windows.Forms.Button ADBWirelessDisable;
|
||||
private System.Windows.Forms.Label freeDisclaimer;
|
||||
private System.Windows.Forms.ComboBox devicesComboBox;
|
||||
private System.Windows.Forms.ComboBox remotesList;
|
||||
private System.Windows.Forms.Button QuestOptionsButton;
|
||||
private System.Windows.Forms.Button ThemeChangerButton;
|
||||
private System.Windows.Forms.ListBox gamesQueListBox;
|
||||
@@ -1338,6 +1337,7 @@
|
||||
private System.Windows.Forms.Label label9;
|
||||
private System.Windows.Forms.Label BatteryLbl;
|
||||
private System.Windows.Forms.PictureBox pictureBox5;
|
||||
public System.Windows.Forms.ComboBox remotesList;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
114
MainForm.cs
114
MainForm.cs
@@ -34,6 +34,10 @@ namespace AndroidSideloader
|
||||
public static string CurrPCKG;
|
||||
public static bool debugMode = false;
|
||||
public bool DeviceConnected = false;
|
||||
|
||||
|
||||
public static string currremotesimple = "";
|
||||
|
||||
#endif
|
||||
|
||||
private bool isLoading = true;
|
||||
@@ -133,9 +137,10 @@ namespace AndroidSideloader
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
Properties.Settings.Default.ADBPath = adbFile;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
if (!String.IsNullOrEmpty(Properties.Settings.Default.IPAddress))
|
||||
ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress);
|
||||
CheckForInternet();
|
||||
|
||||
|
||||
if (HasInternet == true)
|
||||
Sideloader.downloadFiles();
|
||||
else
|
||||
@@ -247,9 +252,14 @@ namespace AndroidSideloader
|
||||
|
||||
ChangeTitle("Initializing Mirrors");
|
||||
initMirrors(true);
|
||||
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
|
||||
t.Interval = 35000; // 35 seconds before switching mirror
|
||||
t.Tick += new EventHandler(timer_Tick5);
|
||||
t.Start();
|
||||
ChangeTitle("Initializing Games");
|
||||
SideloaderRCLONE.UpdateNouns(currentRemote);
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
t.Stop();
|
||||
SideloaderRCLONE.UpdateNouns(currentRemote);
|
||||
if (!Directory.Exists(SideloaderRCLONE.ThumbnailsFolder) || !Directory.Exists(SideloaderRCLONE.NotesFolder))
|
||||
{
|
||||
FlexibleMessageBox.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!");
|
||||
@@ -327,6 +337,12 @@ namespace AndroidSideloader
|
||||
ADB.RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP");
|
||||
}
|
||||
|
||||
void timer_Tick5(object sender, EventArgs e)
|
||||
{
|
||||
SwitchMirrors();
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
}
|
||||
|
||||
void timer_Tick2(object sender, EventArgs e)
|
||||
{
|
||||
keyheld = false;
|
||||
@@ -972,7 +988,9 @@ namespace AndroidSideloader
|
||||
{
|
||||
if (file2.EndsWith(".apk"))
|
||||
{
|
||||
ChangeTitle($"Installing apk... (If this hangs, uninstall app first then install again)");
|
||||
string pathname = Path.GetDirectoryName(data);
|
||||
string filename = file2.Replace($"{pathname}\\", "");
|
||||
ChangeTitle($"Installing {filename} (If this hangs, uninstall app first then install again)");
|
||||
output += ADB.Sideload(file2);
|
||||
}
|
||||
|
||||
@@ -1023,7 +1041,9 @@ namespace AndroidSideloader
|
||||
else
|
||||
|
||||
{
|
||||
ChangeTitle($"Installing apk... (If this hangs, uninstall app first then install again)");
|
||||
string pathname = Path.GetDirectoryName(data);
|
||||
string dataname = data.Replace($"{pathname}\\", "");
|
||||
ChangeTitle($"Installing {dataname} (If this hangs, uninstall app first then install again)");
|
||||
output += ADB.Sideload(data);
|
||||
|
||||
|
||||
@@ -1126,7 +1146,15 @@ namespace AndroidSideloader
|
||||
char[] delims = new[] { '\r', '\n' };
|
||||
string[] strings = result.Split(delims, StringSplitOptions.RemoveEmptyEntries);
|
||||
//MessageBox.Show(result);
|
||||
|
||||
if (gamesListView.Columns.Count > 0)
|
||||
{
|
||||
gamesListView.Columns[5].Width = 0;
|
||||
gamesListView.Columns[2].Width = 0;
|
||||
gamesListView.Columns[3].Width = 102;
|
||||
gamesListView.Columns[4].Width = 94;
|
||||
gamesListView.Columns[6].Width = 98;
|
||||
gamesListView.Columns[1].Width = 280;
|
||||
}
|
||||
foreach (string packagename in strings)
|
||||
{
|
||||
if (string.Equals(release[SideloaderRCLONE.PackageNameIndex], packagename))
|
||||
@@ -1179,7 +1207,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!GameName.Contains("Beat Saber") && !dontget && !updatesnotified && SideloaderRCLONE.games.Count > 0)
|
||||
if (!GameName.Contains("Beat Saber") && !dontget && !updatesnotified && cloudVersionInt > 0)
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"It seems you have a newer version of:\n\n{GameName}\n\nAll apps on Rookie are from donors, please share the updated files with us.\nThis is the only way to keep the apps up to date for everyone.\n\nNOTE: Rookie will only extract the APK/OBB which contain NO personal information whatsoever.", "Share clean files?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
@@ -1247,13 +1275,10 @@ namespace AndroidSideloader
|
||||
gamesListView.BeginUpdate();
|
||||
gamesListView.Items.AddRange(arr);
|
||||
gamesListView.EndUpdate();
|
||||
updatesnotified = true;
|
||||
if(gamesListView.Columns.Count > 0)
|
||||
{
|
||||
gamesListView.Columns[1].Width = 280;
|
||||
}
|
||||
}
|
||||
|
||||
updatesnotified = true;
|
||||
|
||||
}
|
||||
|
||||
private void initMirrors(bool random)
|
||||
{
|
||||
@@ -1261,10 +1286,6 @@ namespace AndroidSideloader
|
||||
remotesList.Invoke(() => { index = remotesList.SelectedIndex; remotesList.Items.Clear(); });
|
||||
|
||||
string[] mirrors = RCLONE.runRcloneCommand("listremotes").Output.Split('\n');
|
||||
string item = "VRP-mirror07";
|
||||
string item2 = "VRP-mirror09";
|
||||
mirrors = mirrors.Where(val => val != item).ToArray();
|
||||
mirrors = mirrors.Where(val => val != item2).ToArray();
|
||||
|
||||
Logger.Log("Loaded following mirrors: ");
|
||||
int itemsCount = 0;
|
||||
@@ -1318,7 +1339,8 @@ namespace AndroidSideloader
|
||||
|
||||
private void aboutBtn_Click(object sender, EventArgs e)
|
||||
{
|
||||
string about = $@"Finally {Updater.LocalVersion}, with new version comming Soon™
|
||||
string about = $@"Version: {Updater.LocalVersion}
|
||||
|
||||
- Software orignally coded by rookie.wtf
|
||||
- Thanks to pmow for all of his work, including rclone, wonka and other projects, and for scripting the backend
|
||||
without him none of this would be possible
|
||||
@@ -1333,7 +1355,7 @@ 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, Sam Hoque, Kaladin, and the mod staff!";
|
||||
- HarryEffinPotter Thanks: Roma/Rookie, Pmow, Flow, John, Sam Hoque, Kaladin, and the mod staff!";
|
||||
|
||||
FlexibleMessageBox.Show(about);
|
||||
}
|
||||
@@ -1369,8 +1391,8 @@ without him none of this would be possible
|
||||
Program.form.showAvailableSpace();
|
||||
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);
|
||||
ADB.wirelessadbON = true;
|
||||
MessageBox.Show($"Connected! We can now automatically enable wake on wifi.\n(This makes it so Rookie can work wirelessly even if the device has entered \"sleep mode\" at extremely little battery cost (~1% per full charge))", "Enable Wake on Wifi?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_available 1");
|
||||
@@ -1411,13 +1433,15 @@ without him none of this would be possible
|
||||
}
|
||||
|
||||
private static readonly HttpClient client = new HttpClient();
|
||||
|
||||
private bool updatedConfig = false;
|
||||
|
||||
private bool gamesAreDownloading = false;
|
||||
public static bool reset = false;
|
||||
public static bool updatedConfig = false;
|
||||
public static int steps = 0;
|
||||
public static bool gamesAreDownloading = false;
|
||||
private List<string> gamesQueueList = new List<string>();
|
||||
private int quotaTries = 0;
|
||||
public static int quotaTries = 0;
|
||||
public static bool timerticked = false;
|
||||
|
||||
|
||||
public void SwitchMirrors()
|
||||
{
|
||||
quotaTries++;
|
||||
@@ -1428,12 +1452,22 @@ without him none of this would be possible
|
||||
FlexibleMessageBox.Show("Quota reached for all mirrors exiting program...");
|
||||
Application.Exit();
|
||||
}
|
||||
if (remotesList.Items.Count > remotesList.SelectedIndex)
|
||||
if (remotesList.SelectedIndex + 1 == remotesList.Items.Count)
|
||||
{
|
||||
reset = true;
|
||||
for (int i = 0; i < steps; i++)
|
||||
remotesList.SelectedIndex--;
|
||||
|
||||
}
|
||||
if (reset)
|
||||
{
|
||||
remotesList.SelectedIndex--;
|
||||
}
|
||||
if (remotesList.Items.Count > remotesList.SelectedIndex && !reset)
|
||||
{
|
||||
remotesList.SelectedIndex++;
|
||||
steps++;
|
||||
}
|
||||
else
|
||||
remotesList.SelectedIndex = 0;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1509,14 +1543,6 @@ without him none of this would be possible
|
||||
return;
|
||||
gamesAreDownloading = true;
|
||||
|
||||
if (updatedConfig == false && Properties.Settings.Default.autoUpdateConfig == true) //check for config only once per program open and if setting enabled
|
||||
{
|
||||
updatedConfig = true;
|
||||
ChangeTitle("Checking if config is updated and updating config");
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
await Task.Run(() => SideloaderRCLONE.updateConfig(currentRemote));
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
}
|
||||
|
||||
//Do user json on firsttime
|
||||
if (Properties.Settings.Default.userJsonOnGameInstall)
|
||||
@@ -1801,8 +1827,10 @@ without him none of this would be possible
|
||||
}
|
||||
else
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
ADB.wirelessadbON = false;
|
||||
FlexibleMessageBox.Show("Make sure your device is not connected to USB and press OK.");
|
||||
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
ADB.RunAdbCommandToString("shell USB");
|
||||
Thread.Sleep(2000);
|
||||
ADB.RunAdbCommandToString("disconnect");
|
||||
@@ -1898,9 +1926,15 @@ without him none of this would be possible
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set the column number that is to be sorted; default to ascending.
|
||||
lvwColumnSorter.SortColumn = e.Column;
|
||||
lvwColumnSorter.Order = SortOrder.Ascending;
|
||||
if (e.Column == 6)
|
||||
{
|
||||
lvwColumnSorter.Order = SortOrder.Descending;
|
||||
}
|
||||
else
|
||||
{
|
||||
lvwColumnSorter.Order = SortOrder.Ascending;
|
||||
}
|
||||
}
|
||||
|
||||
// Perform the sort with these new sort options.
|
||||
|
||||
2
Properties/Settings.Designer.cs
generated
2
Properties/Settings.Designer.cs
generated
@@ -601,7 +601,7 @@ namespace AndroidSideloader.Properties {
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool BMBFchecked {
|
||||
get {
|
||||
return ((bool)(this["BMBFchecked"]));
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="BMBFchecked" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
@@ -220,7 +220,7 @@ namespace AndroidSideloader
|
||||
|
||||
private void bmbfBox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.BMBFchecked = nodevicemodeBox.Checked;
|
||||
Properties.Settings.Default.BMBFchecked = bmbfBox.Checked;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,15 @@ using Newtonsoft.Json;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
class rcloneFolder
|
||||
{
|
||||
public string Path { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Size { get; set; }
|
||||
public string ModTime { get; set; }
|
||||
|
||||
}
|
||||
|
||||
class SideloaderRCLONE
|
||||
{
|
||||
public static List<string> RemotesList = new List<string>();
|
||||
@@ -38,12 +47,12 @@ namespace AndroidSideloader
|
||||
|
||||
public static void UpdateNouns(string remote)
|
||||
{
|
||||
RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/nouns\" \"{Nouns}\"");
|
||||
}
|
||||
|
||||
RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/nouns\" \"{Nouns}\"");
|
||||
}
|
||||
|
||||
public static void UpdateGamePhotos(string remote)
|
||||
{
|
||||
RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/thumbnails\" \"{ThumbnailsFolder}\"");
|
||||
RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/thumbnails\" \"{ThumbnailsFolder}\"");
|
||||
}
|
||||
|
||||
public static void UpdateGameNotes(string remote)
|
||||
@@ -76,7 +85,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
gameProperties.Clear();
|
||||
games.Clear();
|
||||
string tempGameList = RCLONE.runRcloneCommand($"cat \"{remote}:{RcloneGamesFolder}/GameList.txt\"").Output;
|
||||
string tempGameList = RCLONE.runRcloneCommand($"cat \"{remote}:{RcloneGamesFolder}/GameList.txt\"").Output;
|
||||
if (MainForm.debugMode)
|
||||
File.WriteAllText("GamesList.txt", tempGameList);
|
||||
string gamePropertiesLine = Utilities.StringUtilities.RemoveEverythingAfterFirst(tempGameList, "\n");
|
||||
@@ -85,13 +94,30 @@ namespace AndroidSideloader
|
||||
{
|
||||
gameProperties.Add(gameProperty);
|
||||
}
|
||||
gameProperties.Add("Upload Date");
|
||||
|
||||
|
||||
tempGameList = Utilities.StringUtilities.RemoveEverythingBeforeFirst(tempGameList, "\n");
|
||||
|
||||
List<rcloneFolder> gameFolders = JsonConvert.DeserializeObject<List<rcloneFolder>>(RCLONE.runRcloneCommand($"lsjson \"{remote}:{RcloneGamesFolder}\"").Output);
|
||||
|
||||
|
||||
foreach (string game in tempGameList.Split('\n'))
|
||||
{
|
||||
if (game.Length > 1)
|
||||
games.Add(game.Split(';'));
|
||||
{
|
||||
string[] splitGame = game.Split(';');
|
||||
|
||||
//gameFolder.find();
|
||||
|
||||
var gameFolder = gameFolders.Find((predicate) => predicate.Path == splitGame[1]);
|
||||
//splitGame[6] = gameFolder.ModTime;
|
||||
Array.Resize(ref splitGame, splitGame.Length + 1);
|
||||
string gametime = Utilities.StringUtilities.RemoveEverythingAfterLast(gameFolder.ModTime, ":");
|
||||
gametime = gametime.Replace("T", " ");
|
||||
splitGame[splitGame.Length - 1] = gametime;
|
||||
games.Add(splitGame);
|
||||
}
|
||||
}
|
||||
|
||||
//Output
|
||||
@@ -100,12 +126,20 @@ namespace AndroidSideloader
|
||||
//{
|
||||
// Console.WriteLine($"gameProperty: {s}");
|
||||
//}
|
||||
|
||||
|
||||
|
||||
foreach (string[] s in games)
|
||||
{
|
||||
string output = "";
|
||||
for (int i = 0; i < gameProperties.Count; i++)
|
||||
output += s[i] + " ";
|
||||
//string output = "";
|
||||
//for (int i = 0; i < gameProperties.Count; i++)
|
||||
// output += s[i] + " ";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace AndroidSideloader
|
||||
private static string RawGitHubUrl;
|
||||
private static string GitHubUrl;
|
||||
|
||||
static readonly public string LocalVersion = "2.7.1";
|
||||
static readonly public string LocalVersion = "2.8";
|
||||
public static string currentVersion = string.Empty;
|
||||
public static string changelog = string.Empty;
|
||||
|
||||
|
||||
@@ -1,25 +1,26 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.7.1
|
||||
|
||||
= Fixed apk path for in-place reinstall. Should work correctly now.
|
||||
RSL 2.8
|
||||
|
||||
HFP
|
||||
|
||||
+ Added "Upload Date" to games list columns.
|
||||
= Drag and drop install will now show current APK name.
|
||||
|
||||
HFP
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEOGwkACgkQx/Rql1Vo
|
||||
czfPHw//eXtKkM1g/mjz43/BLTjhT1PTrwvolCmds+LzMTHT1EfDyouJBZ2XxnXQ
|
||||
NiZkk9SR3m/VmJSr0FO7p7F9Ab07xEUIv280C7Mbqyr0KEPiQTvrlnL/eX4sx/Px
|
||||
1pmDCuPUL42u2zo4famGxDvduoVToyPrIzzv3QYt8qJGEAYRG4gtn26SB38+JslU
|
||||
eU6hJkB2E7BNZXRtpiDM7rsejOtzsIROdLeIztSyIyTl/sY4Az9nfgRiJFyHsPsJ
|
||||
ILRRkquCzkXbzzdjS8AqPPIzt+JZdp+ZZS2H3gSeld4We8rkm5CzBef7pzeP6ZKZ
|
||||
WGYnw1Et9dtflSAmfDb6i4Rr5Y3mPLk2OzIeYebZ0fCGmyrpJ7QlRfYqJNJ7JMH9
|
||||
DOmsSNVUvFRR+b0FnT414uSg4Q79cYXWsJ/Wi28PIOQF0nQwtPIKly2x1kB4NE7P
|
||||
CItXy8VJ//q0/2ijHB3ZQIiMkj78TVePCAC6TQT4RnBgWS0HeItBKZJYCcyvhe72
|
||||
6H9qzOVsIKHgxnfbRON9tZOWxpxIdnbFsaE5TsiXp+80SsaHhxcxuAyjh0M0CaKu
|
||||
lh3z9FJmZW8CrxIA1G1sQePxqF3iObVhqJPqp8G7N6UC1wBnhJWmnBKTYm1iHs6P
|
||||
pj8ggpyFTT55UxGeRklLUyoSxSnqSE7Oj2zluLvBFHPi1KAMlEg=
|
||||
=HVQ5
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEYj1sACgkQx/Rql1Vo
|
||||
czfO+A/+MGfS+NCkcBwYuxLOkkaojyDetDqHSVZ+onuPW3QL2IRuc4CUxNFLi9br
|
||||
8mqLz/EHD5F4++Hmc1limdF+r4Xxwdz9E00u1sbJbR+QhXes4vzxGNkOJlxC1PNW
|
||||
L8mEfMQLwoSyo8d4aKYJY1LsUmYaIQP81ae5MKt/4l3i2RivrCcfJvDaEBi6DJ1H
|
||||
EjFlFWaPpIjNDm0m1klzcrG0RRVHXtR1xw3IKcMhPeT7VSDYuc2ySXVwVSiHAOXr
|
||||
OPaDSNvNwnIGceM5HOqyQYHq+T0t/3z5bcndAq1EaLJ5W/1f8QcjRlowmMXO4uWs
|
||||
a7YIsgB96i4Riy1xmINf0z2sxvFNIUwCHvTNe/kD/ppN+RFfozM3KJyGwaMxpkRw
|
||||
LcG5FYwGYJZu9QhL36lokERUwsuzBb3ZVABv77oFJ/nPaS4C6CE8g5x08nXiCfqf
|
||||
Lo+RbI+jPX12nLrlKXdleG/xcMAdGUaIxglfpqxi/EG9w5kzUaMXMtybdNj1/p7q
|
||||
UrHgO/V2No/fsrgu28EEguIyDwk78JFHCpebrZH1/RC9ALQiN6I7eq5W1k1S9Buf
|
||||
HGgYk4U2Igm2Ud2oPsqV3dtTPbxqZtM3KCP4cvbaNzoqagvPTHuLQ8LXoPj1XWAd
|
||||
RfC8bi2Rulyx7Yv8uolyRqQVgHvUaPm4nIYHFpw59UTujMMkkZ0=
|
||||
=kLxd
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
Reference in New Issue
Block a user