Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f99c57eb60 | ||
|
|
d7074325f4 | ||
|
|
1ba6fe5260 | ||
|
|
ee6d62950d | ||
|
|
f8fb2b5483 | ||
|
|
164dc070bd | ||
|
|
7539b5c507 | ||
|
|
68be50b26e | ||
|
|
6cbe06f394 | ||
|
|
a9f2db6380 | ||
|
|
4a492ffcd2 | ||
|
|
b5c66b50b9 | ||
|
|
ebfe5ace65 | ||
|
|
c242dc6f6d | ||
|
|
bcfcc43956 | ||
|
|
ab6507965b | ||
|
|
78b816c5e6 |
59
ADB.cs
59
ADB.cs
@@ -14,7 +14,7 @@ namespace AndroidSideloader
|
||||
class ADB
|
||||
{
|
||||
static Process adb = new Process();
|
||||
public static string adbFolderPath = "C:\\RSL\\2.8.2\\ADB";
|
||||
public static string adbFolderPath = "C:\\RSL\\platform-tools";
|
||||
public static string adbFilePath = adbFolderPath + "\\adb.exe";
|
||||
public static string DeviceID = "";
|
||||
public static string package = "";
|
||||
@@ -91,10 +91,6 @@ namespace AndroidSideloader
|
||||
public static ProcessOutput RunAdbCommandToStringWOADB(string result, string path)
|
||||
{
|
||||
string command = result;
|
||||
Properties.Settings.Default.ADBFolder = adbFolderPath;
|
||||
Properties.Settings.Default.ADBPath = adbFilePath;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
string logcmd = command;
|
||||
if (logcmd.Contains(Environment.CurrentDirectory))
|
||||
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
|
||||
@@ -161,10 +157,6 @@ namespace AndroidSideloader
|
||||
public static ProcessOutput RunCommandToString(string result, string path = "")
|
||||
{
|
||||
string command = result;
|
||||
Properties.Settings.Default.ADBFolder = adbFolderPath;
|
||||
Properties.Settings.Default.ADBPath = adbFilePath;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
string logcmd = command;
|
||||
if (logcmd.Contains(Environment.CurrentDirectory))
|
||||
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
|
||||
@@ -385,39 +377,34 @@ namespace AndroidSideloader
|
||||
if (dialogResult2 == DialogResult.Yes)
|
||||
ADB.WakeDevice();
|
||||
}
|
||||
if (out2.Contains($"INSTALL_FAILED_UPDATE_INCOMPATIBLE") || out2.Contains("INSTALL_FAILED_VERSION_DOWNGRADE") || out2.Contains("signatures do not match") || out2.Contains("failed to install"))
|
||||
if (out2.Contains($"signatures do not match previously") || out2.Contains("INSTALL_FAILED_VERSION_DOWNGRADE") || out2.Contains("signatures do not match") || out2.Contains("failed to install"))
|
||||
{
|
||||
ret.Error = string.Empty;
|
||||
ret.Output = string.Empty;
|
||||
|
||||
|
||||
FlexibleMessageBox.Show($"In place upgrade for {packagename} failed. We will need to upgrade by uninstalling, and keeping savedata isn't guaranteed. Continue?", "UPGRADE FAILED!", MessageBoxButtons.OKCancel);
|
||||
|
||||
string date_str = DateTime.Today.ToString("yyyy.MM.dd");
|
||||
string CurrBackups = Path.Combine(BackupFolder, date_str);
|
||||
|
||||
|
||||
FlexibleMessageBox.Show($"Searching for save files...", "Searching!", MessageBoxButtons.OK);
|
||||
if (Directory.Exists($"/sdcard/Android/data/{packagename}"))
|
||||
{
|
||||
FlexibleMessageBox.Show($"Trying to backup save to Documents\\Rookie Backups\\{date_str}(YYYY.MM.DD)\\{packagename}", "Save files found", MessageBoxButtons.OK);
|
||||
Directory.CreateDirectory(CurrBackups);
|
||||
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/data/{packagename}\" \"{CurrBackups}\"");
|
||||
}
|
||||
else
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"No savedata found! Continue with the uninstall!", "None Found", MessageBoxButtons.OK);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
ADB.WakeDevice();
|
||||
ret += ADB.RunAdbCommandToString("shell pm uninstall " + package);
|
||||
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
|
||||
if (!Properties.Settings.Default.AutoReinstall)
|
||||
{
|
||||
DialogResult dialogResult1 = FlexibleMessageBox.Show("In place upgrade has failed. Rookie can attempt to backup your save data and\nreinstall the game automatically, however " +
|
||||
"some games do not store their saves\nin an accessible location(less than 5%). Continue with reinstall?", "In place upgrade failed.", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult1 == DialogResult.Cancel)
|
||||
return ret;
|
||||
}
|
||||
|
||||
Program.form.ChangeTitle("Performing reinstall, please wait...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
ADB.RunAdbCommandToString($"pull /sdcard/Android/data/{MainForm.CurrPCKG} \"{Environment.CurrentDirectory}\"");
|
||||
Program.form.ChangeTitle("Uinstalling game...");
|
||||
Sideloader.UninstallGame(MainForm.CurrPCKG);
|
||||
Program.form.ChangeTitle("Reinstalling Game");
|
||||
ret += ADB.RunAdbCommandToString($"install -g \"{path}\"");
|
||||
ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{MainForm.CurrPCKG}\" /sdcard/Android/data/");
|
||||
if (Directory.Exists($"{Environment.CurrentDirectory}\\{MainForm.CurrPCKG}"))
|
||||
Directory.Delete($"{Environment.CurrentDirectory}\\{MainForm.CurrPCKG}", true);
|
||||
|
||||
Program.form.ChangeTitle(" \n\n");
|
||||
return ret;
|
||||
}
|
||||
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
|
||||
}
|
||||
string gamenameforQU = Sideloader.PackageNametoGameName(packagename);
|
||||
if (Properties.Settings.Default.QUturnedon)
|
||||
|
||||
@@ -269,6 +269,7 @@
|
||||
<None Include="Resources\battery1.png" />
|
||||
<None Include="Resources\ajax-loader.gif" />
|
||||
<Content Include="Resources\bluekey.png" />
|
||||
<None Include="Resources\gametoupload.png" />
|
||||
<Content Include="Resources\redkey.png" />
|
||||
<None Include="Resources\greenkey.png" />
|
||||
<None Include="Resources\orangekey.png" />
|
||||
|
||||
@@ -170,6 +170,9 @@
|
||||
<setting name="lastTimeShared" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="AutoReinstall" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</AndroidSideloader.Properties.Settings>
|
||||
<AndroidADB.Sideloader.Properties.Settings>
|
||||
<setting name="checkForUpdates" serializeAs="String">
|
||||
|
||||
@@ -1,4 +1,169 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
RSL 2.9.5
|
||||
Hotfix for online issue.
|
||||
-pmow
|
||||
|
||||
|
||||
RSL 2.9.4
|
||||
|
||||
= Changed install.txt logic to search
|
||||
for any .7z files and use Zip Extract
|
||||
function from GeneralUtilities, should
|
||||
fix version issues with users who have
|
||||
a newer 7zip installed than the 7zip
|
||||
exe included with install.txt games.
|
||||
|
||||
= Fully moved ADB folder to
|
||||
C:\RSL\platform-rools and removed
|
||||
adb folder from Rookie directory.
|
||||
Rookie will do this automatically upon
|
||||
first launch after updating. This will
|
||||
make updating to future versions of ADB
|
||||
much smoother. This should also fix issues
|
||||
caused by having multiple version of
|
||||
adb.exe clashing and fix AAPT issues as
|
||||
well.
|
||||
|
||||
= Updated 7z.exe and 7z.dll on Github.
|
||||
|
||||
HFP
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.9.4
|
||||
|
||||
= Changed install.txt logic to search
|
||||
for any .7z files and use Zip Extract
|
||||
function from GeneralUtilities, should
|
||||
fix version issues with users who have
|
||||
a newer 7zip installed than the 7zip
|
||||
exe included with install.txt games.
|
||||
|
||||
= Fully moved ADB folder to
|
||||
C:\RSL\platform-rools and removed
|
||||
adb folder from Rookie directory.
|
||||
Rookie will do this automatically upon
|
||||
first launch after updating. This will
|
||||
make updating to future versions of ADB
|
||||
much smoother. This should also fix issues
|
||||
caused by having multiple version of
|
||||
adb.exe clashing and fix AAPT issues as
|
||||
well.
|
||||
|
||||
= Updated 7z.exe and 7z.dll on Github.
|
||||
|
||||
HFP
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEsQnoACgkQx/Rql1Vo
|
||||
czeKPRAAi0l9Ti06d48p0vd6Rziw3mHLVXg5dDOZWyrNULu1Y8axnSCVnZOVduVD
|
||||
ftY0fVjTNNv7aU+fyWtH2Gr33CtJ6DvaQpj5RIsFiZpiTeDN3cOq2Ina55jtVvEl
|
||||
ZrBVlLdXtv/L/W3ltrMzc/sNnJhrEfBXq7lNDFMj7IT31miphRZ1X9pgIdqGIpdE
|
||||
gwcVxxkOu/5PXMzR3+eclpVePeagtJQNBH8dYUBQ9OziKObpzAfVYvoYS94MTYUY
|
||||
ZdoHP5tfXEsuW0tQ6G1dvGrIi+ty8EJWX3GS42mkPW6xlyKbSOdu/IQa4KFPmpkK
|
||||
7QwCMDzU5FgxJhg4+j35z/4BxJUzUHeTnp2xQYw/HE+GWdiJklIpZoOeqFQ+QLy/
|
||||
6jwyhqcPD7cni2HMrCi4HxT0GcuVV5jrqqBAtCHdecglH90EMBCS9DrvmZyw1JgA
|
||||
b9bCPQwWvVRLFw8HfiybiqVM98C2kW3TUsprGJOcnT6l1SzKlHEwiSMJSTVWshuu
|
||||
bG8Q19gfhKSLEjTdjKVYV9WDHp8it+lrF6ETdneP4kcSsLhigYSgz0AeETx62Ugh
|
||||
D13MyxcS6K9XqoRGy5Dr3gL/qkT0I5T6dsWL6vj9o317uexIO9sPkmrGTktbGUn1
|
||||
heW2jD324PwyuuPxxoqM1lVKVquUIS0Difx+cqlJHY0lWqIk/Ck=
|
||||
=lZeM
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.9.3
|
||||
|
||||
+ Added new background color for apps that are a newer
|
||||
version than the version on the list. If you see this
|
||||
darker background please agree to share when prompted
|
||||
upon program launch or alternatively select the game
|
||||
from top drop-down installed apps list and click Share
|
||||
Selected App to help the community!
|
||||
|
||||
+ Added logic for file size column, clicking the column
|
||||
header will now properly sort from biggest to smallest
|
||||
or vice versa.
|
||||
|
||||
= Fixed issue where Rookie would ask for every single
|
||||
app installed on user's device. It should now only ask
|
||||
for apps not on Rookie and not on the Blacklist as
|
||||
intended.
|
||||
|
||||
= Changed zip file naming for new game uploads to use
|
||||
Release Name instead of package name.
|
||||
|
||||
HFP
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEpvs8ACgkQx/Rql1Vo
|
||||
czc4kg//fgCG0ChVfIVl48I2dww4ZJmRI+sQm/S4Ry38M4NzM+SdKOQVnDFgZ68p
|
||||
e/z2VqECc4wPlhqrxh+xHoMzlkfrz8LdpsU3cch6jo9uERpaWMj2X1E5jKFRc7iS
|
||||
4/v6XvSBnp/ZSak3f7DUubNnsCcq6vDH4w1ugzv71AyW9STG7oUXQb+kNQNsQ1RO
|
||||
WNJjO87RAlHivUuff7wRLlhVKLo21DvZ+MJRmMRzXH5tMxnEGxWeTOkAoWvsDjMa
|
||||
1L6rmugC9K7X3Qqi09f1ZyUQG6F++fpoDf8u5QB96DegV+IZGjOsBcvL7wE9fdox
|
||||
RxhFxZMsnQtO4kuo3c/iFg7ohxP+pQ5ayk0IzDRwdjfIYX+w+20LdkGpxsThxHvp
|
||||
fWZBUCW0nwBFxBjxItXq8dIn7KHsDc3AkNcI2Ox+4eIUoKwuqzr0wCjPaB4dLLLZ
|
||||
Ofa1tt25ugl7rSTI4doKEH1YmTlzdOuuSKaA2vIMH6L54gpy+h2DkdAQkSEl0PRJ
|
||||
fApOwvUJqnat/Pipg2PTaJSiZd/lLoImWXdhOdlT2XA/9olD0oLGW/DmK+jjH2GK
|
||||
Sxd+sLDHUDyujH263yemu1No7+3Zf+iyE+8LTikYj0mVG3SX8tfG/5cOXbQAp2pv
|
||||
h9CmnbkKBVy8+RXMHKW8MJhsqCS2/wDIJSGYbxwAge3vSe70UWA=
|
||||
=d6JO
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.9.2
|
||||
|
||||
+ Added option in settings menu
|
||||
to automatically reinstall apps
|
||||
when installs fail due to previous
|
||||
version clashing with update.
|
||||
|
||||
NOTE: If your USB or wireless ADB
|
||||
connection is extremely slow this
|
||||
setting can cause larger APK installs
|
||||
to fail in rare cases.
|
||||
|
||||
= Fixed auto reinstall for signature
|
||||
mismatch when if ADB reports error
|
||||
properly (thanks to ADB update),
|
||||
this will lead to faster reinstalls
|
||||
in general when there are issues.
|
||||
|
||||
= Fixed crash that would occur when
|
||||
closing Rookie.
|
||||
|
||||
= Added check to see if AAPT was
|
||||
sucessful in retrieving mew game
|
||||
name from APK, if not RSL will just
|
||||
call the name by its package name
|
||||
instead.
|
||||
|
||||
HFP
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEotsUACgkQx/Rql1Vo
|
||||
czc2/w/8DkMuVYLb31J0WyqeIdo/12t+TO0oIbmTvGl8Oi1LttnfH1a+PUBYYXFF
|
||||
VTEcBoEgGde/Jk7+AblKhzce+uQIzwzU9KC7HL+Ab/1AAj3tdczx2vE4uKTPfMUe
|
||||
k8XuZz0Qe37IOVUgnHugQCac8jjaDCFXzwoIwADnBg7mW/4Ha+LqxJr/+dsMUnz/
|
||||
WsenolRWWKyhTj3RHIulZu82yEV9Gw+KfIUpO/XJR71xNdCq1IyrAfBRT8KqgI3F
|
||||
2IuX/pIqMSMvG1N62rWUzxD67BM5NbpjxiDZKg3LmBo39avqowSGclT7gOP+eiGY
|
||||
eSvvl+zoI08ofL+8Vonhu/mwnQNUcGFQqqpwAvDIcgE/zVDM9uTVAOTRkrjW0ge2
|
||||
xEUhpdKZVJ/UzbwnUEyR7zeAkt+sVkEbAD9My7NdQ58eD52F20+yYTAWC6CU8dB4
|
||||
8QJbJBEzd0Pm23H7iY5F5/7UnPy+rxzfyezrJCKV5u+D65Fn4n13VY33CDxBJW4y
|
||||
kmcpWwal81mbGgwhWpxK6+xy1V2oWL9PLN9YIkfv+n5/KlqJjUfj3wqah+aUG5qI
|
||||
X/5mqLAWnsQcM/F0bZXzt3dVszInPHH7jjSjoyKOKQwfVxYrh6uuonVhG7NfHfij
|
||||
LGs8d6O8osorkiB+2Aiziw8A+9o8fWLmfjeDhFcGc5YTb3eMxz0=
|
||||
=XRAG
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.9.1
|
||||
|
||||
@@ -50,6 +50,25 @@ public class ListViewColumnSorter : IComparer
|
||||
// Cast the objects to be compared to ListViewItem objects
|
||||
listviewX = (ListViewItem)x;
|
||||
listviewY = (ListViewItem)y;
|
||||
if (ColumnToSort == 5 ) {
|
||||
try
|
||||
{
|
||||
int yNum = int.Parse(cleanNumber(listviewY.SubItems[ColumnToSort].Text));
|
||||
int xNum = int.Parse(cleanNumber(listviewX.SubItems[ColumnToSort].Text));
|
||||
if (xNum == yNum )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if(xNum > yNum && OrderOfSort == SortOrder.Ascending)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
} catch { }
|
||||
}
|
||||
|
||||
// Compare the two items
|
||||
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
|
||||
@@ -102,4 +121,9 @@ public class ListViewColumnSorter : IComparer
|
||||
}
|
||||
}
|
||||
|
||||
private string cleanNumber(string number)
|
||||
{
|
||||
return number.Substring(0, number.LastIndexOf('.'));
|
||||
}
|
||||
|
||||
}
|
||||
124
MainForm.Designer.cs
generated
124
MainForm.Designer.cs
generated
@@ -42,9 +42,7 @@
|
||||
this.downloadInstallGameButton = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.ULLabel = new System.Windows.Forms.Label();
|
||||
this.ULGif = new System.Windows.Forms.PictureBox();
|
||||
this.BatteryLbl = new System.Windows.Forms.Label();
|
||||
this.pictureBox5 = new System.Windows.Forms.PictureBox();
|
||||
this.downloadingLabel = new System.Windows.Forms.Label();
|
||||
this.aboutBtn = new System.Windows.Forms.Button();
|
||||
this.settingsButton = new System.Windows.Forms.Button();
|
||||
@@ -89,21 +87,28 @@
|
||||
this.ADBcommandbox = new System.Windows.Forms.TextBox();
|
||||
this.label11 = new System.Windows.Forms.Label();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.pictureBox7 = new System.Windows.Forms.PictureBox();
|
||||
this.label10 = new System.Windows.Forms.Label();
|
||||
this.pictureBox6 = new System.Windows.Forms.PictureBox();
|
||||
this.pictureBox4 = new System.Windows.Forms.PictureBox();
|
||||
this.pictureBox3 = new System.Windows.Forms.PictureBox();
|
||||
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
||||
this.gamesPictureBox = new System.Windows.Forms.PictureBox();
|
||||
this.ULGif = new System.Windows.Forms.PictureBox();
|
||||
this.pictureBox5 = new System.Windows.Forms.PictureBox();
|
||||
this.panel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.ULGif)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
|
||||
this.otherContainer.SuspendLayout();
|
||||
this.backupContainer.SuspendLayout();
|
||||
this.sideloadContainer.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.gamesPictureBox)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.ULGif)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// m_combo
|
||||
@@ -119,7 +124,7 @@
|
||||
this.m_combo.Name = "m_combo";
|
||||
this.m_combo.Size = new System.Drawing.Size(353, 26);
|
||||
this.m_combo.TabIndex = 0;
|
||||
this.m_combo.Text = "Select an app to uninstall or extract...";
|
||||
this.m_combo.Text = "Select an Installed App to Uninstall or Share...";
|
||||
//
|
||||
// startsideloadbutton
|
||||
//
|
||||
@@ -383,17 +388,6 @@
|
||||
this.ULLabel.Text = "Uploading";
|
||||
this.ULLabel.Visible = false;
|
||||
//
|
||||
// ULGif
|
||||
//
|
||||
this.ULGif.Enabled = false;
|
||||
this.ULGif.Image = global::AndroidSideloader.Properties.Resources.ajax_loader;
|
||||
this.ULGif.Location = new System.Drawing.Point(178, 699);
|
||||
this.ULGif.Name = "ULGif";
|
||||
this.ULGif.Size = new System.Drawing.Size(34, 17);
|
||||
this.ULGif.TabIndex = 86;
|
||||
this.ULGif.TabStop = false;
|
||||
this.ULGif.Visible = false;
|
||||
//
|
||||
// BatteryLbl
|
||||
//
|
||||
this.BatteryLbl.AutoSize = true;
|
||||
@@ -407,17 +401,6 @@
|
||||
this.BatteryLbl.TabIndex = 84;
|
||||
this.BatteryLbl.Text = "N/A%";
|
||||
//
|
||||
// pictureBox5
|
||||
//
|
||||
this.pictureBox5.BackColor = System.Drawing.Color.Transparent;
|
||||
this.pictureBox5.Image = global::AndroidSideloader.Properties.Resources.battery11;
|
||||
this.pictureBox5.Location = new System.Drawing.Point(155, 576);
|
||||
this.pictureBox5.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.pictureBox5.Name = "pictureBox5";
|
||||
this.pictureBox5.Size = new System.Drawing.Size(55, 29);
|
||||
this.pictureBox5.TabIndex = 85;
|
||||
this.pictureBox5.TabStop = false;
|
||||
//
|
||||
// downloadingLabel
|
||||
//
|
||||
this.downloadingLabel.AutoSize = true;
|
||||
@@ -1089,7 +1072,7 @@
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
|
||||
this.label6.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.label6.Location = new System.Drawing.Point(828, 12);
|
||||
this.label6.Location = new System.Drawing.Point(828, 9);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(145, 17);
|
||||
this.label6.TabIndex = 90;
|
||||
@@ -1102,7 +1085,7 @@
|
||||
this.label7.AutoSize = true;
|
||||
this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
|
||||
this.label7.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.label7.Location = new System.Drawing.Point(828, 41);
|
||||
this.label7.Location = new System.Drawing.Point(828, 29);
|
||||
this.label7.Name = "label7";
|
||||
this.label7.Size = new System.Drawing.Size(98, 17);
|
||||
this.label7.TabIndex = 90;
|
||||
@@ -1193,13 +1176,54 @@
|
||||
this.label9.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
this.label9.Visible = false;
|
||||
//
|
||||
// pictureBox7
|
||||
//
|
||||
this.pictureBox7.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pictureBox7.BackColor = System.Drawing.Color.Transparent;
|
||||
this.pictureBox7.DataBindings.Add(new System.Windows.Forms.Binding("ImageLocation", global::AndroidSideloader.Properties.Settings.Default, "BackPicturePath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.pictureBox7.ErrorImage = null;
|
||||
this.pictureBox7.ImageLocation = global::AndroidSideloader.Properties.Settings.Default.BackPicturePath;
|
||||
this.pictureBox7.InitialImage = null;
|
||||
this.pictureBox7.Location = new System.Drawing.Point(217, 18);
|
||||
this.pictureBox7.Name = "pictureBox7";
|
||||
this.pictureBox7.Size = new System.Drawing.Size(764, 718);
|
||||
this.pictureBox7.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||
this.pictureBox7.TabIndex = 74;
|
||||
this.pictureBox7.TabStop = false;
|
||||
this.pictureBox7.Click += new System.EventHandler(this.pictureBox1_Click);
|
||||
//
|
||||
// label10
|
||||
//
|
||||
this.label10.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.label10.AutoSize = true;
|
||||
this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
|
||||
this.label10.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.label10.Location = new System.Drawing.Point(828, 49);
|
||||
this.label10.Name = "label10";
|
||||
this.label10.Size = new System.Drawing.Size(135, 17);
|
||||
this.label10.TabIndex = 90;
|
||||
this.label10.Text = "= Newer than List";
|
||||
this.label10.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
//
|
||||
// pictureBox6
|
||||
//
|
||||
this.pictureBox6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pictureBox6.Image = global::AndroidSideloader.Properties.Resources.gametoupload;
|
||||
this.pictureBox6.Location = new System.Drawing.Point(803, 49);
|
||||
this.pictureBox6.Name = "pictureBox6";
|
||||
this.pictureBox6.Size = new System.Drawing.Size(19, 17);
|
||||
this.pictureBox6.TabIndex = 92;
|
||||
this.pictureBox6.TabStop = false;
|
||||
//
|
||||
// pictureBox4
|
||||
//
|
||||
this.pictureBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pictureBox4.Image = global::AndroidSideloader.Properties.Resources.greenkey;
|
||||
this.pictureBox4.Location = new System.Drawing.Point(803, 39);
|
||||
this.pictureBox4.Location = new System.Drawing.Point(803, 29);
|
||||
this.pictureBox4.Name = "pictureBox4";
|
||||
this.pictureBox4.Size = new System.Drawing.Size(21, 20);
|
||||
this.pictureBox4.Size = new System.Drawing.Size(19, 17);
|
||||
this.pictureBox4.TabIndex = 92;
|
||||
this.pictureBox4.TabStop = false;
|
||||
//
|
||||
@@ -1207,9 +1231,9 @@
|
||||
//
|
||||
this.pictureBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pictureBox3.Image = global::AndroidSideloader.Properties.Resources.orangekey;
|
||||
this.pictureBox3.Location = new System.Drawing.Point(803, 10);
|
||||
this.pictureBox3.Location = new System.Drawing.Point(803, 9);
|
||||
this.pictureBox3.Name = "pictureBox3";
|
||||
this.pictureBox3.Size = new System.Drawing.Size(21, 20);
|
||||
this.pictureBox3.Size = new System.Drawing.Size(19, 17);
|
||||
this.pictureBox3.TabIndex = 92;
|
||||
this.pictureBox3.TabStop = false;
|
||||
//
|
||||
@@ -1235,6 +1259,28 @@
|
||||
this.gamesPictureBox.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
|
||||
this.gamesPictureBox.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
|
||||
//
|
||||
// ULGif
|
||||
//
|
||||
this.ULGif.Enabled = false;
|
||||
this.ULGif.Image = global::AndroidSideloader.Properties.Resources.ajax_loader;
|
||||
this.ULGif.Location = new System.Drawing.Point(178, 699);
|
||||
this.ULGif.Name = "ULGif";
|
||||
this.ULGif.Size = new System.Drawing.Size(34, 17);
|
||||
this.ULGif.TabIndex = 86;
|
||||
this.ULGif.TabStop = false;
|
||||
this.ULGif.Visible = false;
|
||||
//
|
||||
// pictureBox5
|
||||
//
|
||||
this.pictureBox5.BackColor = System.Drawing.Color.Transparent;
|
||||
this.pictureBox5.Image = global::AndroidSideloader.Properties.Resources.battery11;
|
||||
this.pictureBox5.Location = new System.Drawing.Point(155, 576);
|
||||
this.pictureBox5.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.pictureBox5.Name = "pictureBox5";
|
||||
this.pictureBox5.Size = new System.Drawing.Size(55, 29);
|
||||
this.pictureBox5.TabIndex = 85;
|
||||
this.pictureBox5.TabStop = false;
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AllowDrop = true;
|
||||
@@ -1245,9 +1291,11 @@
|
||||
this.Controls.Add(this.label4);
|
||||
this.Controls.Add(this.EnterInstallBox);
|
||||
this.Controls.Add(this.ProgressText);
|
||||
this.Controls.Add(this.pictureBox6);
|
||||
this.Controls.Add(this.pictureBox4);
|
||||
this.Controls.Add(this.pictureBox3);
|
||||
this.Controls.Add(this.pictureBox2);
|
||||
this.Controls.Add(this.label10);
|
||||
this.Controls.Add(this.label7);
|
||||
this.Controls.Add(this.label6);
|
||||
this.Controls.Add(this.label8);
|
||||
@@ -1274,6 +1322,7 @@
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.gamesListView);
|
||||
this.Controls.Add(this.pictureBox1);
|
||||
this.Controls.Add(this.pictureBox7);
|
||||
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "MainForm";
|
||||
@@ -1288,16 +1337,18 @@
|
||||
this.DragLeave += new System.EventHandler(this.Form1_DragLeave);
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.ULGif)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
|
||||
this.otherContainer.ResumeLayout(false);
|
||||
this.backupContainer.ResumeLayout(false);
|
||||
this.sideloadContainer.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.gamesPictureBox)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.ULGif)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@@ -1369,6 +1420,9 @@
|
||||
public System.Windows.Forms.ComboBox remotesList;
|
||||
private System.Windows.Forms.PictureBox ULGif;
|
||||
private System.Windows.Forms.Label ULLabel;
|
||||
private System.Windows.Forms.PictureBox pictureBox6;
|
||||
private System.Windows.Forms.PictureBox pictureBox7;
|
||||
private System.Windows.Forms.Label label10;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
494
MainForm.cs
494
MainForm.cs
@@ -113,10 +113,12 @@ namespace AndroidSideloader
|
||||
Properties.Settings.Default.MainDir = Environment.CurrentDirectory;
|
||||
Properties.Settings.Default.Save();
|
||||
CheckForInternet();
|
||||
if (HasInternet == true)
|
||||
if (HasInternet == true) {
|
||||
Sideloader.downloadFiles();
|
||||
else
|
||||
}
|
||||
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))
|
||||
@@ -227,6 +229,8 @@ namespace AndroidSideloader
|
||||
|
||||
ChangeTitle("Initializing Mirrors");
|
||||
initMirrors(true);
|
||||
ChangeTitle("Checking if config is updated and updating config");
|
||||
SideloaderRCLONE.updateConfig(currentRemote);
|
||||
ChangeTitle("Initializing Games");
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
//ChangeTitle("Syncing Game Photos");
|
||||
@@ -237,7 +241,7 @@ namespace AndroidSideloader
|
||||
t1.SetApartmentState(ApartmentState.STA);
|
||||
t1.IsBackground = true;
|
||||
if (HasInternet)
|
||||
t1.Start();
|
||||
t1.Start();
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
Thread t2 = new Thread(() =>
|
||||
@@ -267,32 +271,25 @@ namespace AndroidSideloader
|
||||
t3.Start();
|
||||
t4.Start();
|
||||
}
|
||||
while (t2.IsAlive || t3.IsAlive || t4.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
while (t2.IsAlive)
|
||||
await Task.Delay(100);
|
||||
while (t3.IsAlive)
|
||||
await Task.Delay(100);
|
||||
while (t4.IsAlive)
|
||||
await Task.Delay(100);
|
||||
ChangeTitle("Loaded");
|
||||
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
Thread configThread = new Thread(() =>
|
||||
{
|
||||
ChangeTitle("Checking if config is updated and updating config");
|
||||
SideloaderRCLONE.updateConfig(currentRemote);
|
||||
ChangeTitle("");
|
||||
|
||||
});
|
||||
configThread.IsBackground = true;
|
||||
configThread.Start();
|
||||
while (configThread.IsAlive)
|
||||
await Task.Delay(100);
|
||||
ChangeTitle("Populating update list, please wait...");
|
||||
ChangeTitle("Populating update list, please wait...\n\n");
|
||||
listappsbtn();
|
||||
initListView();
|
||||
showAvailableSpace();
|
||||
intToolTips();
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
downloadInstallGameButton.Enabled = true;
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
isLoading = false;
|
||||
initListView();
|
||||
}
|
||||
|
||||
|
||||
@@ -341,7 +338,7 @@ namespace AndroidSideloader
|
||||
try
|
||||
{
|
||||
if (ProgressText.IsDisposed) return;
|
||||
this.Invoke(() => { oldTitle = txt; this.Text = "Rookie's Sideloader | " + txt; });
|
||||
this.Invoke(() => { oldTitle = txt; this.Text = "Rookie's Sideloader v" + Updater.LocalVersion + " | " + txt; });
|
||||
ProgressText.Invoke(() =>
|
||||
{
|
||||
if (!ProgressText.IsDisposed)
|
||||
@@ -350,7 +347,7 @@ namespace AndroidSideloader
|
||||
if (!reset)
|
||||
return;
|
||||
await Task.Delay(TimeSpan.FromSeconds(5));
|
||||
this.Invoke(() => { this.Text = "Rookie's Sideloader | " + oldTitle; });
|
||||
this.Invoke(() => { this.Text = "Rookie's Sideloader v" + Updater.LocalVersion + " | " + oldTitle; });
|
||||
ProgressText.Invoke(() =>
|
||||
{
|
||||
if (!ProgressText.IsDisposed)
|
||||
@@ -781,7 +778,7 @@ namespace AndroidSideloader
|
||||
ChangeTitle("Extracting APK....");
|
||||
|
||||
Directory.CreateDirectory($"{Properties.Settings.Default.MainDir}\\{packageName}");
|
||||
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\{packageName}\\HWID.txt", HWID);
|
||||
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
output = Sideloader.getApk(GameName);
|
||||
@@ -801,6 +798,9 @@ namespace AndroidSideloader
|
||||
|
||||
while (t2.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\{packageName}\\HWID.txt", HWID);
|
||||
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\{packageName}\\uploadMethod.txt", "manual");
|
||||
ChangeTitle("Zipping extracted application...");
|
||||
string cmd = $"7z a \"{GameName} v{VersionInt}.zip\" .\\{packageName}\\*";
|
||||
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
|
||||
@@ -823,21 +823,21 @@ namespace AndroidSideloader
|
||||
{
|
||||
string currentlyuploading = GameName;
|
||||
ChangeTitle("Uploading to shared drive, you can continue to use Rookie while it uploads in the background.");
|
||||
string Uploadoutput = RCLONE.runRcloneCommand($"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt}.zip\" RSL-debuglogs:CleanGames").Output;
|
||||
string Uploadoutput = RCLONE.runRcloneCommand($"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt}.zip\" RSL-gameuploads:").Output;
|
||||
File.Delete($"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt}.zip");
|
||||
FlexibleMessageBox.Show($"Upload of {currentlyuploading} is complete! Thank you for your contribution!");
|
||||
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
|
||||
});
|
||||
t3.IsBackground = true;
|
||||
t3.Start();
|
||||
isuploading = true;
|
||||
|
||||
while (t3.IsAlive)
|
||||
{
|
||||
isuploading = true;
|
||||
await Task.Delay(100);
|
||||
}
|
||||
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
isuploading = false;
|
||||
ULGif.Visible = false;
|
||||
ULLabel.Visible = false;
|
||||
@@ -848,32 +848,28 @@ namespace AndroidSideloader
|
||||
|
||||
private async void uninstallAppButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
string packagename;
|
||||
ADB.WakeDevice();
|
||||
if (m_combo.SelectedIndex == -1)
|
||||
{
|
||||
FlexibleMessageBox.Show("Please select an app first");
|
||||
return;
|
||||
}
|
||||
string date_str = DateTime.Today.ToString("yyyy.MM.dd");
|
||||
string CurrBackups = Path.Combine(BackupFolder, date_str);
|
||||
|
||||
|
||||
string GameName = m_combo.SelectedItem.ToString();
|
||||
string packagename = Sideloader.gameNameToPackageName(GameName);
|
||||
FlexibleMessageBox.Show($"If savedata is found it will be saved to Documents\\Rookie Backups\\{date_str}(YYYY.MM.DD)\\{packagename}", "Attempting Backup...", MessageBoxButtons.OK);
|
||||
|
||||
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?", "Continue with Uninstall?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.No)
|
||||
DialogResult dialogresult = FlexibleMessageBox.Show($"Are you sure you want to unintsall {GameName}? Rookie will attempt to automatically backup any saves to Documents\\Rookie Backups\\(TodaysDate)", "Proceed with uninstall?", MessageBoxButtons.YesNo);
|
||||
if (dialogresult == DialogResult.No)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!GameName.Contains("."))
|
||||
packagename = Sideloader.gameNameToPackageName(GameName);
|
||||
else
|
||||
packagename = GameName;
|
||||
ProcessOutput output = new ProcessOutput("", "");
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
output += Sideloader.UninstallGame(GameName);
|
||||
output += Sideloader.UninstallGame(packagename);
|
||||
});
|
||||
t1.Start();
|
||||
t1.IsBackground = true;
|
||||
@@ -1000,7 +996,8 @@ namespace AndroidSideloader
|
||||
output.Error = "";
|
||||
if (output.Error.Contains("reserved"))
|
||||
output.Output = "";
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
}
|
||||
string[] files = Directory.GetFiles(data);
|
||||
@@ -1013,7 +1010,7 @@ namespace AndroidSideloader
|
||||
string pathname = Path.GetDirectoryName(data);
|
||||
string filename = file2.Replace($"{pathname}\\", "");
|
||||
|
||||
string cmd = $"\"{Properties.Settings.Default.MainDir}\\adb\\aapt.exe\" dump badging \"{data}\" | findstr -i \"package: name\"";
|
||||
string cmd = $"C:\\RSL\\platform-tools\\aapt.exe\" dump badging \"{file2}\" | findstr -i \"package: name\"";
|
||||
string cmdout = ADB.RunCommandToString(cmd, file2).Output;
|
||||
cmdout = Utilities.StringUtilities.RemoveEverythingBeforeFirst(cmdout, "=");
|
||||
cmdout = Utilities.StringUtilities.RemoveEverythingAfterFirst(cmdout, " ");
|
||||
@@ -1028,7 +1025,6 @@ namespace AndroidSideloader
|
||||
Program.form.ChangeTitle($"Sideloading apk...");
|
||||
|
||||
Thread t2 = new Thread(() =>
|
||||
|
||||
{
|
||||
output += ADB.Sideload(file2);
|
||||
});
|
||||
@@ -1112,8 +1108,7 @@ namespace AndroidSideloader
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1121,7 +1116,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
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 cmd = $"\"C:\\RSL\\platform-tools\\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, " ");
|
||||
@@ -1149,8 +1144,7 @@ namespace AndroidSideloader
|
||||
|
||||
timer.Stop();
|
||||
|
||||
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
}
|
||||
//If obb is dragged and dropped alone onto Rookie, Rookie will recreate its obb folder automatically with this code.
|
||||
@@ -1177,7 +1171,7 @@ namespace AndroidSideloader
|
||||
await Task.Delay(100);
|
||||
|
||||
Directory.Delete(foldername, true);
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
// BMBF Zip extraction then push to BMBF song folder on Quest.
|
||||
else if (extension == ".zip" && Properties.Settings.Default.BMBFchecked)
|
||||
@@ -1219,7 +1213,8 @@ namespace AndroidSideloader
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1247,7 +1242,8 @@ namespace AndroidSideloader
|
||||
{
|
||||
DragDropLbl.Visible = false;
|
||||
DragDropLbl.Text = "";
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
List<String> newGamesList = new List<string>();
|
||||
List<String> newGamesToUploadList = new List<string>();
|
||||
@@ -1256,6 +1252,7 @@ namespace AndroidSideloader
|
||||
public static bool loaded = false;
|
||||
public static string rookienamelist;
|
||||
public static string rookienamelist2;
|
||||
private bool errorOnList;
|
||||
private async void initListView()
|
||||
{
|
||||
rookienamelist = "";
|
||||
@@ -1286,41 +1283,34 @@ namespace AndroidSideloader
|
||||
List<String> rookieList = new List<String>();
|
||||
foreach (string[] game in SideloaderRCLONE.games)
|
||||
{
|
||||
rookieList.Add(game[SideloaderRCLONE.PackageNameIndex]);
|
||||
|
||||
}
|
||||
|
||||
List<String> installGames = packageList.ToList();
|
||||
|
||||
List<String> installedGames = packageList.ToList();
|
||||
List<String> blacklistItems = blacklist.ToList();
|
||||
List<String> whitelistItems = whitelist.ToList();
|
||||
errorOnList = false;
|
||||
|
||||
//This is for black list, but temporarly will be whitelist
|
||||
newGamesList = installGames.Except(rookieList).Except(blacklistItems).ToList();
|
||||
//this list has games that we are actually going to upload
|
||||
newGamesToUploadList = whitelistItems.Intersect(installGames).ToList();
|
||||
newGamesToUploadList = whitelistItems.Intersect(installedGames).ToList();
|
||||
|
||||
foreach (string[] release in SideloaderRCLONE.games)
|
||||
{
|
||||
if (!rookienamelist.Contains(release[SideloaderRCLONE.GameNameIndex].ToString()))
|
||||
{
|
||||
{
|
||||
rookienamelist += release[SideloaderRCLONE.GameNameIndex].ToString() + "\n";
|
||||
rookienamelist2 += release[SideloaderRCLONE.GameNameIndex].ToString() + ", ";
|
||||
}
|
||||
}
|
||||
|
||||
ListViewItem Game = new ListViewItem(release);
|
||||
if (gamesListView.Columns.Count > 0)
|
||||
{
|
||||
gamesListView.Columns[1].Width = 265;
|
||||
gamesListView.Columns[5].Width = 59;
|
||||
gamesListView.Columns[2].Width = 100;
|
||||
gamesListView.Columns[3].Width = 45;
|
||||
gamesListView.Columns[4].Width = 105;
|
||||
gamesListView.Columns[5].Text = "Size (MB)";
|
||||
}
|
||||
|
||||
foreach (string packagename in packageList)
|
||||
{
|
||||
rookieList.Add(release[SideloaderRCLONE.PackageNameIndex].ToString());
|
||||
if (string.Equals(release[SideloaderRCLONE.PackageNameIndex], packagename))
|
||||
{
|
||||
|
||||
|
||||
if (Properties.Settings.Default.QblindOn)
|
||||
{
|
||||
Game.BackColor = Color.FromArgb(0, 112, 138);
|
||||
@@ -1375,16 +1365,34 @@ namespace AndroidSideloader
|
||||
}
|
||||
GameList.Add(Game);
|
||||
}
|
||||
newGamesList = installedGames.Except(rookieList).Except(blacklistItems).ToList();
|
||||
if (blacklistItems.Count == 0 || rookieList.Count == 0)
|
||||
{
|
||||
//This means either the user does not have headset connected or the blacklist
|
||||
//did not load, so we are just going to skip everything
|
||||
errorOnList = true;
|
||||
FlexibleMessageBox.Show($"Rookie seems to have failed to load all resources. Please try restarting Rookie a few times.\nIf error still persists please disable any VPN or firewalls (rookie uses direct download so a VPN is not needed)\nIf this error still persists try a system reboot, reinstalling the program, and lastly posting the problem on telegram.", "Error loading blacklist or game list!");
|
||||
}
|
||||
|
||||
int topItemIndex = 0;
|
||||
try
|
||||
{
|
||||
if (gamesListView.Items.Count > 1)
|
||||
topItemIndex = gamesListView.TopItem.Index;
|
||||
topItemIndex = gamesListView.TopItem.Index;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{ }
|
||||
|
||||
if (gamesListView.Columns.Count > 0)
|
||||
{
|
||||
gamesListView.Columns[1].Width = 265;
|
||||
gamesListView.Columns[5].Width = 59;
|
||||
gamesListView.Columns[2].Width = 100;
|
||||
gamesListView.Columns[3].Width = 45;
|
||||
gamesListView.Columns[4].Width = 105;
|
||||
gamesListView.Columns[5].Text = "Size (MB)";
|
||||
}
|
||||
|
||||
ListViewItem[] arr = GameList.ToArray();
|
||||
gamesListView.BeginUpdate();
|
||||
gamesListView.Items.Clear();
|
||||
@@ -1397,138 +1405,146 @@ namespace AndroidSideloader
|
||||
}
|
||||
catch (Exception ex)
|
||||
{ }
|
||||
//This is for games that we already have on rookie and user has an update
|
||||
foreach (UpdateGameData gameData in gamesToAskForUpdate)
|
||||
if (!errorOnList)
|
||||
{
|
||||
if (!updatesnotified)
|
||||
|
||||
|
||||
//This is for games that we already have on rookie and user has an update
|
||||
foreach (UpdateGameData gameData in gamesToAskForUpdate)
|
||||
{
|
||||
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)
|
||||
if (!updatesnotified)
|
||||
{
|
||||
await extractAndPrepareGameToUploadAsync(gameData.GameName, gameData.Packagename, gameData.InstalledVersionInt);
|
||||
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 WhiteListed Games, they will be asked for first, if we don't get many bogus prompts we can remove this entire duplicate section.
|
||||
foreach (string newGamesToUpload in newGamesToUploadList)
|
||||
{
|
||||
string RlsName = Sideloader.PackageNametoGameName(newGamesToUpload);
|
||||
|
||||
//start of code to get official Release Name from APK by first extracting APK then running AAPT on it.
|
||||
string apppath = ADB.RunAdbCommandToString($"shell pm path {newGamesToUpload}").Output;
|
||||
apppath = Utilities.StringUtilities.RemoveEverythingBeforeFirst(apppath, "/");
|
||||
apppath = Utilities.StringUtilities.RemoveEverythingAfterFirst(apppath, "\r\n");
|
||||
if (File.Exists($"C:\\RSL\\2.8.2\\ADB\\base.apk"))
|
||||
File.Delete($"C:\\RSL\\2.8.2\\ADB\\base.apk");
|
||||
ADB.RunAdbCommandToString($"pull \"{apppath}\"");
|
||||
string cmd = $"\"{Properties.Settings.Default.MainDir}\\adb\\aapt.exe\" dump badging \"C:\\RSL\\2.8.2\\ADB\\base.apk\" | findstr -i \"application-label\"";
|
||||
string workingpath = $"{Properties.Settings.Default.MainDir}\\adb\\aapt.exe";
|
||||
string ReleaseName = ADB.RunCommandToString(cmd, workingpath).Output;
|
||||
ReleaseName = Utilities.StringUtilities.RemoveEverythingBeforeFirst(ReleaseName, "'");
|
||||
ReleaseName = Utilities.StringUtilities.RemoveEverythingAfterFirst(ReleaseName, "\r\n");
|
||||
ReleaseName = ReleaseName.Replace("'", "");
|
||||
File.Delete($"C:\\RSL\\2.8.2\\ADB\\base.apk");
|
||||
//end
|
||||
|
||||
string GameName = Sideloader.gameNameToSimpleName(RlsName);
|
||||
Logger.Log(newGamesToUpload);
|
||||
if (!updatesnotified)
|
||||
//This is for WhiteListed Games, they will be asked for first, if we don't get many bogus prompts we can remove this entire duplicate section.
|
||||
foreach (string newGamesToUpload in newGamesToUploadList)
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"You have an in demand game:\n\n{ReleaseName}\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)
|
||||
{
|
||||
string InstalledVersionCode;
|
||||
InstalledVersionCode = ADB.RunAdbCommandToString($"shell \"dumpsys package {newGamesToUpload} | grep versionCode -F\"").Output;
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingBeforeFirst(InstalledVersionCode, "versionCode=");
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingAfterFirst(InstalledVersionCode, " ");
|
||||
ulong installedVersionInt = UInt64.Parse(Utilities.StringUtilities.KeepOnlyNumbers(InstalledVersionCode));
|
||||
await extractAndPrepareGameToUploadAsync(GameName, newGamesToUpload, installedVersionInt);
|
||||
}
|
||||
else
|
||||
{
|
||||
string RlsName = Sideloader.PackageNametoGameName(newGamesToUpload);
|
||||
|
||||
//start of code to get official Release Name from APK by first extracting APK then running AAPT on it.
|
||||
string apppath = ADB.RunAdbCommandToString($"shell pm path {newGamesToUpload}").Output;
|
||||
apppath = Utilities.StringUtilities.RemoveEverythingBeforeFirst(apppath, "/");
|
||||
apppath = Utilities.StringUtilities.RemoveEverythingAfterFirst(apppath, "\r\n");
|
||||
if (File.Exists($"C:\\RSL\\platform-tools\\base.apk"))
|
||||
File.Delete($"C:\\RSL\\platform-tools\\base.apk");
|
||||
ADB.RunAdbCommandToString($"pull \"{apppath}\"");
|
||||
string cmd = $"\"C:\\RSL\\platform-tools\\aapt.exe\" dump badging \"C:\\RSL\\platform-tools\\base.apk\" | findstr -i \"application-label\"";
|
||||
string workingpath = "C:\\RSL\\platform-tools\\aapt.exe";
|
||||
string ReleaseName = ADB.RunCommandToString(cmd, workingpath).Output;
|
||||
ReleaseName = Utilities.StringUtilities.RemoveEverythingBeforeFirst(ReleaseName, "'");
|
||||
ReleaseName = Utilities.StringUtilities.RemoveEverythingAfterFirst(ReleaseName, "\r\n");
|
||||
ReleaseName = ReleaseName.Replace("'", "");
|
||||
File.Delete($"C:\\RSL\\platform-tools\\base.apk");
|
||||
//end
|
||||
|
||||
string GameName = Sideloader.gameNameToSimpleName(RlsName);
|
||||
Logger.Log(newGamesToUpload);
|
||||
if (!updatesnotified)
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"You have an in demand game:\n\n{ReleaseName}\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)
|
||||
{
|
||||
string InstalledVersionCode;
|
||||
InstalledVersionCode = ADB.RunAdbCommandToString($"shell \"dumpsys package {newGamesToUpload} | grep versionCode -F\"").Output;
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingBeforeFirst(InstalledVersionCode, "versionCode=");
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingAfterFirst(InstalledVersionCode, " ");
|
||||
ulong installedVersionInt = UInt64.Parse(Utilities.StringUtilities.KeepOnlyNumbers(InstalledVersionCode));
|
||||
await extractAndPrepareGameToUploadAsync(GameName, newGamesToUpload, installedVersionInt);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//This is for games that are not blacklisted and we dont have on rookie
|
||||
foreach (string newGamesToUpload in newGamesList)
|
||||
{
|
||||
string RlsName = Sideloader.PackageNametoGameName(newGamesToUpload);
|
||||
|
||||
//start of code to get official Release Name from APK by first extracting APK then running AAPT on it.
|
||||
string apppath = ADB.RunAdbCommandToString($"shell pm path {newGamesToUpload}").Output;
|
||||
apppath = Utilities.StringUtilities.RemoveEverythingBeforeFirst(apppath, "/");
|
||||
apppath = Utilities.StringUtilities.RemoveEverythingAfterFirst(apppath, "\r\n");
|
||||
if (File.Exists($"C:\\RSL\\2.8.2\\ADB\\base.apk"))
|
||||
File.Delete($"C:\\RSL\\2.8.2\\ADB\\base.apk");
|
||||
ADB.RunAdbCommandToString($"pull \"{apppath}\"");
|
||||
string cmd = $"\"{Properties.Settings.Default.MainDir}\\adb\\aapt.exe\" dump badging \"C:\\RSL\\2.8.2\\ADB\\base.apk\" | findstr -i \"application-label\"";
|
||||
string workingpath = $"{Properties.Settings.Default.MainDir}\\adb\\aapt.exe";
|
||||
string ReleaseName = ADB.RunCommandToString(cmd, workingpath).Output;
|
||||
ReleaseName = Utilities.StringUtilities.RemoveEverythingBeforeFirst(ReleaseName, "'");
|
||||
ReleaseName = Utilities.StringUtilities.RemoveEverythingAfterFirst(ReleaseName, "\r\n");
|
||||
ReleaseName = ReleaseName.Replace("'", "");
|
||||
File.Delete($"C:\\RSL\\2.8.2\\ADB\\base.apk");
|
||||
//end
|
||||
|
||||
string GameName = Sideloader.gameNameToSimpleName(RlsName);
|
||||
Logger.Log(newGamesToUpload);
|
||||
if (!updatesnotified)
|
||||
//This is for games that are not blacklisted and we dont have on rookie
|
||||
foreach (string newGamesToUpload in newGamesList)
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"You have a new game:\n\n{ReleaseName}\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)
|
||||
string RlsName = Sideloader.PackageNametoGameName(newGamesToUpload);
|
||||
|
||||
//start of code to get official Release Name from APK by first extracting APK then running AAPT on it.
|
||||
string apppath = ADB.RunAdbCommandToString($"shell pm path {newGamesToUpload}").Output;
|
||||
apppath = Utilities.StringUtilities.RemoveEverythingBeforeFirst(apppath, "/");
|
||||
apppath = Utilities.StringUtilities.RemoveEverythingAfterFirst(apppath, "\r\n");
|
||||
if (File.Exists($"C:\\RSL\\platform-tools\\base.apk"))
|
||||
File.Delete($"C:\\RSL\\platform-tools\\base.apk");
|
||||
ADB.RunAdbCommandToString($"pull \"{apppath}\"");
|
||||
string cmd = $"\"C:\\RSL\\platform-tools\\aapt.exe\" dump badging \"C:\\RSL\\platform-tools\\base.apk\" | findstr -i \"application-label\"";
|
||||
string workingpath = $"C:\\RSL\\platform-tools\\aapt.exe";
|
||||
string ReleaseName = ADB.RunCommandToString(cmd, workingpath).Output;
|
||||
ReleaseName = Utilities.StringUtilities.RemoveEverythingBeforeFirst(ReleaseName, "'");
|
||||
ReleaseName = Utilities.StringUtilities.RemoveEverythingAfterFirst(ReleaseName, "\r\n");
|
||||
ReleaseName = ReleaseName.Replace("'", "");
|
||||
File.Delete($"C:\\RSL\\platform-tools\\base.apk");
|
||||
if (ReleaseName.Contains("Microsoft Windows"))
|
||||
ReleaseName = RlsName;
|
||||
//end
|
||||
|
||||
string GameName = Sideloader.gameNameToSimpleName(RlsName);
|
||||
Logger.Log(newGamesToUpload);
|
||||
if (!updatesnotified)
|
||||
{
|
||||
string InstalledVersionCode;
|
||||
InstalledVersionCode = ADB.RunAdbCommandToString($"shell \"dumpsys package {newGamesToUpload} | grep versionCode -F\"").Output;
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingBeforeFirst(InstalledVersionCode, "versionCode=");
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingAfterFirst(InstalledVersionCode, " ");
|
||||
ulong installedVersionInt = UInt64.Parse(Utilities.StringUtilities.KeepOnlyNumbers(InstalledVersionCode));
|
||||
await extractAndPrepareGameToUploadAsync(GameName, newGamesToUpload, installedVersionInt);
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"You have a new game:\n\n{ReleaseName}\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)
|
||||
{
|
||||
string InstalledVersionCode;
|
||||
InstalledVersionCode = ADB.RunAdbCommandToString($"shell \"dumpsys package {newGamesToUpload} | grep versionCode -F\"").Output;
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingBeforeFirst(InstalledVersionCode, "versionCode=");
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingAfterFirst(InstalledVersionCode, " ");
|
||||
ulong installedVersionInt = UInt64.Parse(Utilities.StringUtilities.KeepOnlyNumbers(InstalledVersionCode));
|
||||
await extractAndPrepareGameToUploadAsync(ReleaseName, newGamesToUpload, installedVersionInt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
updatesnotified = true;
|
||||
updatesnotified = true;
|
||||
|
||||
|
||||
if (!isworking && gamesToUpload.Count > 0)
|
||||
{
|
||||
ChangeTitle("Uploading to shared drive, you can continue to use Rookie while it uploads in the background.");
|
||||
ULGif.Visible = true;
|
||||
ULLabel.Visible = true;
|
||||
ULGif.Enabled = true;
|
||||
isworking = true;
|
||||
|
||||
foreach (UploadGame game in gamesToUpload)
|
||||
if (!isworking && gamesToUpload.Count > 0)
|
||||
{
|
||||
Thread t3 = new Thread(() =>
|
||||
{
|
||||
string packagename = Sideloader.gameNameToPackageName(game.Uploadgamename);
|
||||
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 \"{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);
|
||||
File.Delete($"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion}.zip");
|
||||
ChangeTitle("Uploading to shared drive, you can continue to use Rookie while it uploads in the background.");
|
||||
ULGif.Visible = true;
|
||||
ULLabel.Visible = true;
|
||||
ULGif.Enabled = true;
|
||||
isworking = true;
|
||||
|
||||
});
|
||||
t3.IsBackground = true;
|
||||
t3.Start();
|
||||
while (t3.IsAlive)
|
||||
foreach (UploadGame game in gamesToUpload)
|
||||
{
|
||||
isuploading = true;
|
||||
await Task.Delay(100);
|
||||
Thread t3 = new Thread(() =>
|
||||
{
|
||||
string packagename = Sideloader.gameNameToPackageName(game.Uploadgamename);
|
||||
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 \"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion} {game.Pckgcommand}.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);
|
||||
File.Delete($"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion} {game.Pckgcommand}.zip");
|
||||
|
||||
});
|
||||
t3.IsBackground = true;
|
||||
t3.Start();
|
||||
while (t3.IsAlive)
|
||||
{
|
||||
isuploading = true;
|
||||
await Task.Delay(100);
|
||||
}
|
||||
}
|
||||
gamesToUpload.Clear();
|
||||
isworking = false;
|
||||
isuploading = false;
|
||||
ULGif.Visible = false;
|
||||
ULLabel.Visible = false;
|
||||
ULGif.Enabled = false;
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
gamesToUpload.Clear();
|
||||
isworking = false;
|
||||
isuploading = false;
|
||||
ULGif.Visible = false;
|
||||
ULLabel.Visible = false;
|
||||
ULGif.Enabled = false;
|
||||
}
|
||||
loaded = true;
|
||||
}
|
||||
@@ -1538,7 +1554,7 @@ namespace AndroidSideloader
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
Sideloader.getApk(GameName);
|
||||
Sideloader.getApk(packagename);
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
@@ -1560,11 +1576,12 @@ namespace AndroidSideloader
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
UploadGame game = new UploadGame();
|
||||
game.Pckgcommand = packagename;
|
||||
game.Uploadcommand = $"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{installedVersionInt}.zip\" RSL-debuglogs:CleanGames";
|
||||
game.Uploadcommand = $"copy \"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion} {game.Pckgcommand}\" RSL-gameuploads:";
|
||||
game.Uploadversion = installedVersionInt;
|
||||
game.Uploadgamename = GameName;
|
||||
gamesToUpload.Add(game);
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
private void initMirrors(bool random)
|
||||
{
|
||||
@@ -1708,14 +1725,15 @@ without him none of this would be possible
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
listappsbtn();
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.IsBackground = false;
|
||||
t1.Start();
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(100);
|
||||
initListView();
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
isLoading = false;
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
|
||||
private static readonly HttpClient client = new HttpClient();
|
||||
@@ -1965,7 +1983,8 @@ without him none of this would be possible
|
||||
Thread installtxtThread = new Thread(() =>
|
||||
{
|
||||
output += Sideloader.RunADBCommandsFromFile(file);
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
});
|
||||
|
||||
installtxtThread.Start();
|
||||
@@ -1996,13 +2015,13 @@ without him none of this would be possible
|
||||
}
|
||||
|
||||
Debug.WriteLine(wrDelimiter);
|
||||
if (Directory.Exists($"{Environment.CurrentDirectory}\\{gameName}\\{packagename}"))
|
||||
if (Directory.Exists($"{Properties.Settings.Default.MainDir}\\{gameName}\\{packagename}"))
|
||||
{
|
||||
Thread obbThread = new Thread(() =>
|
||||
{
|
||||
|
||||
ChangeTitle($"Copying {packagename} obb to device...");
|
||||
output += ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{gameName}\\{packagename}\" \"/sdcard/Android/obb\"");
|
||||
output += ADB.RunAdbCommandToString($"push \"{Properties.Settings.Default.MainDir}\\{gameName}\\{packagename}\" \"/sdcard/Android/obb\"");
|
||||
Program.form.ChangeTitle("");
|
||||
});
|
||||
obbThread.IsBackground = true;
|
||||
@@ -2034,11 +2053,12 @@ without him none of this would be possible
|
||||
gamesAreDownloading = false;
|
||||
ShowPrcOutput(output);
|
||||
isinstalling = false;
|
||||
ChangeTitle("Refreshing games list, please wait...\n");
|
||||
ChangeTitle("Refreshing games list, please wait... \n");
|
||||
showAvailableSpace();
|
||||
listappsbtn();
|
||||
initListView();
|
||||
ChangeTitle("");
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2055,54 +2075,52 @@ without him none of this would be possible
|
||||
}
|
||||
if (isinstalled)
|
||||
{
|
||||
|
||||
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)
|
||||
if (!Properties.Settings.Default.AutoReinstall)
|
||||
{
|
||||
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 \"{CurrAPK}\"");
|
||||
ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{CurrPCKG}\" /sdcard/Android/data/");
|
||||
|
||||
timerticked = false;
|
||||
if (Directory.Exists($"{Environment.CurrentDirectory}\\{CurrPCKG}"))
|
||||
Directory.Delete($"{Environment.CurrentDirectory}\\{CurrPCKG}", true);
|
||||
ChangeTitle("");
|
||||
return;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
DialogResult dialogResult2 = FlexibleMessageBox.Show("Would you like to cancel the install? Press NO to keep waiting.", "Cancel install?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult2 == DialogResult.Yes)
|
||||
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.Cancel)
|
||||
{
|
||||
ChangeTitle("Stopping Install...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
}
|
||||
else
|
||||
{
|
||||
timerticked = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
ChangeTitle("Performing reinstall, please wait...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
ADB.RunAdbCommandToString($"pull /sdcard/Android/data/{CurrPCKG} \"{Environment.CurrentDirectory}\"");
|
||||
Sideloader.UninstallGame(CurrPCKG);
|
||||
ChangeTitle("Reinstalling Game");
|
||||
output += ADB.RunAdbCommandToString($"install -g \"{CurrAPK}\"");
|
||||
ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{CurrPCKG}\" /sdcard/Android/data/");
|
||||
|
||||
timerticked = false;
|
||||
if (Directory.Exists($"{Environment.CurrentDirectory}\\{CurrPCKG}"))
|
||||
Directory.Delete($"{Environment.CurrentDirectory}\\{CurrPCKG}", true);
|
||||
|
||||
ChangeTitle(" \n\n");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
DialogResult dialogResult2 = FlexibleMessageBox.Show("This install is taking an usual amount of time, you can keep waiting or cancel the install.\n" +
|
||||
"Would you like to cancel the installation?", "Cancel install?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult2 == DialogResult.Yes)
|
||||
{
|
||||
ChangeTitle("Stopping Install...");
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
ADB.RunAdbCommandToString("devices");
|
||||
}
|
||||
else
|
||||
{
|
||||
timerticked = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
//Even if the user has already uploaded the game list, we will ask once every 24h
|
||||
if (Properties.Settings.Default.lastTimeShared != null && Properties.Settings.Default.UploadedGameList)
|
||||
{
|
||||
if((DateTime.Now - Properties.Settings.Default.lastTimeShared).TotalDays > 1)
|
||||
{
|
||||
Properties.Settings.Default.UploadedGameList = false;
|
||||
}
|
||||
}
|
||||
if (isinstalling)
|
||||
{
|
||||
var res1 = FlexibleMessageBox.Show(this, "There are downloads and/or installations in progress,\nif you exit now you'll have to start the entire process over again.\nAre you sure you want to exit?", "Still downloading/installing.",
|
||||
@@ -2128,30 +2146,6 @@ without him none of this would be possible
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
}
|
||||
}
|
||||
else if (newGamesList.Count > 0 && !Properties.Settings.Default.UploadedGameList)
|
||||
{
|
||||
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)
|
||||
{
|
||||
string fileName = "gamesList" + DateTime.Now.ToFileTime() + ".txt";
|
||||
System.IO.File.WriteAllLines(fileName, newGamesList);
|
||||
RCLONE.runRcloneCommand($"copy " + Environment.CurrentDirectory + "\\" + fileName + " RSL-debuglogs:InstalledGamesList");
|
||||
FlexibleMessageBox.Show("Upload done! Thank for your colaboration!");
|
||||
File.Delete(fileName);
|
||||
Properties.Settings.Default.UploadedGameList = true;
|
||||
Properties.Settings.Default.lastTimeShared = DateTime.Now;
|
||||
Properties.Settings.Default.Save();
|
||||
RCLONE.killRclone();
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
RCLONE.killRclone();
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RCLONE.killRclone();
|
||||
@@ -2294,7 +2288,7 @@ without him none of this would be possible
|
||||
{
|
||||
ChangeTitle($"Entered command: ADB {ADBcommandbox.Text}");
|
||||
ADB.RunAdbCommandToString(ADBcommandbox.Text);
|
||||
ChangeTitle("");
|
||||
ChangeTitle(" \n\n");
|
||||
}
|
||||
ADBcommandbox.Visible = false;
|
||||
label9.Visible = false;
|
||||
|
||||
10
Properties/Resources.Designer.cs
generated
10
Properties/Resources.Designer.cs
generated
@@ -110,6 +110,16 @@ namespace AndroidSideloader.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
public static System.Drawing.Bitmap gametoupload {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("gametoupload", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
||||
@@ -118,23 +118,26 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="SearchGlass" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\SearchGlass.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="orangekey" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\orangekey.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="greenkey" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\greenkey.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="battery1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\battery11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="battery" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\battery.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="battery11" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\battery1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="SearchGlass" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\SearchGlass.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="ajax-loader" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ajax-loader.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="battery1" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\battery11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="bluekey" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\bluekey.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
@@ -142,7 +145,7 @@
|
||||
<data name="redkey" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\redkey.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ajax-loader" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ajax-loader.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="gametoupload" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\gametoupload.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
12
Properties/Settings.Designer.cs
generated
12
Properties/Settings.Designer.cs
generated
@@ -657,5 +657,17 @@ namespace AndroidSideloader.Properties {
|
||||
this["lastTimeShared"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool AutoReinstall {
|
||||
get {
|
||||
return ((bool)(this["AutoReinstall"]));
|
||||
}
|
||||
set {
|
||||
this["AutoReinstall"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,5 +161,8 @@
|
||||
<Setting Name="lastTimeShared" Type="System.DateTime" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="AutoReinstall" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
BIN
Resources/gametoupload.png
Normal file
BIN
Resources/gametoupload.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 827 B |
43
SettingsForm.Designer.cs
generated
43
SettingsForm.Designer.cs
generated
@@ -48,6 +48,7 @@
|
||||
this.CblindBox = new System.Windows.Forms.CheckBox();
|
||||
this.nodevicemodeBox = new System.Windows.Forms.CheckBox();
|
||||
this.bmbfBox = new System.Windows.Forms.CheckBox();
|
||||
this.AutoReinstBox = new System.Windows.Forms.CheckBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// checkForUpdatesCheckBox
|
||||
@@ -72,7 +73,7 @@
|
||||
this.applyButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.applyButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.applyButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.applyButton.Location = new System.Drawing.Point(67, 280);
|
||||
this.applyButton.Location = new System.Drawing.Point(67, 328);
|
||||
this.applyButton.Name = "applyButton";
|
||||
this.applyButton.Size = new System.Drawing.Size(101, 31);
|
||||
this.applyButton.TabIndex = 5;
|
||||
@@ -102,7 +103,7 @@
|
||||
this.resetSettingsButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.resetSettingsButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.resetSettingsButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.resetSettingsButton.Location = new System.Drawing.Point(174, 280);
|
||||
this.resetSettingsButton.Location = new System.Drawing.Point(174, 328);
|
||||
this.resetSettingsButton.Name = "resetSettingsButton";
|
||||
this.resetSettingsButton.Size = new System.Drawing.Size(101, 31);
|
||||
this.resetSettingsButton.TabIndex = 4;
|
||||
@@ -157,7 +158,7 @@
|
||||
this.BandwithTextbox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.BandwithTextbox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.BandwithTextbox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.BandwithTextbox.Location = new System.Drawing.Point(52, 248);
|
||||
this.BandwithTextbox.Location = new System.Drawing.Point(52, 296);
|
||||
this.BandwithTextbox.Name = "BandwithTextbox";
|
||||
this.BandwithTextbox.Size = new System.Drawing.Size(177, 24);
|
||||
this.BandwithTextbox.TabIndex = 11;
|
||||
@@ -167,7 +168,7 @@
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.label1.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.label1.Location = new System.Drawing.Point(40, 225);
|
||||
this.label1.Location = new System.Drawing.Point(40, 273);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(245, 18);
|
||||
this.label1.TabIndex = 12;
|
||||
@@ -188,7 +189,7 @@
|
||||
"K",
|
||||
"M",
|
||||
"G"});
|
||||
this.BandwithComboBox.Location = new System.Drawing.Point(235, 248);
|
||||
this.BandwithComboBox.Location = new System.Drawing.Point(235, 296);
|
||||
this.BandwithComboBox.Name = "BandwithComboBox";
|
||||
this.BandwithComboBox.Size = new System.Drawing.Size(55, 26);
|
||||
this.BandwithComboBox.TabIndex = 13;
|
||||
@@ -202,7 +203,7 @@
|
||||
this.DebugLogCopy.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.DebugLogCopy.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.DebugLogCopy.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.DebugLogCopy.Location = new System.Drawing.Point(29, 325);
|
||||
this.DebugLogCopy.Location = new System.Drawing.Point(29, 373);
|
||||
this.DebugLogCopy.Name = "DebugLogCopy";
|
||||
this.DebugLogCopy.Size = new System.Drawing.Size(285, 31);
|
||||
this.DebugLogCopy.TabIndex = 5;
|
||||
@@ -213,7 +214,7 @@
|
||||
// crashlogID
|
||||
//
|
||||
this.crashlogID.AutoSize = true;
|
||||
this.crashlogID.Location = new System.Drawing.Point(13, 441);
|
||||
this.crashlogID.Location = new System.Drawing.Point(13, 489);
|
||||
this.crashlogID.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.crashlogID.Name = "crashlogID";
|
||||
this.crashlogID.Size = new System.Drawing.Size(0, 13);
|
||||
@@ -228,7 +229,7 @@
|
||||
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.button1.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.button1.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
|
||||
this.button1.Location = new System.Drawing.Point(29, 360);
|
||||
this.button1.Location = new System.Drawing.Point(29, 408);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(285, 31);
|
||||
this.button1.TabIndex = 5;
|
||||
@@ -239,7 +240,7 @@
|
||||
// debuglogID
|
||||
//
|
||||
this.debuglogID.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
|
||||
this.debuglogID.Location = new System.Drawing.Point(29, 436);
|
||||
this.debuglogID.Location = new System.Drawing.Point(29, 484);
|
||||
this.debuglogID.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.debuglogID.Name = "debuglogID";
|
||||
this.debuglogID.Size = new System.Drawing.Size(285, 48);
|
||||
@@ -254,7 +255,7 @@
|
||||
this.DebugID.Cursor = System.Windows.Forms.Cursors.Default;
|
||||
this.DebugID.Font = new System.Drawing.Font("Microsoft Sans Serif", 13.8F, System.Drawing.FontStyle.Bold);
|
||||
this.DebugID.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.DebugID.Location = new System.Drawing.Point(29, 407);
|
||||
this.DebugID.Location = new System.Drawing.Point(29, 455);
|
||||
this.DebugID.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.DebugID.Name = "DebugID";
|
||||
this.DebugID.ReadOnly = true;
|
||||
@@ -267,7 +268,7 @@
|
||||
// label2
|
||||
//
|
||||
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
|
||||
this.label2.Location = new System.Drawing.Point(29, 507);
|
||||
this.label2.Location = new System.Drawing.Point(29, 555);
|
||||
this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(284, 86);
|
||||
@@ -284,7 +285,7 @@
|
||||
this.textBox1.Cursor = System.Windows.Forms.Cursors.Default;
|
||||
this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 13.8F, System.Drawing.FontStyle.Bold);
|
||||
this.textBox1.ForeColor = System.Drawing.SystemColors.ControlLightLight;
|
||||
this.textBox1.Location = new System.Drawing.Point(29, 490);
|
||||
this.textBox1.Location = new System.Drawing.Point(29, 538);
|
||||
this.textBox1.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.ReadOnly = true;
|
||||
@@ -334,12 +335,26 @@
|
||||
this.bmbfBox.UseVisualStyleBackColor = true;
|
||||
this.bmbfBox.CheckedChanged += new System.EventHandler(this.bmbfBox_CheckedChanged);
|
||||
//
|
||||
// AutoReinstBox
|
||||
//
|
||||
this.AutoReinstBox.AutoSize = true;
|
||||
this.AutoReinstBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
|
||||
this.AutoReinstBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
|
||||
this.AutoReinstBox.Location = new System.Drawing.Point(12, 222);
|
||||
this.AutoReinstBox.Name = "AutoReinstBox";
|
||||
this.AutoReinstBox.Size = new System.Drawing.Size(280, 22);
|
||||
this.AutoReinstBox.TabIndex = 9;
|
||||
this.AutoReinstBox.Text = "Enable auto reinstall upon install failure";
|
||||
this.AutoReinstBox.UseVisualStyleBackColor = true;
|
||||
this.AutoReinstBox.CheckedChanged += new System.EventHandler(this.AutoReinstBox_CheckedChanged);
|
||||
this.AutoReinstBox.Click += new System.EventHandler(this.AutoReinstBox_Click);
|
||||
//
|
||||
// SettingsForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
|
||||
this.ClientSize = new System.Drawing.Size(342, 606);
|
||||
this.ClientSize = new System.Drawing.Size(342, 634);
|
||||
this.Controls.Add(this.textBox1);
|
||||
this.Controls.Add(this.DebugID);
|
||||
this.Controls.Add(this.crashlogID);
|
||||
@@ -349,6 +364,7 @@
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.BandwithTextbox);
|
||||
this.Controls.Add(this.bmbfBox);
|
||||
this.Controls.Add(this.AutoReinstBox);
|
||||
this.Controls.Add(this.nodevicemodeBox);
|
||||
this.Controls.Add(this.CblindBox);
|
||||
this.Controls.Add(this.userJsonOnGameInstall);
|
||||
@@ -398,5 +414,6 @@
|
||||
private System.Windows.Forms.CheckBox CblindBox;
|
||||
private System.Windows.Forms.CheckBox nodevicemodeBox;
|
||||
private System.Windows.Forms.CheckBox bmbfBox;
|
||||
private System.Windows.Forms.CheckBox AutoReinstBox;
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,7 @@ namespace AndroidSideloader
|
||||
userJsonOnGameInstall.Checked = Properties.Settings.Default.userJsonOnGameInstall;
|
||||
nodevicemodeBox.Checked = Properties.Settings.Default.nodevicemode;
|
||||
bmbfBox.Checked = Properties.Settings.Default.BMBFchecked;
|
||||
AutoReinstBox.Checked = Properties.Settings.Default.AutoReinstall;
|
||||
|
||||
if (Properties.Settings.Default.BandwithLimit.Length > 1)
|
||||
{
|
||||
@@ -223,6 +224,27 @@ namespace AndroidSideloader
|
||||
Properties.Settings.Default.BMBFchecked = bmbfBox.Checked;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
private void AutoReinstBox_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.AutoReinstall = AutoReinstBox.Checked;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
private void AutoReinstBox_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (AutoReinstBox.Checked)
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show("WARNING: This box enables automatic reinstall when installs fail,\ndue to some games not allowing " +
|
||||
"access to their save data (less than 5%) this\noption can lead to losing your progress." +
|
||||
" However with this option\nchecked when installs fail you won't have to agree to a prompt to preform\nthe reinstall. " +
|
||||
"(ideal when installing from a queue).\n\nNOTE: If your usb/wireless adb connection is extremely slow this option can\ncause larger" +
|
||||
"apk file installations to fail. Enable anyway?", "WARNING", MessageBoxButtons.OKCancel);
|
||||
if (dialogResult == DialogResult.Cancel)
|
||||
AutoReinstBox.Checked = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,14 +53,14 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
ADB.WakeDevice();
|
||||
ProcessOutput output = new ProcessOutput();
|
||||
var commands = File.ReadAllLines(path);
|
||||
string currfolder = Path.GetDirectoryName(path);
|
||||
string[] zipz = Directory.GetFiles(currfolder, "*.7z", SearchOption.AllDirectories);
|
||||
foreach (string zip in zipz)
|
||||
{
|
||||
Utilities.Zip.ExtractFile($"{zip}", currfolder);
|
||||
}
|
||||
foreach (string cmd in commands)
|
||||
{
|
||||
if (cmd.Contains("7z.exe"))
|
||||
{
|
||||
Program.form.ChangeTitle($"Running {cmd}");
|
||||
Logger.Log($"Logging command: {cmd} from file: {path}");
|
||||
ADB.RunCommandToString(cmd, path);
|
||||
}
|
||||
if (cmd.StartsWith("adb"))
|
||||
{
|
||||
string replacement = "";
|
||||
@@ -126,17 +126,22 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
}
|
||||
catch (Exception ex) { Logger.Log(ex.Message); }
|
||||
}
|
||||
|
||||
public static string BackupFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups");
|
||||
//uninstalls an app
|
||||
public static ProcessOutput UninstallGame(string GameName)
|
||||
public static ProcessOutput UninstallGame(string packagename)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
Program.form.ChangeTitle("Attempting to backup any savedata to Documents\\Rookie Backups...");
|
||||
ProcessOutput output = new ProcessOutput("", "");
|
||||
string packageName = Sideloader.gameNameToPackageName(GameName);
|
||||
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);
|
||||
string date_str = DateTime.Today.ToString("yyyy.MM.dd");
|
||||
string CurrBackups = Path.Combine(BackupFolder, date_str);
|
||||
if (!Directory.Exists(CurrBackups))
|
||||
Directory.CreateDirectory(CurrBackups);
|
||||
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/data/{packagename}\" \"{CurrBackups}\"");
|
||||
output = ADB.UninstallPackage(packagename);
|
||||
Program.form.ChangeTitle("");
|
||||
Sideloader.RemoveFolder("/sdcard/Android/obb/" + packagename);
|
||||
Sideloader.RemoveFolder("/sdcard/Android/data/" + packagename);
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -191,9 +196,9 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
{
|
||||
foreach (string[] game in SideloaderRCLONE.games)
|
||||
{
|
||||
if (gameName.Contains(game[SideloaderRCLONE.GameNameIndex]))
|
||||
if (gameName.Equals(game[SideloaderRCLONE.GameNameIndex]))
|
||||
return game[SideloaderRCLONE.PackageNameIndex];
|
||||
if (gameName.Contains(game[SideloaderRCLONE.ReleaseNameIndex]))
|
||||
if (gameName.Equals(game[SideloaderRCLONE.ReleaseNameIndex]))
|
||||
return game[SideloaderRCLONE.PackageNameIndex];
|
||||
}
|
||||
return gameName;
|
||||
@@ -203,7 +208,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
{
|
||||
foreach (string[] game in SideloaderRCLONE.games)
|
||||
{
|
||||
if (gameName.Contains(game[SideloaderRCLONE.PackageNameIndex]))
|
||||
if (gameName.Equals(game[SideloaderRCLONE.PackageNameIndex]))
|
||||
return game[SideloaderRCLONE.ReleaseNameIndex];
|
||||
}
|
||||
return gameName;
|
||||
@@ -213,9 +218,9 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
{
|
||||
foreach (string[] game in SideloaderRCLONE.games)
|
||||
{
|
||||
if (gameName.Contains(game[SideloaderRCLONE.GameNameIndex]))
|
||||
if (gameName.Equals(game[SideloaderRCLONE.GameNameIndex]))
|
||||
return game[SideloaderRCLONE.GameNameIndex];
|
||||
if (gameName.Contains(game[SideloaderRCLONE.ReleaseNameIndex]))
|
||||
if (gameName.Equals(game[SideloaderRCLONE.ReleaseNameIndex]))
|
||||
return game[SideloaderRCLONE.GameNameIndex];
|
||||
}
|
||||
return gameName;
|
||||
@@ -242,12 +247,17 @@ 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 (!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
|
||||
if (!File.Exists("C:\\RSL\\platform-tools\\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");
|
||||
if (Directory.Exists($"C:\\RSL"))
|
||||
Directory.Delete("C:\\RSL", true);
|
||||
if (Directory.Exists($"{Properties.Settings.Default.MainDir}\\adb"))
|
||||
Directory.Delete($"{Properties.Settings.Default.MainDir}\\adb", true);
|
||||
if (!Directory.Exists("C:\\RSL\\platform-tools"))
|
||||
Directory.CreateDirectory("C:\\RSL\\platform-tools");
|
||||
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/adb2.zip", "adb2.zip");
|
||||
Utilities.Zip.ExtractFile(Environment.CurrentDirectory + "\\adb2.zip", "C:\\RSL\\platform-tools");
|
||||
File.Delete("adb2.zip");
|
||||
}
|
||||
|
||||
if (!Directory.Exists(Environment.CurrentDirectory + "\\rclone"))
|
||||
|
||||
@@ -90,44 +90,25 @@ namespace AndroidSideloader
|
||||
{
|
||||
File.WriteAllText("VRP-GamesList.txt", tempGameList);
|
||||
}
|
||||
|
||||
string[] gameListSplited = tempGameList.Split(new[] { '\n' }, 2);
|
||||
|
||||
foreach (string gameProperty in gameListSplited[0].Split(';'))
|
||||
if (!tempGameList.Equals(""))
|
||||
{
|
||||
gameProperties.Add(gameProperty);
|
||||
}
|
||||
string[] gameListSplited = tempGameList.Split(new[] { '\n' }, 2);
|
||||
|
||||
foreach (string game in gameListSplited[1].Split('\n'))
|
||||
{
|
||||
if (game.Length > 1)
|
||||
foreach (string gameProperty in gameListSplited[0].Split(';'))
|
||||
{
|
||||
string[] splitGame = game.Split(';');
|
||||
games.Add(splitGame);
|
||||
//gameFolder.find();
|
||||
gameProperties.Add(gameProperty);
|
||||
}
|
||||
|
||||
foreach (string game in gameListSplited[1].Split('\n'))
|
||||
{
|
||||
if (game.Length > 1)
|
||||
{
|
||||
string[] splitGame = game.Split(';');
|
||||
games.Add(splitGame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Output
|
||||
//Console.WriteLine("Headers:");
|
||||
//foreach (string s in gameProperties)
|
||||
//{
|
||||
// Console.WriteLine($"gameProperty: {s}");
|
||||
//}
|
||||
|
||||
|
||||
|
||||
foreach (string[] s in games)
|
||||
{
|
||||
//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.9.1";
|
||||
static readonly public string LocalVersion = "2.9.5";
|
||||
public static string currentVersion = string.Empty;
|
||||
public static string changelog = string.Empty;
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace AndroidSideloader.Utilities
|
||||
{
|
||||
public static void ExtractFile(string sourceArchive, string destination)
|
||||
{
|
||||
if (!File.Exists(Environment.CurrentDirectory + "\\7z.exe"))
|
||||
if (!File.Exists(Environment.CurrentDirectory + "\\7z.exe") || !File.Exists(Environment.CurrentDirectory + "\\7z.dll"))
|
||||
{
|
||||
WebClient client = new WebClient();
|
||||
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/7z.exe", "7z.exe");
|
||||
|
||||
@@ -1,21 +1,3 @@
|
||||
RSL 2.9.1
|
||||
RSL 2.9.5
|
||||
|
||||
+ Added blacklist implementation to request games
|
||||
found on User's device that are not currently on
|
||||
Rookie.
|
||||
|
||||
+ Added CTRL + L shortcut to copy list of game names
|
||||
separated by new lines to clipboard.
|
||||
|
||||
+ Added ALT + L shortcut to copy list of game names to
|
||||
a paragraph separated by commas to clipboard.
|
||||
|
||||
+ Rookie will now maintain games list position when it
|
||||
is refreshed. (e.g.: After finishing install queue,
|
||||
when pressing refresh all/updates list buttons)
|
||||
|
||||
= Fixed issue where Rookie won't load game list properly
|
||||
after updating, users won't notice the issue fixed until
|
||||
the next update after this update.
|
||||
|
||||
HFP
|
||||
= Hotfix connection bug when starting
|
||||
|
||||
Reference in New Issue
Block a user