Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2882737958 | ||
|
|
aebc719f0b | ||
|
|
d21b72758b | ||
|
|
40cc97aedd | ||
|
|
9a897954b4 | ||
|
|
2e151c7137 | ||
|
|
84d6b14e36 | ||
|
|
97d25c8e9c | ||
|
|
82cf72c677 | ||
|
|
3777b9237b | ||
|
|
2ed7034284 | ||
|
|
98dc7f4738 | ||
|
|
12efbac58a | ||
|
|
00cfc35102 |
5
ADB.cs
5
ADB.cs
@@ -224,7 +224,6 @@ namespace AndroidSideloader
|
||||
{
|
||||
WakeDevice();
|
||||
ProcessOutput output = new ProcessOutput("", "");
|
||||
output += RunAdbCommandToString($"shell pm uninstall -k --user 0 {package}");
|
||||
output += RunAdbCommandToString($"shell pm uninstall {package}");
|
||||
return output;
|
||||
}
|
||||
@@ -369,12 +368,12 @@ namespace AndroidSideloader
|
||||
}
|
||||
|
||||
|
||||
public static ProcessOutput Sideload(string path = "", string packagename = "")
|
||||
public static ProcessOutput Sideload(string path, string packagename = "")
|
||||
{
|
||||
|
||||
WakeDevice();
|
||||
ProcessOutput ret = new ProcessOutput();
|
||||
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
|
||||
ret += RunAdbCommandToString($"install -g \"{path}\"");
|
||||
string out2 = ret.Output + ret.Error;
|
||||
if (out2.Contains("failed"))
|
||||
{
|
||||
|
||||
Binary file not shown.
@@ -211,6 +211,7 @@
|
||||
<Compile Include="SelectFolder.cs" />
|
||||
<Compile Include="Utilities\StringUtilities.cs" />
|
||||
<Compile Include="Utilities\GeneralUtilities.cs" />
|
||||
<Compile Include="Utilities\UpdateGameData.cs" />
|
||||
<Compile Include="Utilities\UploadGame.cs" />
|
||||
<EmbeddedResource Include="MainForm.resx">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
|
||||
@@ -164,6 +164,9 @@
|
||||
<setting name="UploadedGameList" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="GlobalUsername" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
</AndroidSideloader.Properties.Settings>
|
||||
<AndroidADB.Sideloader.Properties.Settings>
|
||||
<setting name="checkForUpdates" serializeAs="String">
|
||||
|
||||
@@ -1,6 +1,180 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
|
||||
RSL 2.9
|
||||
|
||||
+ Updated ADB zip on repo and added a verification
|
||||
text file to ensure all users are on newest ADB,
|
||||
this should fix most obb issues. Upon first launch
|
||||
after this update Rookie will automatically obtain
|
||||
the latest ADB via this zip (7MB).
|
||||
|
||||
+ Added AAPT to repo along with a timer + logic to
|
||||
detect packagename for automatic reinstall when drag
|
||||
and dropped installs fail.
|
||||
|
||||
+ Implemented Size(MB) column to see app size prior
|
||||
to clicking Download and Install.
|
||||
|
||||
= Cleaned up automatic reinstall on apk installation
|
||||
failure for Download and Install, it should work for
|
||||
most users now.
|
||||
|
||||
= Adjusted code for mirror switching, should fix failure
|
||||
to load gameslist whatsoever on dead mirrors.
|
||||
|
||||
= Fixed issue where after installing a game RSL would
|
||||
ask user to donate same clean files again. RSL will now
|
||||
only ask once per program load, as intended.
|
||||
|
||||
- - Removed filesize confirmation dialog when clicking
|
||||
download and install.
|
||||
|
||||
- - Removed columns that were useless to users.
|
||||
|
||||
HFP
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEkn0oACgkQx/Rql1Vo
|
||||
czf7Mg//cU+DnFex+on9JBI5+K2bRfmp6RUhYHQKXD7V/od4vMxWP2jXt7F6ebat
|
||||
32KI9GeQfCubRuFEJKBRQ5BfsZXqZtWbLoYtSfrPsk6fz5JzK5PfzAayRLEmS3nV
|
||||
+3Gu7w7wxlseo+IzN95mvEZOYOaFnv7rieGJsXoEUVh0xZnCF7CzTe6MZ6JSdpCY
|
||||
LUWOiZ2Krxc8W/tD45JLGSxHkMpFlnZO9DLISyN65SdkvjcridbpTWSMiQJPh5KA
|
||||
jTiOM4PzOZo6YCoTsIWy4rvhkIqhdNJdJZK4qb0vN40wvqgbFI7c7yh/rcb/xi7R
|
||||
Ruva6Z2zIJi122lEsohG9TfeNODxIuPGR0rLAJDuSPpri0ukxLMIHPg0ViBQ2Z7D
|
||||
jPmDnEQDKPfaj1gbvAXuk5qd8ogOM3CCpBoaHt3tMFhuCUgxPYx5RxMPjdn8bOvR
|
||||
fjkEfMdvS55pI04seQued6KIlYnkkUGntIcSbBJfVhW8pev2iPxICC3Rn4ejSAnM
|
||||
J3fIjLsUbHxM501HgM8ttWjniEb5ExGFUI/PvF7rNw2WjYT8wJltv8PUWNZoQYy/
|
||||
Upif9IzLVORN9TsrnbxUQBtOZgmvfbCbj+rotYhvj6igo1C3ZX8t001CknljNBCU
|
||||
/9Y18yJRWJ7BpbEbzYpKBofphZzaWI9GN2hM6wV18An8sMEbb4A=
|
||||
=kVMl
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEkntYACgkQx/Rql1Vo
|
||||
czdB/g/9FHUbQt4tTHitnCBjfKmxRY5qcmmvSQM1LRKxoWqOMgl6wmX/oJQFnR1/
|
||||
DL+zc5nf1Qmjll7OyLEZbft2p0+KnGuGNCcB4aB36VcsMEED6j6L63OZeI045KY6
|
||||
cMAmcyR0A/OcfsiqaHjXVOyp8yI4RCGa/M2HwBvZOypxbdTKlftdQEOQ9bVFxV8p
|
||||
1L0NuhHpfewnke1WG3MRjiXlu44athOYh6fACO0/+TTJwmtD6w9A9fc+0A70jqp6
|
||||
pz9WVKzrnVFnq5CbHSQIrmDoQfiqyIxUEmrMKcZipjHfkVa0ZZ5Jjp9QuIozEskp
|
||||
rLxoCawe2NmfHhe4frxF6ngRCVD0Xcn8YmgQAbts+5+PqnvK+DyL0C53BkONUeCp
|
||||
ODAqiTjqWWfsILkpphPDQI4/WWjKURLTKFbse5jboBHNeF810y9gfBC0xHS8MeGO
|
||||
k//02mbJ7gHonRBpuNy0ba80tRHYtzr4OL/gd9YUyVd2AYP/GEptIoWM7ESqR1Hy
|
||||
g7oxD8JGR/WgLIJD1stYC3eh2Fy36J6oJPUvT85EUbPznY7UIL+upT/9wrXPzZqd
|
||||
iI4o8DkPq/9yMEWBwV8cikgllx+KXWgwHbG8lY0uvuxPX26UscGyY1bNytb/WMfG
|
||||
lJaztf9Yo7uBrSIdicEeED1BN+/q/QmsNzR9mpFrqfrqyDB91yA=
|
||||
=z7JR
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.8.7
|
||||
|
||||
= Added code made by Ivan that makes
|
||||
RSL load up much faster.
|
||||
= Added confirmation dialog when using
|
||||
Upload App button in case of accidental
|
||||
misclicks.
|
||||
|
||||
HFP
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEhgj8ACgkQx/Rql1Vo
|
||||
czc+TA/5ARiMcBdvxbKjB6jZKFDGZvEh0IpPyHRJzLpuZhHI+qR91P3UI9fXCrQ6
|
||||
Vzi6Nc0I3YMhPIpNnp9uxWkNfeIUDTdBUi+wwIpMopupVxLCEJkR7ZGkjJHFWPYn
|
||||
Hm19BLmmv9dctJwQlPLyaDgnb0+GKDRzZF8xHKBopbmModbhHwnt0UHTmodD4syc
|
||||
DinfaVpM+RwGZOptUyzwqLR51aQb03JrbHS3gkB40EbsIr6brZd50lahSvVMW8W4
|
||||
Btc3gf0rig+BrjXgUkNFlZ1PZ+jM1+12dWflYNvMYCoQ7bRc7Kds7IqCiPIweRF1
|
||||
2YR5jBh52C2ChhY3sfbc8G6VkbXW7N6ktz/11mrIc7Mc7X4ibpsDzQCUyDiuXNwi
|
||||
wm3ikq5liQYlM/I/awutD8yDcJPGEoUui8wYehwi23Pzujdh74bBYd9F6cQLg7Tb
|
||||
AsRLvEDY/n7gsDzqdt/oqUkGtt0x4c0K5ZPEIe9pcQvfNln7j/Mf3BNC4HZRkeei
|
||||
+FIyuhVf/w4dcz3xm1g5060N2eQLgXCk7690aak3l9ucghivUFlrKGe8vRk7qtE6
|
||||
FebUemHtTgurKz1bm8XCZjfvq0IR7MY+iGgIfKtXbM8SqjxIDhE7P1QuGXeZD9y3
|
||||
nkjY4+FHkT7BXSlOUpQ/6tR0wGYxtrxuNfwlXKGEqJlzPBbmCAY=
|
||||
=Zdt7
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.8.6
|
||||
|
||||
+ Added Set username option to Quest
|
||||
Options. This will work for all apps.
|
||||
|
||||
HFP
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEgoXkACgkQx/Rql1Vo
|
||||
czexgg/+P9mlydoik903J8wSbVvVvRhxypl+TI7ijkwU++qm4iGCc1ntqz/E/yAZ
|
||||
SpVjfuGpr3GV/B3ZkCKKvwvrwUr11CJFteoQ++HVmDlRwUu0DpNFIwiIi46E2ca8
|
||||
28Y3+A55WeNMFcLEBTB8nLUd7++YVhPs4ZKNOkCu+OYGMZN/2B6kPS9674YvRCZv
|
||||
7yqxmYBs5tVXHqoFJEGC6fMIfMN7rF1zkZ5u5qOpOeGGkFOeCyrtv/7fY7XmL9Qj
|
||||
i3mPOn8OV7N8wMoXt1j7cagdmYh2rwK90raCovItqWmCoy2HoBtxM6624+q5kt0i
|
||||
2ne5s/p3yiwlW4tRFHsCzseN3N6gEv3kQ2gSN5JDfyUlTOZwMrYyWvNHrYsuJH/U
|
||||
ibxPQFInULg2RmuARvRZRngtvxPIQsANuFyzCU2jGUOPvrtHfDtvnAL1WtHZtmga
|
||||
x1iiw86GKfvmkqPq9Sz6NXczCOyE6d7knfGNNqK5Ec7D2I/O2aw/9Ssz1TiAhj9S
|
||||
vIiw0ABOTI0VrSic63y0qkShq81BcaYd7IFX2r++JnC+LEoYuA9EriaqKqwCLgLU
|
||||
ghwBYOSnkh7/mGu7eBF8SzYk3QlhC5+5IcsQtwNT97Z2DqVxzlT0CwFot9puObnO
|
||||
AkeRZ5JtDd9w3RmjcMIVVpqyUvC8guDlBgMsrwFNiRcxyY08+es=
|
||||
=T/ZC
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.8.5
|
||||
|
||||
+ Added OPT-IN installed packages check,
|
||||
this will be used to add common free apps
|
||||
to a blacklist so a future version of RSL
|
||||
can ask users to donate new apps.
|
||||
|
||||
= Fixed logic for apk signature mismatch
|
||||
automatic reinstall.
|
||||
|
||||
= Increased timer for apk installation
|
||||
failure to 3 minutes.
|
||||
|
||||
= Fixed blacklist implementation for
|
||||
updates to apps already on RSL.
|
||||
|
||||
- - Removed 2nd confirmation dialog for
|
||||
app uninstalls.
|
||||
|
||||
HFP
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEfX4kACgkQx/Rql1Vo
|
||||
czch2BAAgPAPx8ziiX8e+IH9wBTBbj+Z9V8/GCaehCYd2SdOi9n4rHwzKL2S96mb
|
||||
VAyEuYyEnPc+sGIIVoUczAeoBOFpt6rwVwAysHfX85+MFcaJ8x/k5iAHwUYUDbaS
|
||||
retbuPO4YIsPHI38DWscOO0G/uD+caa5sf6/hYr6wLhIIozAmE3L9XtUuYO6kKSo
|
||||
m2hBAf728MWODRHH0G6+ktJG1sL1l5x66A+wvRkKHoYZFGLrAM126yGWIQlmWdtN
|
||||
F2AzBPXvIX09wtpiXQwLAc0GNF/wrazd8A5d9l0c+Rkl2lmist5k9xBD+MAbehdb
|
||||
QI1QgKXDvEZIp/+B4BgaB193HxZZFphVkRtera8mlohmiHVzunFcpHonOrc90jjk
|
||||
7fAMiieR/EgaRGXux9a24s/q32L/dHxqUtZfHhYbgRtWe4Kcm9AbVkLDVSAPiQik
|
||||
5k8fFRkokRQVgd5i/G0fzMPLHfKIn9afQ5oli7WxL761JQcx7HDb6/HS0BKiyZWN
|
||||
CsAxNjHt+4B/k5lvJNSCJL8mjQMjTViiPNYE9OmM6SzttvYtn8NGE6+fKb/e5x7+
|
||||
DjQuOVZ3b6TtKnvmx/Q5TbF82P23p9I6Aa32mMO8edD2CYKIF8bmDNlSGjWs3EC9
|
||||
OxsIksCmNIb4pxY25ejlN/X92/75YNsxrI+dYhXJPMOm39WQtVY=
|
||||
=EPMk
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
RSL 2.8.4
|
||||
+ Hotfix to update the exclusion list of games we need updates for.
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.8.2
|
||||
|
||||
+ Added automatic upload to Google shared drive
|
||||
|
||||
2
MainForm.Designer.cs
generated
2
MainForm.Designer.cs
generated
@@ -242,7 +242,7 @@
|
||||
this.getApkButton.Padding = new System.Windows.Forms.Padding(23, 0, 0, 0);
|
||||
this.getApkButton.Size = new System.Drawing.Size(218, 28);
|
||||
this.getApkButton.TabIndex = 2;
|
||||
this.getApkButton.Text = "Upload Selected App";
|
||||
this.getApkButton.Text = "Share Selected App";
|
||||
this.getApkButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.getApkButton.UseVisualStyleBackColor = false;
|
||||
this.getApkButton.Click += new System.EventHandler(this.getApkButton_Click);
|
||||
|
||||
624
MainForm.cs
624
MainForm.cs
@@ -107,51 +107,21 @@ namespace AndroidSideloader
|
||||
|
||||
|
||||
private string oldTitle = "";
|
||||
public static bool updatesnotified;
|
||||
public static bool updatesnotified = false;
|
||||
|
||||
private async void Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
updatesnotified = false;
|
||||
|
||||
string adbFile = "C:\\RSL\\2.8.2\\adb\\adb.exe";
|
||||
string adbDir = "C:\\RSL\\2.8.2\\adb";
|
||||
string fileName = "";
|
||||
string destFile = "";
|
||||
string date_time = DateTime.Now.ToString("dddd, MMMM dd @ hh:mmtt (UTC)");
|
||||
Logger.Log($"\n\n##############\n##############\n##############\n\nAPP LAUNCH DATE/TIME: " + date_time + "\n\n##############\n##############\n##############\n\n");
|
||||
Properties.Settings.Default.MainDir = Environment.CurrentDirectory;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
|
||||
if (!File.Exists(adbFile))
|
||||
{
|
||||
Directory.CreateDirectory(adbDir);
|
||||
if (System.IO.Directory.Exists($"{Environment.CurrentDirectory}\\adb"))
|
||||
{
|
||||
string[] ADBfiles = System.IO.Directory.GetFiles($"{Properties.Settings.Default.MainDir}\\adb");
|
||||
|
||||
// Copy the files and overwrite destination files if they already exist.
|
||||
foreach (string s in ADBfiles)
|
||||
{
|
||||
fileName = System.IO.Path.GetFileName(s);
|
||||
destFile = System.IO.Path.Combine(adbDir, fileName);
|
||||
System.IO.File.Copy(s, destFile, true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
Properties.Settings.Default.ADBPath = adbFile;
|
||||
Properties.Settings.Default.Save();
|
||||
if (!String.IsNullOrEmpty(Properties.Settings.Default.IPAddress))
|
||||
ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress);
|
||||
CheckForInternet();
|
||||
|
||||
if (HasInternet == true)
|
||||
Sideloader.downloadFiles();
|
||||
else
|
||||
FlexibleMessageBox.Show("Cannot connect to google dns, your internet may be down, won't use rclone or online features!");
|
||||
await Task.Delay(100);
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
if (!String.IsNullOrEmpty(Properties.Settings.Default.IPAddress))
|
||||
ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress);
|
||||
|
||||
if (!Directory.Exists(BackupFolder))
|
||||
Directory.CreateDirectory(BackupFolder);
|
||||
@@ -258,31 +228,48 @@ 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.initGames(currentRemote);
|
||||
t.Stop();
|
||||
//ChangeTitle("Syncing Game Photos");
|
||||
//ChangeTitle("Updating list of needed clean apps...");
|
||||
//ChangeTitle("Checking for Updates on server...");
|
||||
|
||||
});
|
||||
t1.SetApartmentState(ApartmentState.STA);
|
||||
t1.IsBackground = true;
|
||||
Thread t2 = new Thread(() =>
|
||||
{
|
||||
SideloaderRCLONE.UpdateGameNotes(currentRemote);
|
||||
});
|
||||
|
||||
Thread t3 = new Thread(() =>
|
||||
{
|
||||
SideloaderRCLONE.UpdateGamePhotos(currentRemote);
|
||||
});
|
||||
|
||||
Thread t4 = new Thread(() =>
|
||||
{
|
||||
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!");
|
||||
}
|
||||
ChangeTitle("Syncing Game Photos");
|
||||
SideloaderRCLONE.UpdateGamePhotos(currentRemote);
|
||||
ChangeTitle("Updating list of needed clean apps...");
|
||||
ChangeTitle("Checking for Updates on server...");
|
||||
SideloaderRCLONE.UpdateGameNotes(currentRemote);
|
||||
ChangeTitle("Loaded");
|
||||
});
|
||||
t1.SetApartmentState(ApartmentState.STA);
|
||||
t1.IsBackground = true;
|
||||
t2.IsBackground = true;
|
||||
t3.IsBackground = true;
|
||||
t4.IsBackground = true;
|
||||
if (HasInternet)
|
||||
{
|
||||
t1.Start();
|
||||
while (t1.IsAlive)
|
||||
t2.Start();
|
||||
t3.Start();
|
||||
t4.Start();
|
||||
}
|
||||
while (t1.IsAlive || t2.IsAlive || t3.IsAlive || t4.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
ChangeTitle("Loaded");
|
||||
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
Thread configThread = new Thread(() =>
|
||||
{
|
||||
@@ -293,7 +280,7 @@ namespace AndroidSideloader
|
||||
});
|
||||
configThread.IsBackground = true;
|
||||
configThread.Start();
|
||||
while (t1.IsAlive)
|
||||
while (configThread.IsAlive)
|
||||
await Task.Delay(100);
|
||||
ChangeTitle("Populating update list, please wait...");
|
||||
listappsbtn();
|
||||
@@ -342,12 +329,6 @@ 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;
|
||||
@@ -747,7 +728,7 @@ namespace AndroidSideloader
|
||||
line[i] = line[i].Remove(0, 8);
|
||||
line[i] = line[i].Remove(line[i].Length - 1);
|
||||
foreach (var game in SideloaderRCLONE.games)
|
||||
if (line[i].Length > 0 && game[3].Contains(line[i]))
|
||||
if (line[i].Length > 0 && game[2].Contains(line[i]))
|
||||
line[i] = game[0];
|
||||
}
|
||||
}
|
||||
@@ -767,7 +748,6 @@ namespace AndroidSideloader
|
||||
public static bool isworking = false;
|
||||
private async void getApkButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
ADB.WakeDevice();
|
||||
|
||||
if (m_combo.SelectedIndex == -1)
|
||||
@@ -775,6 +755,9 @@ namespace AndroidSideloader
|
||||
notify("Please select an app first");
|
||||
return;
|
||||
}
|
||||
DialogResult dialogResult1 = FlexibleMessageBox.Show($"Do you want to upload {m_combo.SelectedItem.ToString()} now?", "Upload app?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult1 == DialogResult.No)
|
||||
return;
|
||||
if (!isworking)
|
||||
{
|
||||
isworking = true;
|
||||
@@ -879,12 +862,11 @@ namespace AndroidSideloader
|
||||
|
||||
Directory.CreateDirectory(CurrBackups);
|
||||
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/data/{packagename}\" \"{CurrBackups}\"");
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"Please check to see if we automatically found savedata in Documents\\Rookie Backups.\nIf there are no new files there is recommended that you do a full backup via Backup Gamedata before continuing.\nNOTE: Some games do not allow backup of savedata.\nContinue with the uninstall?", "Check for backup.", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"Please check to see if we automatically found savedata in Documents\\Rookie Backups.\nIf there are no new files there is recommended that you do a full backup via Backup Gamedata before continuing.\nNOTE: Some games do not allow backup of savedata.\nContinue with the uninstall?", "Continue with Uninstall?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.No)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ProcessOutput output = new ProcessOutput("", "");
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
Thread t1 = new Thread(() =>
|
||||
@@ -892,24 +874,15 @@ namespace AndroidSideloader
|
||||
output += Sideloader.UninstallGame(GameName);
|
||||
});
|
||||
t1.Start();
|
||||
|
||||
t1.IsBackground = true;
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
ShowPrcOutput(output);
|
||||
showAvailableSpace();
|
||||
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
m_combo.Items.RemoveAt(m_combo.SelectedIndex);
|
||||
ShowPrcOutput(output);
|
||||
listappsbtn();
|
||||
initListView();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private async void sideloadFolderButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
@@ -969,157 +942,285 @@ namespace AndroidSideloader
|
||||
ADB.WakeDevice();
|
||||
ADB.DeviceID = GetDeviceID();
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
|
||||
CurrPCKG = "";
|
||||
string[] datas = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||
foreach (string data in datas)
|
||||
{
|
||||
string[] datas = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||
foreach (string data in datas)
|
||||
string directory = Path.GetDirectoryName(data);
|
||||
//if is directory
|
||||
string dir = Path.GetDirectoryName(data);
|
||||
string path = $"{dir}\\Install.txt";
|
||||
if (Directory.Exists(data))
|
||||
{
|
||||
string directory = Path.GetDirectoryName(data);
|
||||
//if is directory
|
||||
string dir = Path.GetDirectoryName(data);
|
||||
string path = $"{dir}\\Install.txt";
|
||||
if (Directory.Exists(data))
|
||||
|
||||
Program.form.ChangeTitle($"Copying {data} to device...");
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
|
||||
{
|
||||
Program.form.ChangeTitle($"Copying {data} to device...");
|
||||
output += ADB.CopyOBB(data);
|
||||
Program.form.ChangeTitle($"");
|
||||
string extension = Path.GetExtension(data);
|
||||
if (extension == ".apk")
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
Program.form.ChangeTitle($"");
|
||||
string extension = Path.GetExtension(data);
|
||||
if (extension == ".apk")
|
||||
{
|
||||
|
||||
if (File.Exists($"{Environment.CurrentDirectory}\\Install.txt"))
|
||||
{
|
||||
|
||||
if (File.Exists($"{Environment.CurrentDirectory}\\Install.txt"))
|
||||
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("Special instructions have been found with this file, would you like to run them automatically?", "Special Instructions found!", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
return;
|
||||
else
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
|
||||
Thread t2 = new Thread(() =>
|
||||
|
||||
{
|
||||
|
||||
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("Special instructions have been found with this file, would you like to run them automatically?", "Special Instructions found!", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
return;
|
||||
else
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
output += Sideloader.RunADBCommandsFromFile(path);
|
||||
Logger.Log($"Sideloading {path}");
|
||||
if (output.Error.Contains("mkdir"))
|
||||
output.Error = "";
|
||||
if (output.Error.Contains("reserved"))
|
||||
output.Output = "";
|
||||
ChangeTitle("");
|
||||
}
|
||||
}
|
||||
string[] files = Directory.GetFiles(data);
|
||||
foreach (string file2 in files)
|
||||
{
|
||||
if (File.Exists(file2))
|
||||
{
|
||||
if (file2.EndsWith(".apk"))
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
if (file2.EndsWith(".zip") && Properties.Settings.Default.BMBFchecked)
|
||||
{
|
||||
string datazip = file2;
|
||||
string zippath = Path.GetDirectoryName(data);
|
||||
datazip = datazip.Replace(zippath, "");
|
||||
datazip = Utilities.StringUtilities.RemoveEverythingAfterFirst(datazip, ".");
|
||||
datazip = datazip.Replace(".", "");
|
||||
string command2 = $"\"{Properties.Settings.Default.MainDir}\\7z.exe\" e \"{file2}\" -o\"{zippath}\\{datazip}\\\"";
|
||||
ADB.RunCommandToString(command2, file2);
|
||||
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" /sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/");
|
||||
Directory.Delete($"{zippath}\\{datazip}", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
string[] folders = Directory.GetDirectories(data);
|
||||
foreach (string folder in folders)
|
||||
{
|
||||
Program.form.ChangeTitle($"Copying {folder} to device...");
|
||||
output += ADB.CopyOBB(folder);
|
||||
Program.form.ChangeTitle("");
|
||||
Properties.Settings.Default.CurrPckg = dir;
|
||||
Properties.Settings.Default.Save();
|
||||
});
|
||||
t2.IsBackground = true;
|
||||
t2.Start();
|
||||
|
||||
while (t2.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
Logger.Log($"Sideloading {path}");
|
||||
if (output.Error.Contains("mkdir"))
|
||||
output.Error = "";
|
||||
if (output.Error.Contains("reserved"))
|
||||
output.Output = "";
|
||||
ChangeTitle("");
|
||||
}
|
||||
}
|
||||
//if it's a file
|
||||
else if (File.Exists(data))
|
||||
string[] files = Directory.GetFiles(data);
|
||||
foreach (string file2 in files)
|
||||
{
|
||||
|
||||
string extension = Path.GetExtension(data);
|
||||
if (extension == ".apk")
|
||||
if (File.Exists(file2))
|
||||
{
|
||||
if (File.Exists($"{dir}\\Install.txt"))
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("Special instructions have been found with this file, would you like to run them automatically?", "Special Instructions found!", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
return;
|
||||
else
|
||||
{
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
output += Sideloader.RunADBCommandsFromFile(path);
|
||||
ChangeTitle("");
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if (file2.EndsWith(".apk"))
|
||||
{
|
||||
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);
|
||||
string filename = file2.Replace($"{pathname}\\", "");
|
||||
|
||||
string cmd = $"\"{Properties.Settings.Default.MainDir}\\adb\\aapt.exe\" dump badging \"{data}\" | findstr -i \"package: name\"";
|
||||
string cmdout = ADB.RunCommandToString(cmd, file2).Output;
|
||||
cmdout = Utilities.StringUtilities.RemoveEverythingBeforeFirst(cmdout, "=");
|
||||
cmdout = Utilities.StringUtilities.RemoveEverythingAfterFirst(cmdout, " ");
|
||||
cmdout = cmdout.Replace("'", "");
|
||||
cmdout = cmdout.Replace("=", "");
|
||||
CurrPCKG = cmdout;
|
||||
CurrAPK = file2;
|
||||
System.Windows.Forms.Timer t3 = new System.Windows.Forms.Timer();
|
||||
t3.Interval = 150000; // 180 seconds to fail
|
||||
t3.Tick += timer_Tick4;
|
||||
t3.Start();
|
||||
Program.form.ChangeTitle($"Sideloading apk...");
|
||||
|
||||
Thread t2 = new Thread(() =>
|
||||
|
||||
{
|
||||
output += ADB.Sideload(file2);
|
||||
});
|
||||
t2.IsBackground = true;
|
||||
t2.Start();
|
||||
while (t2.IsAlive)
|
||||
await Task.Delay(100);
|
||||
t3.Stop();
|
||||
}
|
||||
|
||||
if (file2.EndsWith(".zip") && Properties.Settings.Default.BMBFchecked)
|
||||
{
|
||||
string datazip = file2;
|
||||
string zippath = Path.GetDirectoryName(data);
|
||||
datazip = datazip.Replace(zippath, "");
|
||||
datazip = Utilities.StringUtilities.RemoveEverythingAfterFirst(datazip, ".");
|
||||
datazip = datazip.Replace(".", "");
|
||||
string command2 = $"\"{Properties.Settings.Default.MainDir}\\7z.exe\" e \"{file2}\" -o\"{zippath}\\{datazip}\\\"";
|
||||
|
||||
Thread t2 = new Thread(() =>
|
||||
|
||||
{
|
||||
ADB.RunCommandToString(command2, file2);
|
||||
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" /sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/");
|
||||
});
|
||||
t2.IsBackground = true;
|
||||
t2.Start();
|
||||
|
||||
while (t2.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
Directory.Delete($"{zippath}\\{datazip}", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
string[] folders = Directory.GetDirectories(data);
|
||||
foreach (string folder in folders)
|
||||
{
|
||||
Program.form.ChangeTitle($"Copying {folder} to device...");
|
||||
|
||||
Thread t2 = new Thread(() =>
|
||||
|
||||
{
|
||||
output += ADB.CopyOBB(folder);
|
||||
});
|
||||
t2.IsBackground = true;
|
||||
t2.Start();
|
||||
|
||||
while (t2.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
Program.form.ChangeTitle("");
|
||||
Properties.Settings.Default.CurrPckg = dir;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
//if it's a file
|
||||
else if (File.Exists(data))
|
||||
{
|
||||
|
||||
string extension = Path.GetExtension(data);
|
||||
if (extension == ".apk")
|
||||
{
|
||||
if (File.Exists($"{dir}\\Install.txt"))
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("Special instructions have been found with this file, would you like to run them automatically?", "Special Instructions found!", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
return;
|
||||
else
|
||||
{
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
|
||||
{
|
||||
output += Sideloader.RunADBCommandsFromFile(path);
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
|
||||
ChangeTitle("");
|
||||
|
||||
}
|
||||
}
|
||||
//If obb is dragged and dropped alone onto Rookie, Rookie will recreate its obb folder automatically with this code.
|
||||
else if (extension == ".obb")
|
||||
else
|
||||
{
|
||||
string filename = Path.GetFileName(data);
|
||||
string foldername = filename.Substring(filename.IndexOf('.') + 1);
|
||||
foldername = foldername.Substring(foldername.IndexOf('.') + 1);
|
||||
foldername = foldername.Replace(".obb", "");
|
||||
foldername = Environment.CurrentDirectory + "\\" + foldername;
|
||||
Directory.CreateDirectory(foldername);
|
||||
File.Copy(data, foldername + "\\" + filename);
|
||||
path = foldername;
|
||||
output += ADB.CopyOBB(path);
|
||||
Directory.Delete(foldername, true);
|
||||
ChangeTitle("");
|
||||
}
|
||||
// BMBF Zip extraction then push to BMBF song folder on Quest.
|
||||
else if (extension == ".zip" && Properties.Settings.Default.BMBFchecked)
|
||||
{
|
||||
string datazip = data;
|
||||
string zippath = Path.GetDirectoryName(data);
|
||||
datazip = datazip.Replace(zippath, "");
|
||||
datazip = Utilities.StringUtilities.RemoveEverythingAfterFirst(datazip, ".");
|
||||
datazip = datazip.Replace(".", "");
|
||||
string pathname = Path.GetDirectoryName(data);
|
||||
string dataname = data.Replace($"{pathname}\\", "");
|
||||
string cmd = $"\"{Properties.Settings.Default.MainDir}\\adb\\aapt.exe\" dump badging \"{data}\" | findstr -i \"package: name\"";
|
||||
string cmdout = ADB.RunCommandToString(cmd, data).Output;
|
||||
cmdout = Utilities.StringUtilities.RemoveEverythingBeforeFirst(cmdout, "=");
|
||||
cmdout = Utilities.StringUtilities.RemoveEverythingAfterFirst(cmdout, " ");
|
||||
cmdout = cmdout.Replace("'", "");
|
||||
cmdout = cmdout.Replace("=", "");
|
||||
CurrPCKG = cmdout;
|
||||
CurrAPK = data;
|
||||
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
|
||||
timer.Interval = 150000; // 150 seconds to fail
|
||||
timer.Tick += timer_Tick4;
|
||||
timer.Start();
|
||||
|
||||
ChangeTitle($"Installing {dataname}...");
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
|
||||
{
|
||||
output += ADB.Sideload(data);
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
timer.Stop();
|
||||
|
||||
string command = $"\"{Properties.Settings.Default.MainDir}\\7z.exe\" e \"{data}\" -o\"{zippath}\\{datazip}\\\"";
|
||||
|
||||
ADB.RunCommandToString(command, data);
|
||||
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" /sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/");
|
||||
Directory.Delete($"{zippath}\\{datazip}", true);
|
||||
}
|
||||
else if (extension == ".txt")
|
||||
{
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
output += Sideloader.RunADBCommandsFromFile(path);
|
||||
ChangeTitle("");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
//If obb is dragged and dropped alone onto Rookie, Rookie will recreate its obb folder automatically with this code.
|
||||
else if (extension == ".obb")
|
||||
{
|
||||
string filename = Path.GetFileName(data);
|
||||
string foldername = filename.Substring(filename.IndexOf('.') + 1);
|
||||
foldername = foldername.Substring(foldername.IndexOf('.') + 1);
|
||||
foldername = foldername.Replace(".obb", "");
|
||||
foldername = Environment.CurrentDirectory + "\\" + foldername;
|
||||
Directory.CreateDirectory(foldername);
|
||||
File.Copy(data, foldername + "\\" + filename);
|
||||
path = foldername;
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
Thread t1 = new Thread(() =>
|
||||
|
||||
{
|
||||
output += ADB.CopyOBB(path);
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
Directory.Delete(foldername, true);
|
||||
ChangeTitle("");
|
||||
}
|
||||
// BMBF Zip extraction then push to BMBF song folder on Quest.
|
||||
else if (extension == ".zip" && Properties.Settings.Default.BMBFchecked)
|
||||
{
|
||||
string datazip = data;
|
||||
string zippath = Path.GetDirectoryName(data);
|
||||
datazip = datazip.Replace(zippath, "");
|
||||
datazip = Utilities.StringUtilities.RemoveEverythingAfterFirst(datazip, ".");
|
||||
datazip = datazip.Replace(".", "");
|
||||
|
||||
string command = $"\"{Properties.Settings.Default.MainDir}\\7z.exe\" e \"{data}\" -o\"{zippath}\\{datazip}\\\"";
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
|
||||
{
|
||||
ADB.RunCommandToString(command, data);
|
||||
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" /sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/");
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
Directory.Delete($"{zippath}\\{datazip}", true);
|
||||
}
|
||||
else if (extension == ".txt")
|
||||
{
|
||||
ChangeTitle("Sideloading custom install.txt automatically.");
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
|
||||
{
|
||||
output += Sideloader.RunADBCommandsFromFile(path);
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
ChangeTitle("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
|
||||
@@ -1129,7 +1230,6 @@ namespace AndroidSideloader
|
||||
|
||||
ShowPrcOutput(output);
|
||||
listappsbtn();
|
||||
initListView();
|
||||
|
||||
}
|
||||
|
||||
@@ -1149,14 +1249,11 @@ namespace AndroidSideloader
|
||||
}
|
||||
List<String> newGamesList = new List<string>();
|
||||
private List<UploadGame> gamesToUpload = new List<UploadGame>();
|
||||
private List<UpdateGameData> gamesToAskForUpdate = new List<UpdateGameData>();
|
||||
private async void initListView()
|
||||
{
|
||||
gamesListView.Items.Clear();
|
||||
gamesListView.Columns.Clear();
|
||||
if (!File.Exists("installedPackages.json"))
|
||||
{
|
||||
File.Create("installedPackages.json");
|
||||
}
|
||||
foreach (string column in SideloaderRCLONE.gameProperties)
|
||||
{
|
||||
gamesListView.Columns.Add(column, 150);
|
||||
@@ -1170,9 +1267,9 @@ namespace AndroidSideloader
|
||||
char[] delims = new[] { '\r', '\n' };
|
||||
string[] packageList = result.Split(delims, StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] blacklist = new string[] { };
|
||||
if (File.Exists($"{Environment.CurrentDirectory}\\nouns\\blacklist.txt"))
|
||||
if (File.Exists($"{Properties.Settings.Default.MainDir}\\nouns\\blacklist.txt"))
|
||||
{
|
||||
blacklist = File.ReadAllLines($"{Environment.CurrentDirectory}\\nouns\\blacklist.txt");
|
||||
blacklist = File.ReadAllLines($"{Properties.Settings.Default.MainDir}\\nouns\\blacklist.txt");
|
||||
}
|
||||
List<ListViewItem> GameList = new List<ListViewItem>();
|
||||
List<String> rookieList = new List<String>();
|
||||
@@ -1183,20 +1280,19 @@ namespace AndroidSideloader
|
||||
List<String> installGames = packageList.ToList();
|
||||
List<String> blacklistItems = blacklist.ToList();
|
||||
|
||||
newGamesList = installGames.Except(rookieList).ToList();
|
||||
newGamesList = newGamesList.Except(blacklistItems).ToList();
|
||||
newGamesList = installGames.Except(rookieList).Except(blacklistItems).ToList();
|
||||
|
||||
foreach (string[] release in SideloaderRCLONE.games)
|
||||
{
|
||||
ListViewItem Game = new ListViewItem(release);
|
||||
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;
|
||||
gamesListView.Columns[1].Width = 265;
|
||||
gamesListView.Columns[5].Width = 59;
|
||||
gamesListView.Columns[2].Width = 100;
|
||||
gamesListView.Columns[3].Width = 50;
|
||||
gamesListView.Columns[4].Width = 100;
|
||||
gamesListView.Columns[5].Text = "Size (MB)";
|
||||
}
|
||||
foreach (string packagename in packageList)
|
||||
{
|
||||
@@ -1227,19 +1323,19 @@ namespace AndroidSideloader
|
||||
else
|
||||
Game.BackColor = Color.FromArgb(102, 77, 0);
|
||||
}
|
||||
bool dontget = false;
|
||||
|
||||
if (installedVersionInt > cloudVersionInt)
|
||||
{
|
||||
bool dontget = false;
|
||||
if (blacklist.Contains(packagename))
|
||||
dontget = true;
|
||||
string RlsName = Sideloader.PackageNametoGameName(packagename);
|
||||
string GameName = Sideloader.gameNameToSimpleName(RlsName);
|
||||
|
||||
if (!GameName.Contains("Beat Saber") && !dontget && !updatesnotified && !isworking && cloudVersionInt > 0)
|
||||
if (!dontget && !updatesnotified && !isworking)
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"You have a newer version of:\n\n{GameName}\n\nRSL can AUTOMATICALLY UPLOAD the clean files to a shared drive in the background,\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.", "CONTRIBUTE CLEAN FILES?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
await uploadGameAsync(GameName, packagename, installedVersionInt);
|
||||
}
|
||||
UpdateGameData gameData = new UpdateGameData(GameName, packagename, installedVersionInt);
|
||||
gamesToAskForUpdate.Add(gameData);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1254,12 +1350,26 @@ namespace AndroidSideloader
|
||||
}
|
||||
GameList.Add(Game);
|
||||
}
|
||||
|
||||
updatesnotified = true;
|
||||
|
||||
ListViewItem[] arr = GameList.ToArray();
|
||||
gamesListView.BeginUpdate();
|
||||
gamesListView.Items.AddRange(arr);
|
||||
gamesListView.EndUpdate();
|
||||
|
||||
//This is for games that we already have on rookie and user has an update
|
||||
foreach (UpdateGameData gameData in gamesToAskForUpdate)
|
||||
{
|
||||
if (!updatesnotified)
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"You have a newer version of:\n\n{gameData.GameName}\n\nRSL can AUTOMATICALLY UPLOAD the clean files to a shared drive in the background,\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.", "CONTRIBUTE CLEAN FILES?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
await extractAndPrepareGameToUploadAsync(gameData.GameName, gameData.Packagename, gameData.InstalledVersionInt);
|
||||
}
|
||||
}
|
||||
}
|
||||
//This is for games that are not blacklisted and we dont have on rookie
|
||||
/*foreach (string newGamesToUpload in newGamesList)
|
||||
{
|
||||
string RlsName = Sideloader.PackageNametoGameName(newGamesToUpload);
|
||||
@@ -1281,7 +1391,6 @@ namespace AndroidSideloader
|
||||
}
|
||||
|
||||
newGamesList.Clear();*/
|
||||
updatesnotified = true;
|
||||
if (!isworking && gamesToUpload.Count > 0)
|
||||
{
|
||||
ChangeTitle("Uploading to shared drive, you can continue to use Rookie while it uploads in the background.");
|
||||
@@ -1298,13 +1407,12 @@ namespace AndroidSideloader
|
||||
if (File.Exists($"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion}.zip"))
|
||||
File.Delete($"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion}.zip");
|
||||
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
|
||||
string cmd = $"7z a \"{game.Uploadgamename} v{game.Uploadversion}.zip\" .\\{game.Pckgcommand}\\*";
|
||||
string cmd = $"7z a \"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion}.zip\" .\\{game.Pckgcommand}\\*";
|
||||
ChangeTitle("Zipping extracted application...");
|
||||
ADB.RunCommandToString(cmd, path);
|
||||
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{game.Pckgcommand}", true);
|
||||
ChangeTitle("Uploading to drive, you may continue to use Rookie while it uploads.");
|
||||
RCLONE.runRcloneCommand(game.Uploadcommand);
|
||||
FlexibleMessageBox.Show($"Upload of {game.Uploadgamename} is complete! Thank you for your contribution!");
|
||||
File.Delete($"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion}.zip");
|
||||
|
||||
});
|
||||
@@ -1326,7 +1434,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
}
|
||||
|
||||
private async Task uploadGameAsync(string GameName, string packagename, ulong installedVersionInt)
|
||||
private async Task extractAndPrepareGameToUploadAsync(string GameName, string packagename, ulong installedVersionInt)
|
||||
{
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
Thread t1 = new Thread(() =>
|
||||
@@ -1541,11 +1649,14 @@ without him none of this would be possible
|
||||
if (reset)
|
||||
{
|
||||
remotesList.SelectedIndex--;
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
initListView();
|
||||
}
|
||||
if (remotesList.Items.Count > remotesList.SelectedIndex && !reset)
|
||||
{
|
||||
remotesList.SelectedIndex++;
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
initListView();
|
||||
steps++;
|
||||
}
|
||||
});
|
||||
@@ -1559,7 +1670,6 @@ without him none of this would be possible
|
||||
|
||||
string namebox = gamesListView.SelectedItems[0].ToString();
|
||||
string nameboxtranslated = Sideloader.gameNameToSimpleName(namebox);
|
||||
ChangeTitle($"Checking filesize of {nameboxtranslated}...");
|
||||
long selectedGamesSize = 0;
|
||||
int count = 0;
|
||||
string[] gamesToDownload;
|
||||
@@ -1571,7 +1681,6 @@ without him none of this would be possible
|
||||
gamesToDownload[i] = gamesListView.SelectedItems[i].SubItems[SideloaderRCLONE.ReleaseNameIndex].Text;
|
||||
}
|
||||
else return;
|
||||
|
||||
bool HadError = false;
|
||||
Thread gameSizeThread = new Thread(() =>
|
||||
{
|
||||
@@ -1605,13 +1714,6 @@ without him none of this would be possible
|
||||
{
|
||||
game = "the selected games";
|
||||
}
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"Are you sure you want to download {game}? The size is {String.Format("{0:0.00}", (double)selectedGamesSize)} MB", "Are you sure?", MessageBoxButtons.YesNo);
|
||||
ChangeTitle($"");
|
||||
if (dialogResult != DialogResult.Yes)
|
||||
{
|
||||
ChangeTitle("");
|
||||
return;
|
||||
}
|
||||
isinstalling = true;
|
||||
//Add games to the queue
|
||||
for (int i = 0; i < gamesToDownload.Length; i++)
|
||||
@@ -1779,7 +1881,7 @@ without him none of this would be possible
|
||||
CurrAPK = file;
|
||||
CurrPCKG = packagename;
|
||||
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
|
||||
t.Interval = 60000; // 60 seconds to fail
|
||||
t.Interval = 150000; // 150 seconds to fail
|
||||
t.Tick += new EventHandler(timer_Tick4);
|
||||
t.Start();
|
||||
Thread apkThread = new Thread(() =>
|
||||
@@ -1812,7 +1914,7 @@ without him none of this would be possible
|
||||
}
|
||||
|
||||
}
|
||||
ChangeTitle($"Installation of {gameName} completed....");
|
||||
ChangeTitle($"Installation of {gameName} completed.");
|
||||
}
|
||||
if (Properties.Settings.Default.deleteAllAfterInstall)
|
||||
{
|
||||
@@ -1824,8 +1926,9 @@ without him none of this would be possible
|
||||
gamesQueueList.RemoveAt(0);
|
||||
gamesQueListBox.DataSource = null;
|
||||
gamesQueListBox.DataSource = gamesQueueList;
|
||||
ChangeTitlebarToDevice();
|
||||
showAvailableSpace();
|
||||
|
||||
ChangeTitle("");
|
||||
}
|
||||
}
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
@@ -1848,14 +1951,10 @@ without him none of this would be possible
|
||||
if (!timerticked)
|
||||
{
|
||||
timerticked = true;
|
||||
string[] blacklist = File.ReadAllLines($"{Environment.CurrentDirectory}\\installedPackages.json");
|
||||
bool isinstalled = false;
|
||||
foreach (string blacklistpckg in blacklist)
|
||||
if (Properties.Settings.Default.InstalledApps.Contains(CurrPCKG))
|
||||
{
|
||||
if (blacklistpckg.Contains(CurrPCKG))
|
||||
{
|
||||
isinstalled = true;
|
||||
}
|
||||
isinstalled = true;
|
||||
}
|
||||
if (isinstalled)
|
||||
{
|
||||
@@ -1863,21 +1962,19 @@ without him none of this would be possible
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("In place upgrade has failed.\n\nThis means the app must be uninstalled first before updating.\nRookie can attempt to do this while retaining your savedata.\nWhile the vast majority of games can be backed up there are some exceptions\n(we don't know which apps can't be backed up as there is no list online)\n\nDo you want Rookie to uninstall and reinstall the app automatically?", "In place upgrade failed", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.OK)
|
||||
{
|
||||
ChangeTitle("Preforming reinstall, please wait...");
|
||||
ChangeTitle("Performing reinstall, please wait...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
ADB.RunAdbCommandToString($"pull /sdcard/Android/data/{CurrPCKG} \"{Environment.CurrentDirectory}\"");
|
||||
ADB.RunAdbCommandToString($"shell pm uninstall {CurrPCKG}");
|
||||
output += ADB.RunAdbCommandToString($"install -g -r \"{CurrAPK}\"");
|
||||
output += ADB.RunAdbCommandToString($"install -g \"{CurrAPK}\"");
|
||||
ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{CurrPCKG}\" /sdcard/Android/data/");
|
||||
listappsbtn();
|
||||
initListView();
|
||||
|
||||
timerticked = false;
|
||||
if (Directory.Exists($"{Environment.CurrentDirectory}\\{CurrPCKG}"))
|
||||
Directory.Delete($"{Environment.CurrentDirectory}\\{CurrPCKG}", true);
|
||||
ChangeTitle("");
|
||||
ShowPrcOutput(output);
|
||||
return;
|
||||
}
|
||||
|
||||
else
|
||||
@@ -1891,6 +1988,7 @@ without him none of this would be possible
|
||||
}
|
||||
else
|
||||
{
|
||||
timerticked = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1927,7 +2025,7 @@ without him none of this would be possible
|
||||
}
|
||||
else if (newGamesList.Count > 0 && !Properties.Settings.Default.UploadedGameList)
|
||||
{
|
||||
var res = FlexibleMessageBox.Show(this, "Please share game list bla bla bla for future patch bla ", "upload game list",
|
||||
var res = FlexibleMessageBox.Show(this, "For August 2021, we'd like to grab a list of the apps installed to make updates work better.\nDo that now?", "Upload game list?",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
|
||||
if (res == DialogResult.Yes)
|
||||
{
|
||||
@@ -2028,17 +2126,6 @@ without him none of this would be possible
|
||||
private void remotesList_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
remotesList.Invoke(() => { currentRemote = "VRP-mirror" + remotesList.SelectedItem.ToString(); });
|
||||
if (remotesList.Text.Contains("VRP"))
|
||||
{
|
||||
string lines = remotesList.Text;
|
||||
string pattern = "VRP-mirror";
|
||||
string replacement = "";
|
||||
Regex rgx = new Regex(pattern);
|
||||
string result = rgx.Replace(lines, replacement);
|
||||
char[] delims = new[] { '\r', '\n' };
|
||||
string[] strings = result.Split(delims, StringSplitOptions.RemoveEmptyEntries);
|
||||
remotesList.Text = result;
|
||||
}
|
||||
}
|
||||
|
||||
private void QuestOptionsButton_Click(object sender, EventArgs e)
|
||||
@@ -2073,7 +2160,7 @@ without him none of this would be possible
|
||||
else
|
||||
{
|
||||
lvwColumnSorter.SortColumn = e.Column;
|
||||
if (e.Column == 6)
|
||||
if (e.Column == 4)
|
||||
{
|
||||
lvwColumnSorter.Order = SortOrder.Descending;
|
||||
}
|
||||
@@ -2235,28 +2322,7 @@ without him none of this would be possible
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
}
|
||||
if (keyData == (Keys.F11))
|
||||
if (File.Exists($"{Properties.Settings.Default.CurrentLogPath}"))
|
||||
{
|
||||
RCLONE.runRcloneCommand($"copy \"{Properties.Settings.Default.CurrentLogPath}\" RSL-debuglogs:DebugLogs");
|
||||
FlexibleMessageBox.Show($"Your debug log has been copied to the server. Please mention your DebugLog ID ({Properties.Settings.Default.CurrentLogName}) to the Mods (it has been automatically copied to your clipboard).");
|
||||
Clipboard.SetText(Properties.Settings.Default.CurrentLogName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (keyData == (Keys.F12))
|
||||
{
|
||||
if (File.Exists($"{Properties.Settings.Default.CurrentCrashPath}"))
|
||||
{
|
||||
RCLONE.runRcloneCommand($"copy \"{Properties.Settings.Default.CurrentCrashPath}\" RSL-debuglogs:CrashLogs");
|
||||
FlexibleMessageBox.Show($"Your CrashLog has been copied to the server. Please mention your DebugLog ID ({Properties.Settings.Default.CurrentCrashName}) to the Mods (it has been automatically copied to your clipboard).");
|
||||
Clipboard.SetText(Properties.Settings.Default.CurrentCrashName);
|
||||
|
||||
}
|
||||
else
|
||||
FlexibleMessageBox.Show("No CrashLog found in Rookie directory.");
|
||||
}
|
||||
|
||||
|
||||
|
||||
12
Properties/Settings.Designer.cs
generated
12
Properties/Settings.Designer.cs
generated
@@ -634,5 +634,17 @@ namespace AndroidSideloader.Properties {
|
||||
this["UploadedGameList"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string GlobalUsername {
|
||||
get {
|
||||
return ((string)(this["GlobalUsername"]));
|
||||
}
|
||||
set {
|
||||
this["GlobalUsername"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,5 +155,8 @@
|
||||
<Setting Name="UploadedGameList" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="GlobalUsername" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
102
QuestForm.Designer.cs
generated
102
QuestForm.Designer.cs
generated
@@ -59,16 +59,17 @@ namespace AndroidSideloader
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.ResolutionLabel = new System.Windows.Forms.Label();
|
||||
this.GlobalUsername = new System.Windows.Forms.TextBox();
|
||||
this.FOVy = new System.Windows.Forms.TextBox();
|
||||
this.FOVx = new System.Windows.Forms.TextBox();
|
||||
this.UsrBox = new System.Windows.Forms.TextBox();
|
||||
this.ResBox = new System.Windows.Forms.TextBox();
|
||||
this.TextureResTextBox = new System.Windows.Forms.TextBox();
|
||||
this.QUEnable = new System.Windows.Forms.Button();
|
||||
this.WifiWake = new System.Windows.Forms.Button();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.QURfrRt = new System.Windows.Forms.ComboBox();
|
||||
this.RefreshRateComboBox = new System.Windows.Forms.ComboBox();
|
||||
this.WifiWake = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
@@ -213,14 +214,15 @@ namespace AndroidSideloader
|
||||
// button3
|
||||
//
|
||||
this.button3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.button3.Enabled = false;
|
||||
this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.5F);
|
||||
this.button3.ForeColor = System.Drawing.SystemColors.ButtonHighlight;
|
||||
this.button3.Location = new System.Drawing.Point(101, 702);
|
||||
this.button3.Location = new System.Drawing.Point(278, 700);
|
||||
this.button3.Name = "button3";
|
||||
this.button3.Size = new System.Drawing.Size(169, 25);
|
||||
this.button3.Size = new System.Drawing.Size(81, 25);
|
||||
this.button3.TabIndex = 17;
|
||||
this.button3.Text = "CUSTOM USER.JSON";
|
||||
this.button3.Text = "APPLY";
|
||||
this.button3.UseVisualStyleBackColor = false;
|
||||
this.button3.Click += new System.EventHandler(this.button3_Click);
|
||||
//
|
||||
@@ -230,11 +232,11 @@ namespace AndroidSideloader
|
||||
this.label12.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.label12.ForeColor = System.Drawing.Color.LightCyan;
|
||||
this.label12.Location = new System.Drawing.Point(93, 656);
|
||||
this.label12.Location = new System.Drawing.Point(121, 656);
|
||||
this.label12.Name = "label12";
|
||||
this.label12.Size = new System.Drawing.Size(185, 20);
|
||||
this.label12.Size = new System.Drawing.Size(128, 20);
|
||||
this.label12.TabIndex = 6;
|
||||
this.label12.Text = "Set custom user.json*";
|
||||
this.label12.Text = "Set username*";
|
||||
this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// label13
|
||||
@@ -243,11 +245,11 @@ namespace AndroidSideloader
|
||||
this.label13.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.label13.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.label13.ForeColor = System.Drawing.Color.LightSteelBlue;
|
||||
this.label13.Location = new System.Drawing.Point(53, 678);
|
||||
this.label13.Location = new System.Drawing.Point(83, 678);
|
||||
this.label13.Name = "label13";
|
||||
this.label13.Size = new System.Drawing.Size(265, 16);
|
||||
this.label13.Size = new System.Drawing.Size(204, 16);
|
||||
this.label13.TabIndex = 6;
|
||||
this.label13.Text = "*For games that don\'t work with QU settings.";
|
||||
this.label13.Text = "*For games not released by -QU.";
|
||||
this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// DeleteShots
|
||||
@@ -333,7 +335,7 @@ namespace AndroidSideloader
|
||||
"4"});
|
||||
this.CPUComboBox.Location = new System.Drawing.Point(13, 123);
|
||||
this.CPUComboBox.Name = "CPUComboBox";
|
||||
this.CPUComboBox.Size = new System.Drawing.Size(346, 28);
|
||||
this.CPUComboBox.Size = new System.Drawing.Size(346, 26);
|
||||
this.CPUComboBox.TabIndex = 2;
|
||||
this.CPUComboBox.Text = "Select CPU level (0 for default)";
|
||||
//
|
||||
@@ -355,7 +357,7 @@ namespace AndroidSideloader
|
||||
"4"});
|
||||
this.GPUComboBox.Location = new System.Drawing.Point(13, 94);
|
||||
this.GPUComboBox.Name = "GPUComboBox";
|
||||
this.GPUComboBox.Size = new System.Drawing.Size(346, 28);
|
||||
this.GPUComboBox.Size = new System.Drawing.Size(346, 26);
|
||||
this.GPUComboBox.TabIndex = 1;
|
||||
this.GPUComboBox.Text = "Select GPU level (0 for default)";
|
||||
//
|
||||
@@ -369,7 +371,7 @@ 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(59, 20);
|
||||
this.label7.Size = new System.Drawing.Size(56, 18);
|
||||
this.label7.TabIndex = 3;
|
||||
this.label7.Text = "Fov - X";
|
||||
this.label7.Visible = false;
|
||||
@@ -384,7 +386,7 @@ 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(59, 20);
|
||||
this.label8.Size = new System.Drawing.Size(55, 18);
|
||||
this.label8.TabIndex = 3;
|
||||
this.label8.Text = "Fov - Y";
|
||||
this.label8.Visible = false;
|
||||
@@ -399,7 +401,7 @@ namespace AndroidSideloader
|
||||
this.label9.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.label9.Location = new System.Drawing.Point(12, 583);
|
||||
this.label9.Name = "label9";
|
||||
this.label9.Size = new System.Drawing.Size(105, 20);
|
||||
this.label9.Size = new System.Drawing.Size(95, 18);
|
||||
this.label9.TabIndex = 3;
|
||||
this.label9.Text = "Refresh Rate";
|
||||
this.label9.Visible = false;
|
||||
@@ -414,7 +416,7 @@ namespace AndroidSideloader
|
||||
this.label6.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.label6.Location = new System.Drawing.Point(93, 484);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(185, 20);
|
||||
this.label6.Size = new System.Drawing.Size(173, 18);
|
||||
this.label6.TabIndex = 3;
|
||||
this.label6.Text = "Enter Custom Username";
|
||||
this.label6.Visible = false;
|
||||
@@ -429,7 +431,7 @@ namespace AndroidSideloader
|
||||
this.label5.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.label5.Location = new System.Drawing.Point(16, 434);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(362, 20);
|
||||
this.label5.Size = new System.Drawing.Size(337, 18);
|
||||
this.label5.TabIndex = 3;
|
||||
this.label5.Text = "Custom Resolution Width (Height auto calculated)";
|
||||
this.label5.Visible = false;
|
||||
@@ -444,10 +446,24 @@ namespace AndroidSideloader
|
||||
this.ResolutionLabel.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.ResolutionLabel.Location = new System.Drawing.Point(9, 180);
|
||||
this.ResolutionLabel.Name = "ResolutionLabel";
|
||||
this.ResolutionLabel.Size = new System.Drawing.Size(166, 20);
|
||||
this.ResolutionLabel.Size = new System.Drawing.Size(153, 18);
|
||||
this.ResolutionLabel.TabIndex = 3;
|
||||
this.ResolutionLabel.Text = "Resolution (0=default)";
|
||||
//
|
||||
// GlobalUsername
|
||||
//
|
||||
this.GlobalUsername.BackColor = global::AndroidSideloader.Properties.Settings.Default.TextBoxColor;
|
||||
this.GlobalUsername.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.GlobalUsername.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.GlobalUsername.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.GlobalUsername.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.GlobalUsername.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.GlobalUsername.Location = new System.Drawing.Point(12, 701);
|
||||
this.GlobalUsername.Name = "GlobalUsername";
|
||||
this.GlobalUsername.Size = new System.Drawing.Size(262, 24);
|
||||
this.GlobalUsername.TabIndex = 12;
|
||||
this.GlobalUsername.TextChanged += new System.EventHandler(this.GlobalUsername_TextChanged);
|
||||
//
|
||||
// FOVy
|
||||
//
|
||||
this.FOVy.BackColor = global::AndroidSideloader.Properties.Settings.Default.TextBoxColor;
|
||||
@@ -458,7 +474,7 @@ namespace AndroidSideloader
|
||||
this.FOVy.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.FOVy.Location = new System.Drawing.Point(189, 507);
|
||||
this.FOVy.Name = "FOVy";
|
||||
this.FOVy.Size = new System.Drawing.Size(169, 26);
|
||||
this.FOVy.Size = new System.Drawing.Size(169, 24);
|
||||
this.FOVy.TabIndex = 12;
|
||||
this.FOVy.Text = "0";
|
||||
this.FOVy.Visible = false;
|
||||
@@ -474,7 +490,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, 26);
|
||||
this.FOVx.Size = new System.Drawing.Size(169, 24);
|
||||
this.FOVx.TabIndex = 11;
|
||||
this.FOVx.Text = "0";
|
||||
this.FOVx.Visible = false;
|
||||
@@ -490,7 +506,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, 26);
|
||||
this.UsrBox.Size = new System.Drawing.Size(345, 24);
|
||||
this.UsrBox.TabIndex = 10;
|
||||
this.UsrBox.Text = "0";
|
||||
this.UsrBox.Visible = false;
|
||||
@@ -506,7 +522,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, 26);
|
||||
this.ResBox.Size = new System.Drawing.Size(345, 24);
|
||||
this.ResBox.TabIndex = 9;
|
||||
this.ResBox.Text = "0";
|
||||
this.ResBox.Visible = false;
|
||||
@@ -522,7 +538,7 @@ namespace AndroidSideloader
|
||||
this.TextureResTextBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.TextureResTextBox.Location = new System.Drawing.Point(13, 152);
|
||||
this.TextureResTextBox.Name = "TextureResTextBox";
|
||||
this.TextureResTextBox.Size = new System.Drawing.Size(167, 26);
|
||||
this.TextureResTextBox.Size = new System.Drawing.Size(167, 24);
|
||||
this.TextureResTextBox.TabIndex = 3;
|
||||
this.TextureResTextBox.Text = "0";
|
||||
//
|
||||
@@ -544,6 +560,23 @@ namespace AndroidSideloader
|
||||
this.QUEnable.Visible = false;
|
||||
this.QUEnable.Click += new System.EventHandler(this.QUEnable_Click);
|
||||
//
|
||||
// WifiWake
|
||||
//
|
||||
this.WifiWake.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
|
||||
this.WifiWake.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.WifiWake.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.WifiWake.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.WifiWake.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.WifiWake.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.WifiWake.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.WifiWake.Location = new System.Drawing.Point(189, 180);
|
||||
this.WifiWake.Name = "WifiWake";
|
||||
this.WifiWake.Size = new System.Drawing.Size(170, 25);
|
||||
this.WifiWake.TabIndex = 4;
|
||||
this.WifiWake.Text = "ENABLE WIFI WAKE";
|
||||
this.WifiWake.UseVisualStyleBackColor = false;
|
||||
this.WifiWake.Click += new System.EventHandler(this.WifiWake_Click);
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
|
||||
@@ -578,7 +611,7 @@ namespace AndroidSideloader
|
||||
"120"});
|
||||
this.QURfrRt.Location = new System.Drawing.Point(13, 555);
|
||||
this.QURfrRt.Name = "QURfrRt";
|
||||
this.QURfrRt.Size = new System.Drawing.Size(170, 28);
|
||||
this.QURfrRt.Size = new System.Drawing.Size(170, 26);
|
||||
this.QURfrRt.TabIndex = 13;
|
||||
this.QURfrRt.Text = "0";
|
||||
this.QURfrRt.Visible = false;
|
||||
@@ -600,27 +633,10 @@ namespace AndroidSideloader
|
||||
"120"});
|
||||
this.RefreshRateComboBox.Location = new System.Drawing.Point(13, 65);
|
||||
this.RefreshRateComboBox.Name = "RefreshRateComboBox";
|
||||
this.RefreshRateComboBox.Size = new System.Drawing.Size(346, 28);
|
||||
this.RefreshRateComboBox.Size = new System.Drawing.Size(346, 26);
|
||||
this.RefreshRateComboBox.TabIndex = 0;
|
||||
this.RefreshRateComboBox.Text = "Select refresh rate";
|
||||
//
|
||||
// WifiWake
|
||||
//
|
||||
this.WifiWake.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
|
||||
this.WifiWake.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.WifiWake.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.WifiWake.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.WifiWake.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.WifiWake.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.WifiWake.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.WifiWake.Location = new System.Drawing.Point(189, 180);
|
||||
this.WifiWake.Name = "WifiWake";
|
||||
this.WifiWake.Size = new System.Drawing.Size(170, 25);
|
||||
this.WifiWake.TabIndex = 4;
|
||||
this.WifiWake.Text = "ENABLE WIFI WAKE";
|
||||
this.WifiWake.UseVisualStyleBackColor = false;
|
||||
this.WifiWake.Click += new System.EventHandler(this.WifiWake_Click);
|
||||
//
|
||||
// QuestForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
@@ -654,6 +670,7 @@ namespace AndroidSideloader
|
||||
this.Controls.Add(this.label6);
|
||||
this.Controls.Add(this.label5);
|
||||
this.Controls.Add(this.ResolutionLabel);
|
||||
this.Controls.Add(this.GlobalUsername);
|
||||
this.Controls.Add(this.FOVy);
|
||||
this.Controls.Add(this.FOVx);
|
||||
this.Controls.Add(this.UsrBox);
|
||||
@@ -719,6 +736,7 @@ namespace AndroidSideloader
|
||||
private Label label15;
|
||||
private Label label16;
|
||||
private Button WifiWake;
|
||||
private TextBox GlobalUsername;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
28
QuestForm.cs
28
QuestForm.cs
@@ -210,6 +210,8 @@ namespace AndroidSideloader
|
||||
{
|
||||
if (Properties.Settings.Default.delsh)
|
||||
DeleteShots.Checked = true;
|
||||
else
|
||||
DeleteShots.Checked = false;
|
||||
if (Properties.Settings.Default.QUsett)
|
||||
{
|
||||
ResBox.Text = Properties.Settings.Default.QUres;
|
||||
@@ -219,10 +221,9 @@ namespace AndroidSideloader
|
||||
QURfrRt.Text = Properties.Settings.Default.QUhz;
|
||||
QUon.Checked = true;
|
||||
if (settingsexist)
|
||||
QUSon = true;
|
||||
|
||||
|
||||
QUSon = true;
|
||||
}
|
||||
GlobalUsername.Text = Properties.Settings.Default.GlobalUsername;
|
||||
}
|
||||
|
||||
private void ResBox_TextChanged(object sender, EventArgs e)
|
||||
@@ -308,8 +309,15 @@ namespace AndroidSideloader
|
||||
}
|
||||
private void button3_Click(object sender, EventArgs e)
|
||||
{
|
||||
UsernameForm Form = new UsernameForm();
|
||||
Form.Show();
|
||||
if (GlobalUsername.Text.Contains(" "))
|
||||
{
|
||||
MessageBox.Show("Usernames with a space are not permitted.", "Detected a space in username!");
|
||||
}
|
||||
else
|
||||
{
|
||||
ADB.RunAdbCommandToString($"shell settings put global username {GlobalUsername.Text}");
|
||||
MessageBox.Show($"Username set as {GlobalUsername.Text}", "Success");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -336,5 +344,15 @@ namespace AndroidSideloader
|
||||
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_enabled 1");
|
||||
MessageBox.Show("Wake on Wifi enabled!\n\nNOTE: This requires having wireless ADB enabled to work. (Obviously)");
|
||||
}
|
||||
|
||||
private void GlobalUsername_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (GlobalUsername.TextLength > 0)
|
||||
button3.Enabled = true;
|
||||
else
|
||||
button3.Enabled = false;
|
||||
Properties.Settings.Default.GlobalUsername = GlobalUsername.Text;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,9 +105,9 @@ namespace AndroidSideloader
|
||||
prcoutput.Output = output;
|
||||
prcoutput.Error = error;
|
||||
}
|
||||
if (!output.Contains("Game Name;Release Name;") && !output.Contains("package:"))
|
||||
if (!output.Contains("Game Name;Release Name;") && !output.Contains("package:") && !output.Contains(".meta"))
|
||||
Logger.Log($"Rclone error: {error}\nRclone Output: {output}");
|
||||
if (error.Contains("There is not enough space"))
|
||||
if (output.Contains("There is not enough space"))
|
||||
{
|
||||
FlexibleMessageBox.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");
|
||||
}
|
||||
|
||||
@@ -132,19 +132,11 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
ProcessOutput output = new ProcessOutput("", "");
|
||||
|
||||
string packageName = Sideloader.gameNameToPackageName(GameName);
|
||||
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"Are you sure you want to uninstall {packageName}? this CANNOT be undone!", "WARNING!", MessageBoxButtons.YesNo);
|
||||
if (dialogResult != DialogResult.Yes)
|
||||
return output;
|
||||
|
||||
output = ADB.UninstallPackage(packageName);
|
||||
|
||||
//remove both data and obb if there is any
|
||||
Sideloader.RemoveFolder("/sdcard/Android/obb/" + packageName);
|
||||
Sideloader.RemoveFolder("/sdcard/Android/data/" + packageName);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -250,11 +242,11 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
{
|
||||
if (!File.Exists("Sideloader Launcher.exe"))
|
||||
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/Sideloader%20Launcher.exe", "Sideloader Launcher.exe");
|
||||
|
||||
if (!Directory.Exists(ADB.adbFolderPath)) //if there is no adb folder, download and extract
|
||||
if (!File.Exists($"{Properties.Settings.Default.MainDir}\\adb\\aug2021.txt") || !File.Exists("C:\\RSL\\2.8.2\\ADB\\aug2021.txt")) //if adb is not updated, download and auto extract
|
||||
{
|
||||
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/adb.7z", "adb.7z");
|
||||
Utilities.Zip.ExtractFile(Environment.CurrentDirectory + "\\adb.7z", Environment.CurrentDirectory);
|
||||
Utilities.Zip.ExtractFile(Environment.CurrentDirectory + "\\adb.7z", "C:\\RSL\\2.8.2\\");
|
||||
File.Delete("adb.7z");
|
||||
}
|
||||
|
||||
|
||||
@@ -26,9 +26,9 @@ namespace AndroidSideloader
|
||||
|
||||
public static int GameNameIndex = 0;
|
||||
public static int ReleaseNameIndex = 1;
|
||||
public static int ReleaseAPKPathIndex = 2;
|
||||
public static int PackageNameIndex = 3;
|
||||
public static int VersionCodeIndex = 4;
|
||||
public static int PackageNameIndex = 2;
|
||||
public static int VersionCodeIndex = 3;
|
||||
public static int ReleaseAPKPathIndex = 4;
|
||||
public static int VersionNameIndex = 5;
|
||||
|
||||
public static List<string> gameProperties = new List<string>();
|
||||
@@ -83,14 +83,12 @@ namespace AndroidSideloader
|
||||
|
||||
public static void initGames(string remote)
|
||||
{
|
||||
if (remote.Contains("08"))
|
||||
Program.form.SwitchMirrors();
|
||||
gameProperties.Clear();
|
||||
games.Clear();
|
||||
string tempGameList = RCLONE.runRcloneCommand($"cat \"{remote}:{RcloneGamesFolder}/GameList.txt\"").Output;
|
||||
string tempGameList = RCLONE.runRcloneCommand($"cat \"{remote}:{RcloneGamesFolder}/VRP-GameList.txt\"").Output;
|
||||
if (MainForm.debugMode)
|
||||
{
|
||||
File.WriteAllText("GamesList.txt", tempGameList);
|
||||
File.WriteAllText("VRP-GamesList.txt", tempGameList);
|
||||
}
|
||||
string gamePropertiesLine = Utilities.StringUtilities.RemoveEverythingAfterFirst(tempGameList, "\n");
|
||||
|
||||
@@ -98,17 +96,8 @@ namespace AndroidSideloader
|
||||
{
|
||||
gameProperties.Add(gameProperty);
|
||||
}
|
||||
gameProperties.Add("Last Updated");
|
||||
|
||||
|
||||
tempGameList = Utilities.StringUtilities.RemoveEverythingBeforeFirst(tempGameList, "\n");
|
||||
|
||||
List<rcloneFolder> gameFolders = JsonConvert.DeserializeObject<List<rcloneFolder>>(RCLONE.runRcloneCommand($"lsjson \"{remote}:{RcloneGamesFolder}\"").Output);
|
||||
if (gameFolders == null || gameFolders.Count < 1)
|
||||
{
|
||||
Program.form.SwitchMirrors();
|
||||
gameFolders = JsonConvert.DeserializeObject<List<rcloneFolder>>(RCLONE.runRcloneCommand($"lsjson \"{remote}:{RcloneGamesFolder}\"").Output);
|
||||
}
|
||||
|
||||
|
||||
foreach (string game in tempGameList.Split('\n'))
|
||||
@@ -116,20 +105,8 @@ namespace AndroidSideloader
|
||||
if (game.Length > 1)
|
||||
{
|
||||
string[] splitGame = game.Split(';');
|
||||
|
||||
games.Add(splitGame);
|
||||
//gameFolder.find();
|
||||
Array.Resize(ref splitGame, splitGame.Length + 1);
|
||||
|
||||
var gameSynced = gameFolders.Exists((predicate) => predicate.Path == splitGame[1]);
|
||||
if (gameSynced)
|
||||
{
|
||||
var gameFolder = gameFolders.Find((predicate) => predicate.Path == splitGame[1]);
|
||||
//splitGame[6] = gameFolder.ModTime;
|
||||
string gametime = Utilities.StringUtilities.RemoveEverythingAfterLast(gameFolder.ModTime, ":");
|
||||
gametime = gametime.Replace("T", " ");
|
||||
splitGame[splitGame.Length - 1] = gametime;
|
||||
games.Add(splitGame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace AndroidSideloader
|
||||
private static string RawGitHubUrl;
|
||||
private static string GitHubUrl;
|
||||
|
||||
static readonly public string LocalVersion = "2.8.2";
|
||||
static readonly public string LocalVersion = "2.9";
|
||||
public static string currentVersion = string.Empty;
|
||||
public static string changelog = string.Empty;
|
||||
|
||||
|
||||
22
Utilities/UpdateGameData.cs
Normal file
22
Utilities/UpdateGameData.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AndroidSideloader.Utilities
|
||||
{
|
||||
class UpdateGameData
|
||||
{
|
||||
public UpdateGameData(String gameName, String packageName, ulong installedVersionInt)
|
||||
{
|
||||
this.GameName = gameName;
|
||||
this.Packagename = packageName;
|
||||
this.InstalledVersionInt = installedVersionInt;
|
||||
}
|
||||
public string GameName { get; set; }
|
||||
public string Packagename { get; set; }
|
||||
|
||||
public ulong InstalledVersionInt { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -8,29 +8,24 @@ namespace AndroidSideloader.Utilities
|
||||
{
|
||||
class UploadGame
|
||||
{
|
||||
private string uploadcommand;
|
||||
public string Uploadcommand
|
||||
public UploadGame(string Uploadcommand, string Pckgcommand, string Uploadgamename, ulong Uploadversion)
|
||||
{
|
||||
get => uploadcommand;
|
||||
set => uploadcommand = value;
|
||||
}
|
||||
private string pckgcommand;
|
||||
public string Pckgcommand
|
||||
{
|
||||
get => pckgcommand;
|
||||
set => pckgcommand = value;
|
||||
this.Uploadcommand = Uploadcommand;
|
||||
this.Pckgcommand = Pckgcommand;
|
||||
this.Uploadgamename = Uploadgamename;
|
||||
this.Uploadversion = Uploadversion;
|
||||
}
|
||||
private string uploadgamename;
|
||||
public string Uploadgamename
|
||||
public UploadGame()
|
||||
{
|
||||
get => uploadgamename;
|
||||
set => uploadgamename = value;
|
||||
}
|
||||
private ulong uploadversion;
|
||||
public ulong Uploadversion
|
||||
{
|
||||
get => uploadversion;
|
||||
set => uploadversion = value;
|
||||
|
||||
}
|
||||
public string Uploadcommand { get; set; }
|
||||
|
||||
public string Pckgcommand { get; set; }
|
||||
|
||||
public string Uploadgamename { get; set; }
|
||||
|
||||
public ulong Uploadversion { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,26 +1,32 @@
|
||||
RSL 2.9
|
||||
|
||||
RSL 2.8.2
|
||||
+ Updated ADB zip on repo and added a verification
|
||||
text file to ensure all users are on newest ADB,
|
||||
this should fix most obb issues. Upon first launch
|
||||
after this update Rookie will automatically obtain
|
||||
the latest ADB via this zip (7MB).
|
||||
|
||||
+ Added automatic upload to Google shared drive
|
||||
for clean game files donation.
|
||||
+ Added uploading GIF for duration of upload.
|
||||
+ Added warning messages when user attempts
|
||||
to close Rookie while games are download, installing,
|
||||
or uploading.
|
||||
= Threaded clean file zipping and uploading
|
||||
so user can continue to use Rookie while game
|
||||
is uploading.
|
||||
+ Added AAPT to repo along with a timer + logic to
|
||||
detect packagename for automatic reinstall when drag
|
||||
and dropped installs fail.
|
||||
|
||||
+ Implemented Size(MB) column to see app size prior
|
||||
to clicking Download and Install.
|
||||
|
||||
P.S. We are looking for volunteers for the next
|
||||
beta which will automatically detect new games
|
||||
installed on user's headset and suggest them for
|
||||
donation. Message https://t.me/Harryeffingpotter or
|
||||
https://t.me/pmowpmow on Telegram to join the beta
|
||||
test!
|
||||
= Cleaned up automatic reinstall on apk installation
|
||||
failure for Download and Install, it should work for
|
||||
most users now.
|
||||
|
||||
= Adjusted code for mirror switching, should fix failure
|
||||
to load gameslist whatsoever on dead mirrors.
|
||||
|
||||
= Fixed issue where after installing a game RSL would
|
||||
ask user to donate same clean files again. RSL will now
|
||||
only ask once per program load, as intended.
|
||||
|
||||
- Removed filesize confirmation dialog when clicking
|
||||
download and install.
|
||||
|
||||
- Removed columns that were useless to users.
|
||||
|
||||
HFP
|
||||
|
||||
|
||||
P.S MOVED PGP SIGNATURE TO CHANGELOGHISTORY.TXT @
|
||||
https://github.com/nerdunit/androidsideloader
|
||||
Reference in New Issue
Block a user