Compare commits

...

3 Commits
v2.6 ... v2.7.1

Author SHA1 Message Date
Harry Fn Potter
d02505b172 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.7

+ Added BMBF drag and drop option for Quest users
in SETTINGS menu.If users drag and drop BMBF song
zip files onto rookie either one by one, an entire
folder, or many zips at once Rookie will automatically
extract the files to a folder then push the folder
to your device then delete the extraction folder.
+ Added automatic timeout during APK install that
will ask user if they'd like Rookie to automatically
uninstall and reinstall the app. Rookie will check
for save data and copy it to a folder temporarily
then put it back after reinstall.
= Cleaned up startup tasks so booting Rookie should
be faster.
= Added automatic deletion of previous crashlog to
decrease clutter in Rookie directory.
= Added automatic installed app refresh after drag
and drop.

HFP

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

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmENfVMACgkQx/Rql1Vo
czcxaw//bTVxR5gt1F4c+gDT80dVfJa1Js3h5vSjGgCHjQdmsU6eaU5BQGoUorkw
6ewYF48jt84xDNj/VirkeqHV95mvsj9sksi+mxvELnAa0NdRVYj0DCqZWB/mNDfx
lYZGp2SwiGK3a6KfMpPcbi2IEWqc9ZWpdazIDy6l3oGSBAYaoVqfjl+CJQQpomIJ
x7f67Ei633dyhu8+0612LVu+tZ4ibN2pAAu1Dd5+uvlODUiYLPadhZkLwk+CYC6p
ifs/1qB/fsXJS6YJyPCmuZCbYN//jLCD9ECQ5cqZbTTU82Ub2lDE+TcdO/CsxSxU
pueIxZ+7C5TceiNzsDfKfeCWu65hZlBW1xKReDtLPFzZdZuyXYTI0v00kvapwJIO
C9Eq2qxZvdnp05tw8nY1V4Ae5Jl6oLN0BwWSZv50NhQ4Dpmbl8pemk1r5iZsRhGA
MWQCytBCaX/3EpJda8ifGJxj3kOno2ewbwXdZEMN7QqWt1scN9HxNXFWEJwO29HV
pT6ra3T0OrOBLmCQGt4w71HGFK2t+c7aPq0yI/sayguB9zjR/GpTyekg7nHXZh9g
c+WD5umN2xA0LuLjvvePKhhKTBT6ebmQJh1CRNIRtA150ULbnTAIpZJTDZyhcLXi
IUfWyWPA4G3GsRUqGWf97O2G2bIbbIzLeg3uEdxF7T9LOigYgpU=
=Rwj0
-----END PGP SIGNATURE-----
2021-08-06 14:41:09 -04:00
Harry Fn Potter
258c251567 2.6 2021-08-03 17:57:33 -04:00
Harry Fn Potter
1f851470e0 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.6

+ Added No Device mode for those who wish to download games
overnight without interruption.
+ Added automatic config update at launch.
+ Added a unique HWID generator that will generate a unique
number based on your  PC's components and then encrypt it
with SHA256. This is so donors can be anonymously identified
for the purpose of future benefits/recognition. Once.the HWID
is generated RSL then creates  a text file named HWID to put
with the  clean files in the zip. Users can see their unique
HWID at any time by pressing CTRL+H  in Rookie. Your unique HWID
will always be the same.
= Added version code to any zip files created during clean files
prep.
= Added boolean to check if user has been asked to send clean
files, if they have it won't appear again for some time.
= Fixed OBB installation for Install+Download.

HFP

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

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEJuZYACgkQx/Rql1Vo
cze1yg//Yyw+tRfA3hLxLQejXhj/LyFsGOoTCyqTVQDuUtxZxyMAFUN3SCd5sC3h
byVpcoDMaBMGoOgE3FnpEvObd3SHVaB3xqw902saHPAhzuujv4Ru25ou+xRDU8c6
+xXPQ3O4ocgHwlFP+nCVx3eXai8Dz/2OUc6JC2PfpjU/xj3B6cs/ExSrxoHqyCJL
g5lntpE0dFQboe6gu7uEQn2Qal1Gsn2+MqCqQZh1dBIpF/gEPD8/q40St/lN7cdY
jm1lVxW3By7muxlh9wcRYsxQk78cb49+Vsa+EcxS6GK0m8Hibp8nS7RoHFMBtC1i
hgIZW5lt1cCj5WlwI3/t+vLR4Ia/eh7Vi0EiyVGhiOIQvCR2+PpkWWrVDe3zoXUX
n68zFZlL2yoaCXg5AWPp3KiQff3uxlBD58fzNZRtKzjFPNmcYR6x7PcHfai76+JD
aE36aC8Q3aMCaIaH+gH+eAhl+mzyX1Vhdl9NLLHLUXZwBnSA9drMHJsVMh6SOQiC
VMiv1vMXJllKq/7W7EGr1fWFGuPJk6FFjT1g+3+2d71yVKyPL+99JQg7UJzp112w
7ZUAD6Wt8lpW66I2zpcOBPwpoAlxg2uJy2Nc38axfrBpHsscNrYIXFMHEprLG+Xk
PqnfDHPtP1sUxe2uiZTQj3JjlEnb4ES/xBdvSPacc53+fBPs0yM=
=BAUp
-----END PGP SIGNATURE-----
2021-08-03 17:53:27 -04:00
17 changed files with 621 additions and 294 deletions

62
ADB.cs
View File

@@ -67,16 +67,22 @@ namespace AndroidSideloader
}
else
adb.WaitForExit();
if (error.Contains("ADB_VENDOR_KEYS"))
if (error.Contains("ADB_VENDOR_KEYS") && Properties.Settings.Default.adbdebugwarned)
{
FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.");
ADB.WakeDevice();
DialogResult dialogResult = FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.\nPlease note that even if you have done this\nbefore it will reset itself from time to time.\n\nPress CANCEL if you want to disable this prompt (FOR DEBUGGING ONLY, NOT RECOMMENDED).", "ADB Debugging not enabled.", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.Cancel)
{
Properties.Settings.Default.adbdebugwarned = true;
Properties.Settings.Default.Save();
}
else
ADB.WakeDevice();
}
if (error.Contains("not enough storage space"))
{
FlexibleMessageBox.Show("There is not enough room on your device to install this package. Please clear AT LEAST 2x the amount of the app you are trying to install.");
}
if (!output.Contains("version") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("Filesystem") && !output.Contains("package:") && !output.Equals(null))
if (!output.Contains("version") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("Filesystem") && !output.Contains("package:") && !output.Equals(null))
Logger.Log(output);
Logger.Log(error);
return new ProcessOutput(output, error);
@@ -122,13 +128,30 @@ namespace AndroidSideloader
{
adb.Kill();
}
else
adb.WaitForExit();
}
else
adb.WaitForExit();
if (error.Contains("ADB_VENDOR_KEYS"))
else if (command.Contains("install"))
{
FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.");
ADB.WakeDevice();
bool graceful = adb.WaitForExit(120000);
if (!graceful)
{
adb.Kill();
}
else
adb.WaitForExit();
}
if (error.Contains("ADB_VENDOR_KEYS") && Properties.Settings.Default.adbdebugwarned)
{
DialogResult dialogResult = FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.\nPlease note that even if you have done this\nbefore it will reset itself from time to time.\n\nPress CANCEL if you want to disable this prompt (FOR DEBUGGING ONLY, NOT RECOMMENDED).", "ADB Debugging not enabled.", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.Cancel)
{
Properties.Settings.Default.adbdebugwarned = true;
Properties.Settings.Default.Save();
}
else
ADB.WakeDevice();
}
Logger.Log(output);
Logger.Log(error);
@@ -145,7 +168,7 @@ namespace AndroidSideloader
if (logcmd.Contains(Environment.CurrentDirectory))
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
Logger.Log($"Running command: {logcmd}");
adb.StartInfo.FileName = "cmd.exe";
adb.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
adb.StartInfo.Arguments = command;
adb.StartInfo.RedirectStandardError = true;
adb.StartInfo.RedirectStandardInput = true;
@@ -178,9 +201,16 @@ namespace AndroidSideloader
}
else
adb.WaitForExit();
if (error.Contains("ADB_VENDOR_KEYS"))
if (error.Contains("ADB_VENDOR_KEYS") && Properties.Settings.Default.adbdebugwarned)
{
FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.");
DialogResult dialogResult = FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.\nPlease note that even if you have done this\nbefore it will reset itself from time to time.\n\nPress CANCEL if you want to disable this prompt (FOR DEBUGGING ONLY, NOT RECOMMENDED).", "ADB Debugging not enabled.", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.Cancel)
{
Properties.Settings.Default.adbdebugwarned = true;
Properties.Settings.Default.Save();
}
else
ADB.WakeDevice();
}
Logger.Log(output);
@@ -246,7 +276,7 @@ namespace AndroidSideloader
public static void WakeDevice()
{
string devicesout = RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP").Output;
if (!devicesout.Contains("found"))
if (!devicesout.Contains("found") && !Properties.Settings.Default.nodevicemode)
{
if (Properties.Settings.Default.IPAddress.Contains("connect"))
{
@@ -347,19 +377,19 @@ namespace AndroidSideloader
WakeDevice();
ProcessOutput ret = new ProcessOutput();
Program.form.ChangeTitle($"Sideloading {Path.GetFileName(path)}");
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
string out2 = ret.Output + ret.Error;
if (out2.Contains("failed"))
{
string BackupFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups");
if (out2.Contains("offline"))
Logger.Log(out2);
if (out2.Contains("offline") && !Properties.Settings.Default.nodevicemode)
{
DialogResult dialogResult2 = FlexibleMessageBox.Show("Device is offline. Press Yes to reconnect, or if you don't wish to connect and just want to download the game (requires unchecking \"Delete games after install\" from settings menu) then press No.", "Device offline.", MessageBoxButtons.YesNoCancel);
if (dialogResult2 == DialogResult.Yes)
ADB.WakeDevice();
}
if (out2.Contains($"INSTALL_FAILED_UPDATE_INCOMPATIBLE") || out2.Contains("INSTALL_FAILED_VERSION_DOWNGRADE"))
if (out2.Contains($"INSTALL_FAILED_UPDATE_INCOMPATIBLE") || 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;

View File

@@ -146,6 +146,7 @@
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Management" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />

View File

@@ -149,6 +149,15 @@
<setting name="QblindOn" serializeAs="String">
<value>False</value>
</setting>
<setting name="adbdebugwarned" serializeAs="String">
<value>False</value>
</setting>
<setting name="nodevicemode" serializeAs="String">
<value>False</value>
</setting>
<setting name="BMBFchecked" serializeAs="String">
<value>False</value>
</setting>
</AndroidSideloader.Properties.Settings>
<AndroidADB.Sideloader.Properties.Settings>
<setting name="checkForUpdates" serializeAs="String">

View File

@@ -1,6 +1,47 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
RSL 2.6
+ Added No Device mode for those who wish to download games
overnight without interruption.
+ Added automatic config update at launch.
+ Added a unique HWID generator that will generate a unique
number based on your PC's components and then encrypt it
with SHA256. This is so donors can be anonymously identified
for the purpose of future benefits/recognition. Once.the HWID
is generated RSL then creates a text file named HWID to put
with the clean files in the zip. Users can see their unique
HWID at any time by pressing CTRL+H in Rookie. Your unique HWID
will always be the same.
= Added version code to any zip files created during clean files
prep.
= Added boolean to check if user has been asked to send clean
files, if they have it won't appear again for some time.
= Fixed OBB installation for Install+Download.
HFP
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEJuZYACgkQx/Rql1Vo
cze1yg//Yyw+tRfA3hLxLQejXhj/LyFsGOoTCyqTVQDuUtxZxyMAFUN3SCd5sC3h
byVpcoDMaBMGoOgE3FnpEvObd3SHVaB3xqw902saHPAhzuujv4Ru25ou+xRDU8c6
+xXPQ3O4ocgHwlFP+nCVx3eXai8Dz/2OUc6JC2PfpjU/xj3B6cs/ExSrxoHqyCJL
g5lntpE0dFQboe6gu7uEQn2Qal1Gsn2+MqCqQZh1dBIpF/gEPD8/q40St/lN7cdY
jm1lVxW3By7muxlh9wcRYsxQk78cb49+Vsa+EcxS6GK0m8Hibp8nS7RoHFMBtC1i
hgIZW5lt1cCj5WlwI3/t+vLR4Ia/eh7Vi0EiyVGhiOIQvCR2+PpkWWrVDe3zoXUX
n68zFZlL2yoaCXg5AWPp3KiQff3uxlBD58fzNZRtKzjFPNmcYR6x7PcHfai76+JD
aE36aC8Q3aMCaIaH+gH+eAhl+mzyX1Vhdl9NLLHLUXZwBnSA9drMHJsVMh6SOQiC
VMiv1vMXJllKq/7W7EGr1fWFGuPJk6FFjT1g+3+2d71yVKyPL+99JQg7UJzp112w
7ZUAD6Wt8lpW66I2zpcOBPwpoAlxg2uJy2Nc38axfrBpHsscNrYIXFMHEprLG+Xk
PqnfDHPtP1sUxe2uiZTQj3JjlEnb4ES/xBdvSPacc53+fBPs0yM=
=BAUp
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
RSL 2.5.1
+ Added PARTIAL SEARCH compatibility to Quick Search. Quick

14
MainForm.Designer.cs generated
View File

@@ -116,7 +116,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...";
this.m_combo.Text = "Select an app to uninstall or extract...";
//
// startsideloadbutton
//
@@ -336,6 +336,8 @@
this.downloadInstallGameButton.Text = "Download and Install Game/Add to Queue";
this.downloadInstallGameButton.UseVisualStyleBackColor = false;
this.downloadInstallGameButton.Click += new System.EventHandler(this.downloadInstallGameButton_Click);
this.downloadInstallGameButton.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
this.downloadInstallGameButton.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
//
// panel1
//
@@ -806,6 +808,8 @@
this.gamesQueListBox.Size = new System.Drawing.Size(369, 146);
this.gamesQueListBox.TabIndex = 9;
this.gamesQueListBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.gamesQueListBox_MouseClick);
this.gamesQueListBox.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
this.gamesQueListBox.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
//
// devicesComboBox
//
@@ -852,13 +856,15 @@
this.gamesListView.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.gamesListView.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.gamesListView.HideSelection = false;
this.gamesListView.Location = new System.Drawing.Point(224, 72);
this.gamesListView.Location = new System.Drawing.Point(224, 71);
this.gamesListView.Name = "gamesListView";
this.gamesListView.Size = new System.Drawing.Size(746, 359);
this.gamesListView.Size = new System.Drawing.Size(746, 360);
this.gamesListView.TabIndex = 6;
this.gamesListView.UseCompatibleStateImageBehavior = false;
this.gamesListView.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
this.gamesListView.SelectedIndexChanged += new System.EventHandler(this.gamesListView_SelectedIndexChanged);
this.gamesListView.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
this.gamesListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
this.gamesListView.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.gamesListView_KeyPress);
this.gamesListView.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.gamesListView_MouseDoubleClick);
//
@@ -1198,6 +1204,8 @@
this.gamesPictureBox.Size = new System.Drawing.Size(371, 214);
this.gamesPictureBox.TabIndex = 84;
this.gamesPictureBox.TabStop = false;
this.gamesPictureBox.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
this.gamesPictureBox.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
//
// MainForm
//

View File

@@ -30,6 +30,8 @@ namespace AndroidSideloader
#else
public bool keyheld;
public bool keyheld2;
public static string CurrAPK;
public static string CurrPCKG;
public static bool debugMode = false;
public bool DeviceConnected = false;
#endif
@@ -64,7 +66,6 @@ namespace AndroidSideloader
}
else
{
FlexibleMessageBox.Show("Cannot generate debug log until RSL is done syncing with the server. Once RSL has fully loaded please reset your DebugLog in Settings.");
Properties.Settings.Default.CurrentLogPath = $"{Environment.CurrentDirectory}\\debuglog.txt";
}
@@ -78,10 +79,7 @@ namespace AndroidSideloader
t2.Interval = 30; // 30ms
t2.Tick += new EventHandler(timer_Tick2);
t2.Start();
System.Windows.Forms.Timer t3 = new System.Windows.Forms.Timer();
t3.Interval = 350; // 1 second before clipboard copy is allowed
t3.Tick += new EventHandler(timer_Tick3);
t3.Start();
lvwColumnSorter = new ListViewColumnSorter();
this.gamesListView.ListViewItemSorter = lvwColumnSorter;
if (searchTextBox.Visible)
@@ -98,13 +96,13 @@ namespace AndroidSideloader
private string oldTitle = "";
public static bool updatesnotified;
private async void Form1_Load(object sender, EventArgs e)
{
updatesnotified = false;
string adbFile = "C:\\RSL\\2.1.1\\adb\\adb.exe";
string adbDir = "C:\\RSL\\2.1.1\\adb";
string fileName = "";
@@ -190,6 +188,8 @@ namespace AndroidSideloader
catch { }
if (File.Exists("crashlog.txt"))
{
if (File.Exists(Properties.Settings.Default.CurrentCrashPath))
File.Delete(Properties.Settings.Default.CurrentCrashPath);
DialogResult dialogResult = FlexibleMessageBox.Show($"Sideloader crashed during your last use.\nPress OK if you'd like to send us your crash log.\n\n NOTE: THIS CAN TAKE UP TO 30 SECONDS.", "Crash Detected", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.OK)
{
@@ -234,6 +234,7 @@ namespace AndroidSideloader
freeDisclaimer.Invoke(() => { freeDisclaimer.Dispose(); });
}).Start();
progressBar.Style = ProgressBarStyle.Continuous;
Thread t1 = new Thread(() =>
{
if (!debugMode && Properties.Settings.Default.checkForUpdates)
@@ -243,11 +244,11 @@ namespace AndroidSideloader
Updater.Update();
}
progressBar.Invoke(() => { progressBar.Style = ProgressBarStyle.Marquee; });
ChangeTitle("Initializing Mirrors");
initMirrors(true);
ChangeTitle("Initializing Games");
if (!Directory.Exists(SideloaderRCLONE.Nouns))
SideloaderRCLONE.UpdateNouns(currentRemote);
SideloaderRCLONE.UpdateNouns(currentRemote);
SideloaderRCLONE.initGames(currentRemote);
if (!Directory.Exists(SideloaderRCLONE.ThumbnailsFolder) || !Directory.Exists(SideloaderRCLONE.NotesFolder))
{
@@ -255,39 +256,39 @@ namespace AndroidSideloader
}
ChangeTitle("Syncing Game Photos");
SideloaderRCLONE.UpdateGamePhotos(currentRemote);
if (Directory.Exists(SideloaderRCLONE.Nouns))
{
ChangeTitle("Updating list of needed clean apps...");
SideloaderRCLONE.UpdateNouns(currentRemote);
}
ChangeTitle("Updating list of needed clean apps...");
SideloaderRCLONE.UpdateNouns(currentRemote);
ChangeTitle("Checking for Updates on server...");
SideloaderRCLONE.UpdateGameNotes(currentRemote);
listappsbtn();
ChangeTitle("Loaded");
});
t1.SetApartmentState(ApartmentState.STA);
t1.IsBackground = false;
t1.IsBackground = true;
if (HasInternet)
t1.Start();
showAvailableSpace();
intToolTips();
while (t1.IsAlive)
await Task.Delay(100);
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 (t1.IsAlive)
await Task.Delay(100);
ChangeTitle("Populating update list, please wait...");
listappsbtn();
initListView();
ChangeTitle("Loaded");
showAvailableSpace();
intToolTips();
ChangeTitle("");
downloadInstallGameButton.Enabled = true;
progressBar.Style = ProgressBarStyle.Continuous;
isLoading = false;
}
@@ -328,14 +329,9 @@ namespace AndroidSideloader
void timer_Tick2(object sender, EventArgs e)
{
keyheld = false;
}
void timer_Tick3(object sender, EventArgs e)
{
keyheld2 = false;
}
public async void ChangeTitle(string txt, bool reset = true)
{
try
@@ -356,7 +352,8 @@ namespace AndroidSideloader
if (!ProgressText.IsDisposed)
ProgressText.Text = oldTitle;
});
} catch
}
catch
{
}
@@ -364,7 +361,6 @@ namespace AndroidSideloader
private void ShowSubMenu(Panel subMenu)
{
if (subMenu.Visible == false)
@@ -573,16 +569,18 @@ namespace AndroidSideloader
{
DeviceConnected = false;
this.Text = "No Device Connected";
DialogResult dialogResult = FlexibleMessageBox.Show("No device found. Please ensure the following: \n\n -Developer mode is enabled. \n -ADB drivers are installed. \n -ADB connection is enabled on your device (this can reset). \n -Your device is plugged in.\n\nThen press \"Retry\"", "No device found.", MessageBoxButtons.RetryCancel);
if (dialogResult == DialogResult.Retry)
if (!Properties.Settings.Default.nodevicemode)
{
devicesbutton.PerformClick();
DialogResult dialogResult = FlexibleMessageBox.Show("No device found. Please ensure the following: \n\n -Developer mode is enabled. \n -ADB drivers are installed. \n -ADB connection is enabled on your device (this can reset). \n -Your device is plugged in.\n\nThen press \"Retry\"", "No device found.", MessageBoxButtons.RetryCancel);
if (dialogResult == DialogResult.Retry)
{
devicesbutton.PerformClick();
}
else
{
return;
}
}
else
{
return;
}
});
@@ -716,6 +714,7 @@ namespace AndroidSideloader
m_combo.Invoke(() => { m_combo.Items.Clear(); });
var line = listapps().Split('\n');
string forsettings = String.Join("", line);
Properties.Settings.Default.InstalledApps = forsettings;
Properties.Settings.Default.Save();
@@ -746,9 +745,10 @@ namespace AndroidSideloader
m_combo.Invoke(() => { m_combo.MatchingMethod = StringMatchingMethod.NoWildcards; });
}
public static bool isworking = false;
private async void getApkButton_Click(object sender, EventArgs e)
{
ADB.WakeDevice();
if (m_combo.SelectedIndex == -1)
@@ -756,52 +756,67 @@ namespace AndroidSideloader
notify("Please select an app first");
return;
}
progressBar.Style = ProgressBarStyle.Marquee;
string GameName = m_combo.SelectedItem.ToString();
string packageName = Sideloader.gameNameToPackageName(GameName);
if (Directory.Exists($"{Properties.Settings.Default.MainDir}\\{packageName}"))
if (!isworking)
{
isworking = true;
progressBar.Style = ProgressBarStyle.Marquee;
string HWID = SideloaderUtilities.UUID();
string GameName = m_combo.SelectedItem.ToString();
string packageName = Sideloader.gameNameToPackageName(GameName);
string InstalledVersionCode = ADB.RunAdbCommandToString($"shell \"dumpsys package {packageName} | grep versionCode -F\"").Output;
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingBeforeFirst(InstalledVersionCode, "versionCode=");
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingAfterFirst(InstalledVersionCode, " ");
ulong VersionInt = UInt64.Parse(Utilities.StringUtilities.KeepOnlyNumbers(InstalledVersionCode));
if (Directory.Exists($"{Properties.Settings.Default.MainDir}\\{packageName}"))
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
if (File.Exists($"{Properties.Settings.Default.MainDir}\\{packageName} v{VersionInt}.zip"))
File.Delete($"{Properties.Settings.Default.MainDir}\\{packageName} v{VersionInt}.zip");
if (File.Exists($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{VersionInt}.zip"))
File.Delete($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{VersionInt}.zip");
ProcessOutput output = new ProcessOutput("", "");
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);
});
t1.IsBackground = true;
t1.Start();
while (t1.IsAlive)
await Task.Delay(100);
ChangeTitle("Extracting obb if it exists....");
Thread t2 = new Thread(() =>
{
output += ADB.RunAdbCommandToString($"pull \"/sdcard/Android/obb/{packageName}\" \"{Properties.Settings.Default.MainDir}\\{packageName}\"");
});
t2.IsBackground = true;
t2.Start();
while (t2.IsAlive)
await Task.Delay(100);
ChangeTitle("Zipping extracted application...");
string cmd = $"7z a {packageName}v{VersionInt}.zip .\\{packageName}\\*";
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
Thread t3 = new Thread(() =>
{
ADB.RunCommandToString(cmd, path);
});
t3.IsBackground = true;
t3.Start();
while (t3.IsAlive)
await Task.Delay(100);
File.Move($"{Properties.Settings.Default.MainDir}\\{packageName}v{VersionInt}.zip", $"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{VersionInt}.zip");
FlexibleMessageBox.Show($"The app has been zipped and placed on your desktop as\n\n{GameName} v{VersionInt}.zip\n\nPlease upload this file to a free file hosting service like\n https://1fichier.com or https://mega.nz and share the link with a moderator.");
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
ProcessOutput output = new ProcessOutput("", "");
ChangeTitle("Extracting APK....");
Directory.CreateDirectory($"{Properties.Settings.Default.MainDir}\\{packageName}");
Thread t1 = new Thread(() =>
{
output = Sideloader.getApk(GameName);
});
t1.IsBackground = true;
t1.Start();
while (t1.IsAlive)
await Task.Delay(100);
ChangeTitle("Extracting obb if it exists....");
Thread t2 = new Thread(() =>
{
output += ADB.RunAdbCommandToString($"pull \"/sdcard/Android/obb/{packageName}\" \"{Properties.Settings.Default.MainDir}\\{packageName}\"");
});
t2.IsBackground = true;
t2.Start();
while (t2.IsAlive)
await Task.Delay(100);
ChangeTitle("Zipping extracted application...");
string cmd = $"7z a {packageName}.zip {packageName}";
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
Thread t3 = new Thread(() =>
{
ADB.RunCommandToString(cmd, path);
});
t3.IsBackground = true;
t3.Start();
while (t3.IsAlive)
await Task.Delay(100);
File.Move($"{Properties.Settings.Default.MainDir}\\{packageName}.zip", $"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName}.zip");
FlexibleMessageBox.Show($"The app has been zipped and placed on your desktop as\n\n{GameName}.zip\n\nPlease upload this file to a free file hosting service like\n https://1fichier.com or https://mega.nz and share the link with a moderator.");
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
progressBar.Style = ProgressBarStyle.Continuous;
ChangeTitle("");
progressBar.Style = ProgressBarStyle.Continuous;
ChangeTitle("");
isworking = false;
}
else MessageBox.Show("You must wait until each app is finished extracting to start another.");
}
private async void uninstallAppButton_Click(object sender, EventArgs e)
@@ -907,10 +922,12 @@ namespace AndroidSideloader
private async void Form1_DragDrop(object sender, DragEventArgs e)
{
DragDropLbl.Visible = false;
ProcessOutput output = new ProcessOutput("", "");
ADB.WakeDevice();
ADB.DeviceID = GetDeviceID();
progressBar.Style = ProgressBarStyle.Marquee;
Thread t1 = new Thread(() =>
{
@@ -923,8 +940,9 @@ namespace AndroidSideloader
string path = $"{dir}\\Install.txt";
if (Directory.Exists(data))
{
Program.form.ChangeTitle($"Copying {data} to device...");
output += ADB.CopyOBB(data);
Program.form.ChangeTitle("");
Program.form.ChangeTitle($"");
string extension = Path.GetExtension(data);
if (extension == ".apk")
{
@@ -939,6 +957,7 @@ namespace AndroidSideloader
else
ChangeTitle("Sideloading custom install.txt automatically.");
output += Sideloader.RunADBCommandsFromFile(path);
Logger.Log($"Sideloading {path}");
if (output.Error.Contains("mkdir"))
output.Error = "";
if (output.Error.Contains("reserved"))
@@ -950,15 +969,31 @@ namespace AndroidSideloader
foreach (string file2 in files)
{
if (File.Exists(file2))
{
if (file2.EndsWith(".apk"))
{
ChangeTitle($"Installing apk... (If this hangs, uninstall app first then install again)");
output += ADB.Sideload(file2);
}
if (file2.EndsWith(".zip") && Properties.Settings.Default.BMBFchecked)
{
string datazip = file2;
string zippath = Path.GetDirectoryName(data);
datazip = datazip.Replace(zippath, "");
datazip = Utilities.StringUtilities.RemoveEverythingAfterFirst(datazip, ".");
datazip = datazip.Replace(".", "");
string command2 = $"\"{Properties.Settings.Default.MainDir}\\7z.exe\" e \"{file2}\" -o\"{zippath}\\{datazip}\\\"";
ADB.RunCommandToString(command2, file2);
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" /sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/");
Directory.Delete($"{zippath}\\{datazip}", true);
}
}
}
string[] folders = Directory.GetDirectories(data);
foreach (string folder in folders)
{
Program.form.ChangeTitle($"Copying {folder} to device...");
output += ADB.CopyOBB(folder);
Program.form.ChangeTitle("");
Properties.Settings.Default.CurrPckg = dir;
@@ -988,11 +1023,14 @@ namespace AndroidSideloader
else
{
ChangeTitle($"Installing {Path.GetFileName(data)}...");
ChangeTitle($"Installing apk... (If this hangs, uninstall app first then install again)");
output += ADB.Sideload(data);
ChangeTitle("");
}
}
//If obb is dragged and dropped alone onto Rookie, Rookie will recreate its obb folder automatically with this code.
else if (extension == ".obb")
{
string filename = Path.GetFileName(data);
@@ -1007,7 +1045,21 @@ namespace AndroidSideloader
Directory.Delete(foldername, true);
ChangeTitle("");
}
// BMBF Zip extraction then push to BMBF song folder on Quest.
else if (extension == ".zip" && Properties.Settings.Default.BMBFchecked)
{
string datazip = data;
string zippath = Path.GetDirectoryName(data);
datazip = datazip.Replace(zippath, "");
datazip = Utilities.StringUtilities.RemoveEverythingAfterFirst(datazip, ".");
datazip = datazip.Replace(".", "");
string command = $"\"{Properties.Settings.Default.MainDir}\\7z.exe\" e \"{data}\" -o\"{zippath}\\{datazip}\\\"";
ADB.RunCommandToString(command, data);
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" /sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/");
Directory.Delete($"{zippath}\\{datazip}", true);
}
else if (extension == ".txt")
{
ChangeTitle("Sideloading custom install.txt automatically.");
@@ -1030,6 +1082,9 @@ namespace AndroidSideloader
DragDropLbl.Visible = false;
ShowPrcOutput(output);
listappsbtn();
initListView();
}
private void Form1_DragEnter(object sender, DragEventArgs e)
@@ -1043,6 +1098,8 @@ namespace AndroidSideloader
private void Form1_DragLeave(object sender, EventArgs e)
{
DragDropLbl.Visible = false;
DragDropLbl.Text = "";
ChangeTitle("");
}
private async void initListView()
{
@@ -1056,7 +1113,6 @@ namespace AndroidSideloader
{
gamesListView.Columns.Add(column, 150);
}
List<ListViewItem> GameList = new List<ListViewItem>();
foreach (string[] release in SideloaderRCLONE.games)
{
@@ -1123,9 +1179,9 @@ namespace AndroidSideloader
}
}
}
if (!GameName.Contains("Beat Saber") && !dontget)
if (!GameName.Contains("Beat Saber") && !dontget && !updatesnotified && SideloaderRCLONE.games.Count > 0)
{
DialogResult dialogResult = FlexibleMessageBox.Show($"It seems you have a newer version of:\n\n{GameName}\n\nPlease consider sharing the updated files with us.\nThis is the only way to keep the apps up to date for everyone.\nWould you like to share the files with us?\n\nNOTE: Rookie will only extract the APK/OBB which contain NO personal information whatsoever.", "Share clean files?", MessageBoxButtons.YesNo);
DialogResult dialogResult = FlexibleMessageBox.Show($"It seems you have a newer version of:\n\n{GameName}\n\nAll apps on Rookie are from donors, please share the updated files with us.\nThis is the only way to keep the apps up to date for everyone.\n\nNOTE: Rookie will only extract the APK/OBB which contain NO personal information whatsoever.", "Share clean files?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Thread t1 = new Thread(() =>
@@ -1136,7 +1192,7 @@ namespace AndroidSideloader
t1.Start();
while (t1.IsAlive)
await Task.Delay(100);
await Task.Delay(1000);
ChangeTitle("Extracting obb if it exists....");
Thread t2 = new Thread(() =>
{
@@ -1146,18 +1202,20 @@ namespace AndroidSideloader
t2.Start();
while (t2.IsAlive)
await Task.Delay(100);
await Task.Delay(1000);
ChangeTitle("Zipping extracted application...");
string cmd = $"7z a {packagename}.zip {packagename}";
string cmd = $"7z a {packagename}v{installedVersionInt}.zip .\\{packagename}\\*";
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
Thread t3 = new Thread(() =>
{
string HWID = SideloaderUtilities.UUID();
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\{packagename}\\HWID.txt", HWID);
ADB.RunCommandToString(cmd, path);
if (File.Exists($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName}.zip"))
File.Delete($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName}.zip");
File.Move($"{Properties.Settings.Default.MainDir}\\{packagename}.zip", $"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName}.zip");
FlexibleMessageBox.Show($"The app has been zipped and placed on your desktop as\n\n{GameName}.zip\n\nPlease upload this file to a free file hosting service like\n https://1fichier.com or https://mega.nz \nThen share the link to the moderators listed in the\npinned message on Telegram.");
if (File.Exists($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{installedVersionInt}.zip"))
File.Delete($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{installedVersionInt}.zip");
File.Move($"{Properties.Settings.Default.MainDir}\\{packagename}v{installedVersionInt}.zip", $"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{installedVersionInt}.zip");
FlexibleMessageBox.Show($"The app has been zipped and placed on your desktop as\n\n{GameName} v{installedVersionInt}.zip\n\nPlease upload this file to a free file hosting service like\n https://1fichier.com or https://mega.nz \nThen share the link to the moderators listed in the\npinned message on Telegram.");
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packagename}", true);
});
t3.IsBackground = true;
@@ -1169,10 +1227,7 @@ namespace AndroidSideloader
progressBar.Style = ProgressBarStyle.Continuous;
ChangeTitle("");
}
else MessageBox.Show("Ok, we understand, but remember: If everyone said No then none of this would exist!\nPlease reconsider and share the files so everyone can benefit!");
}
}
}
}
catch (Exception ex)
@@ -1192,6 +1247,7 @@ namespace AndroidSideloader
gamesListView.BeginUpdate();
gamesListView.Items.AddRange(arr);
gamesListView.EndUpdate();
updatesnotified = true;
}
@@ -1201,6 +1257,10 @@ namespace AndroidSideloader
remotesList.Invoke(() => { index = remotesList.SelectedIndex; remotesList.Items.Clear(); });
string[] mirrors = RCLONE.runRcloneCommand("listremotes").Output.Split('\n');
string item = "VRP-mirror07";
string item2 = "VRP-mirror09";
mirrors = mirrors.Where(val => val != item).ToArray();
mirrors = mirrors.Where(val => val != item2).ToArray();
Logger.Log("Loaded following mirrors: ");
int itemsCount = 0;
@@ -1208,9 +1268,12 @@ namespace AndroidSideloader
{
if (mirror.Contains("mirror"))
{
Logger.Log(mirror.Remove(mirror.Length - 1));
remotesList.Invoke(() => { remotesList.Items.Add(mirror.Remove(mirror.Length - 1).Replace("VRP-mirror", "")); });
itemsCount++;
}
}
@@ -1318,7 +1381,7 @@ without him none of this would be possible
private async void listApkButton_Click(object sender, EventArgs e)
{
ADB.WakeDevice();
ChangeTitle("Refreshing connected devices, installed apps and update list...");
if (isLoading)
return;
isLoading = true;
@@ -1340,6 +1403,7 @@ without him none of this would be possible
initListView();
progressBar.Style = ProgressBarStyle.Continuous;
isLoading = false;
ChangeTitle("");
}
private static readonly HttpClient client = new HttpClient();
@@ -1349,7 +1413,7 @@ without him none of this would be possible
private bool gamesAreDownloading = false;
private List<string> gamesQueueList = new List<string>();
private int quotaTries = 0;
public static bool timerticked = false;
public void SwitchMirrors()
{
quotaTries++;
@@ -1374,7 +1438,7 @@ without him none of this would be possible
{
progressBar.Style = ProgressBarStyle.Marquee;
if (gamesListView.SelectedItems.Count == 0) return;
string namebox = gamesListView.SelectedItems[0].ToString();
string nameboxtranslated = Sideloader.gameNameToSimpleName(namebox);
ChangeTitle($"Checking filesize of {nameboxtranslated}...");
@@ -1543,9 +1607,9 @@ without him none of this would be possible
if (gameDownloadOutput.Error.Length > 0)
{
string err = gameDownloadOutput.Error.ToLower();
if (err.Contains("quota") && err.Contains("exceeded"))
err += gameDownloadOutput.Output.ToLower();
if (err.Contains("quota") && err.Contains("exceeded") || err.Contains("directory not found"))
{
FlexibleMessageBox.Show("The download Quota has been reached for this mirror, trying to switch mirrors...");
quotaError = true;
@@ -1595,56 +1659,45 @@ without him none of this would be possible
await Task.Delay(100);
}
}
else
else if (!isinstalltxt)
{
if (!isinstalltxt)
if (extension == ".apk")
{
if (extension == ".apk")
CurrAPK = file;
CurrPCKG = packagename;
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
t.Interval = 60000; // 60 seconds to fail
t.Tick += new EventHandler(timer_Tick4);
t.Start();
Thread apkThread = new Thread(() =>
{
Thread apkThread = new Thread(() =>
{
output += ADB.Sideload(file, packagename);
});
Program.form.ChangeTitle($"Sideloading apk...");
output += ADB.Sideload(file, packagename);
});
apkThread.Start();
while (apkThread.IsAlive)
await Task.Delay(100);
t.Stop();
}
apkThread.Start();
while (apkThread.IsAlive)
await Task.Delay(100);
}
Debug.WriteLine(wrDelimiter);
string[] folders = Directory.GetDirectories(Environment.CurrentDirectory + "\\" + gameName);
foreach (string folder in folders)
Debug.WriteLine(wrDelimiter);
if (Directory.Exists($"{Environment.CurrentDirectory}\\{gameName}\\{packagename}"))
{
Thread obbThread = new Thread(() =>
{
ChangeTitle("Installing game obb " + gameName, false);
string[] obbs = Directory.GetFiles(folder);
foreach (string currObb in obbs)
{
Thread obbThread = new Thread(() =>
{
string obbcontainingdir = Path.GetFileName(folder);
ChangeTitle($"Copying {obbcontainingdir} obb to device...");
output += ADB.CopyOBB(folder);
Program.form.ChangeTitle("");
});
obbThread.IsBackground = true;
obbThread.Start();
ChangeTitle($"Copying {packagename} obb to device...");
output += ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{gameName}\\{packagename}\" \"/sdcard/Android/obb\"");
Program.form.ChangeTitle("");
});
obbThread.IsBackground = true;
obbThread.Start();
while (obbThread.IsAlive)
await Task.Delay(100);
}
}
while (obbThread.IsAlive)
await Task.Delay(100);
}
}
}
if (Properties.Settings.Default.deleteAllAfterInstall)
{
ChangeTitle("Deleting game files", false);
@@ -1672,6 +1725,68 @@ without him none of this would be possible
}
}
private async void timer_Tick4(object sender, EventArgs e)
{
ProcessOutput output = new ProcessOutput("", "");
if (!timerticked)
{
timerticked = true;
string[] blacklist = File.ReadAllLines($"{Environment.CurrentDirectory}\\installedPackages.json");
bool isinstalled = false;
foreach (string blacklistpckg in blacklist)
{
if (blacklistpckg.Contains(CurrPCKG))
{
isinstalled = true;
}
}
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)
{
Thread reinstallThread = new Thread(() =>
{
ChangeTitle("Preforming 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.Sideload(CurrAPK);
ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{CurrPCKG}\" /sdcard/Android/data/");
listappsbtn();
initListView();
});
reinstallThread.IsBackground = true;
reinstallThread.Start();
while (reinstallThread.IsAlive)
await Task.Delay(100);
timerticked = false;
if (Directory.Exists($"{Environment.CurrentDirectory}\\{CurrPCKG}"))
Directory.Delete($"{Environment.CurrentDirectory}\\{CurrPCKG}", true);
ChangeTitle("");
}
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)
{
ChangeTitle("Stopping Install...");
ADB.RunAdbCommandToString("kill-server");
ADB.RunAdbCommandToString("devices");
}
else
{
return;
}
}
}
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
RCLONE.killRclone();
@@ -1853,6 +1968,12 @@ without him none of this would be possible
label4.Visible = true;
searchTextBox.Focus();
}
if (keyData == (Keys.Control | Keys.H))
{
string HWID = SideloaderUtilities.UUID();
Clipboard.SetText(HWID);
FlexibleMessageBox.Show($"Your unique HWID is:\n\n{HWID}\n\nThis has been automatically copied to your clipboard. Press CTRL+V in a message to send it.");
}
if (keyData == (Keys.Control | Keys.R))
{
ADBcommandbox.Visible = true;
@@ -1948,14 +2069,20 @@ without him none of this would be possible
if (keyData == (Keys.F12))
{
if (File.Exists($"{Properties.Settings.Default.CurrentCrashPath}"))
{
RCLONE.runRcloneCommand($"copy \"{Properties.Settings.Default.CurrentCrashPath}\" RSL-debuglogs:CrashLogs");
FlexibleMessageBox.Show($"Your CrashLog has been copied to the server. Please mention your DebugLog ID ({Properties.Settings.Default.CurrentCrashName}) to the Mods (it has been automatically copied to your clipboard).");
Clipboard.SetText(Properties.Settings.Default.CurrentCrashName);
}
else
FlexibleMessageBox.Show("No CrashLog found in Rookie directory.");
else
FlexibleMessageBox.Show("No CrashLog found in Rookie directory.");
}
return base.ProcessCmdKey(ref msg, keyData);
@@ -2010,26 +2137,25 @@ without him none of this would be possible
Clipboard.SetText(CurrentPackageName);
keyheld2 = true;
}
if (!keyheld)
string ImagePath = "";
if (File.Exists($"{SideloaderRCLONE.ThumbnailsFolder}\\{CurrentPackageName}.jpg"))
ImagePath = $"{SideloaderRCLONE.ThumbnailsFolder}\\{CurrentPackageName}.jpg";
else if (File.Exists($"{SideloaderRCLONE.ThumbnailsFolder}\\{CurrentPackageName}.png"))
ImagePath = $"{SideloaderRCLONE.ThumbnailsFolder}\\{CurrentPackageName}.png";
if (gamesPictureBox.BackgroundImage != null)
gamesPictureBox.BackgroundImage.Dispose();
if (File.Exists(ImagePath) && !keyheld)
{
string ImagePath = "";
if (File.Exists($"{SideloaderRCLONE.ThumbnailsFolder}\\{CurrentPackageName}.jpg"))
ImagePath = $"{SideloaderRCLONE.ThumbnailsFolder}\\{CurrentPackageName}.jpg";
else if (File.Exists($"{SideloaderRCLONE.ThumbnailsFolder}\\{CurrentPackageName}.png"))
ImagePath = $"{SideloaderRCLONE.ThumbnailsFolder}\\{CurrentPackageName}.png";
if (gamesPictureBox.BackgroundImage != null)
gamesPictureBox.BackgroundImage.Dispose();
if (File.Exists(ImagePath) && !keyheld)
{
gamesPictureBox.BackgroundImage = Image.FromFile(ImagePath);
}
else
gamesPictureBox.BackgroundImage = new Bitmap(367, 214);
keyheld = true;
gamesPictureBox.BackgroundImage = Image.FromFile(ImagePath);
}
else
gamesPictureBox.BackgroundImage = new Bitmap(367, 214);
keyheld = true;
string NotePath = $"{SideloaderRCLONE.NotesFolder}\\{CurrentReleaseName}.txt";
if (File.Exists(NotePath))
notesRichTextBox.Text = File.ReadAllText(NotePath);

View File

@@ -574,5 +574,41 @@ namespace AndroidSideloader.Properties {
this["QblindOn"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool adbdebugwarned {
get {
return ((bool)(this["adbdebugwarned"]));
}
set {
this["adbdebugwarned"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool nodevicemode {
get {
return ((bool)(this["nodevicemode"]));
}
set {
this["nodevicemode"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool BMBFchecked {
get {
return ((bool)(this["BMBFchecked"]));
}
set {
this["BMBFchecked"] = value;
}
}
}
}

View File

@@ -140,5 +140,14 @@
<Setting Name="QblindOn" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="adbdebugwarned" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="nodevicemode" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="BMBFchecked" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -90,7 +90,7 @@ namespace AndroidSideloader
rclone.WaitForExit();
//if there is one of these errors, we switch the mirrors
if (error.Contains("cannot fetch token") || error.Contains("authError") || (error.Contains("quota") || error.Contains("exceeded")))
if (error.Contains("cannot fetch token") || error.Contains("authError") || (error.Contains("quota") || error.Contains("exceeded") || error.Contains("directory not found")))
{
string oldRemote = MainForm.currentRemote;
try

View File

@@ -46,6 +46,8 @@
this.label2 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.CblindBox = new System.Windows.Forms.CheckBox();
this.nodevicemodeBox = new System.Windows.Forms.CheckBox();
this.bmbfBox = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
//
// checkForUpdatesCheckBox
@@ -55,7 +57,7 @@
this.checkForUpdatesCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.checkForUpdatesCheckBox.Location = new System.Drawing.Point(12, 12);
this.checkForUpdatesCheckBox.Name = "checkForUpdatesCheckBox";
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(142, 21);
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(148, 22);
this.checkForUpdatesCheckBox.TabIndex = 0;
this.checkForUpdatesCheckBox.Text = "Check for updates";
this.checkForUpdatesCheckBox.UseVisualStyleBackColor = true;
@@ -70,7 +72,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, 230);
this.applyButton.Location = new System.Drawing.Point(67, 280);
this.applyButton.Name = "applyButton";
this.applyButton.Size = new System.Drawing.Size(101, 31);
this.applyButton.TabIndex = 5;
@@ -85,7 +87,7 @@
this.enableMessageBoxesCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.enableMessageBoxesCheckBox.Location = new System.Drawing.Point(12, 39);
this.enableMessageBoxesCheckBox.Name = "enableMessageBoxesCheckBox";
this.enableMessageBoxesCheckBox.Size = new System.Drawing.Size(293, 21);
this.enableMessageBoxesCheckBox.Size = new System.Drawing.Size(309, 22);
this.enableMessageBoxesCheckBox.TabIndex = 1;
this.enableMessageBoxesCheckBox.Text = "Enable Message Boxes on task completed";
this.enableMessageBoxesCheckBox.UseVisualStyleBackColor = true;
@@ -100,7 +102,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, 230);
this.resetSettingsButton.Location = new System.Drawing.Point(174, 280);
this.resetSettingsButton.Name = "resetSettingsButton";
this.resetSettingsButton.Size = new System.Drawing.Size(101, 31);
this.resetSettingsButton.TabIndex = 4;
@@ -115,7 +117,7 @@
this.deleteAfterInstallCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.deleteAfterInstallCheckBox.Location = new System.Drawing.Point(12, 65);
this.deleteAfterInstallCheckBox.Name = "deleteAfterInstallCheckBox";
this.deleteAfterInstallCheckBox.Size = new System.Drawing.Size(279, 21);
this.deleteAfterInstallCheckBox.Size = new System.Drawing.Size(288, 22);
this.deleteAfterInstallCheckBox.TabIndex = 3;
this.deleteAfterInstallCheckBox.Text = "Delete games after download and install";
this.deleteAfterInstallCheckBox.UseVisualStyleBackColor = true;
@@ -128,7 +130,7 @@
this.updateConfigCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.updateConfigCheckBox.Location = new System.Drawing.Point(12, 92);
this.updateConfigCheckBox.Name = "updateConfigCheckBox";
this.updateConfigCheckBox.Size = new System.Drawing.Size(201, 21);
this.updateConfigCheckBox.Size = new System.Drawing.Size(208, 22);
this.updateConfigCheckBox.TabIndex = 6;
this.updateConfigCheckBox.Text = "Update config automatically";
this.updateConfigCheckBox.UseVisualStyleBackColor = true;
@@ -141,7 +143,7 @@
this.userJsonOnGameInstall.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.userJsonOnGameInstall.Location = new System.Drawing.Point(12, 119);
this.userJsonOnGameInstall.Name = "userJsonOnGameInstall";
this.userJsonOnGameInstall.Size = new System.Drawing.Size(233, 21);
this.userJsonOnGameInstall.Size = new System.Drawing.Size(243, 22);
this.userJsonOnGameInstall.TabIndex = 9;
this.userJsonOnGameInstall.Text = "Push random user.json on install";
this.userJsonOnGameInstall.UseVisualStyleBackColor = true;
@@ -155,9 +157,9 @@
this.BandwithTextbox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.BandwithTextbox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.BandwithTextbox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.BandwithTextbox.Location = new System.Drawing.Point(52, 198);
this.BandwithTextbox.Location = new System.Drawing.Point(52, 248);
this.BandwithTextbox.Name = "BandwithTextbox";
this.BandwithTextbox.Size = new System.Drawing.Size(177, 23);
this.BandwithTextbox.Size = new System.Drawing.Size(177, 24);
this.BandwithTextbox.TabIndex = 11;
//
// label1
@@ -165,9 +167,9 @@
this.label1.AutoSize = true;
this.label1.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label1.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.label1.Location = new System.Drawing.Point(40, 175);
this.label1.Location = new System.Drawing.Point(40, 225);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(235, 17);
this.label1.Size = new System.Drawing.Size(245, 18);
this.label1.TabIndex = 12;
this.label1.Text = "Download speed limiter, 0 to disable";
//
@@ -186,9 +188,9 @@
"K",
"M",
"G"});
this.BandwithComboBox.Location = new System.Drawing.Point(235, 198);
this.BandwithComboBox.Location = new System.Drawing.Point(235, 248);
this.BandwithComboBox.Name = "BandwithComboBox";
this.BandwithComboBox.Size = new System.Drawing.Size(55, 24);
this.BandwithComboBox.Size = new System.Drawing.Size(55, 26);
this.BandwithComboBox.TabIndex = 13;
//
// DebugLogCopy
@@ -200,7 +202,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, 275);
this.DebugLogCopy.Location = new System.Drawing.Point(29, 325);
this.DebugLogCopy.Name = "DebugLogCopy";
this.DebugLogCopy.Size = new System.Drawing.Size(285, 31);
this.DebugLogCopy.TabIndex = 5;
@@ -211,7 +213,7 @@
// crashlogID
//
this.crashlogID.AutoSize = true;
this.crashlogID.Location = new System.Drawing.Point(13, 406);
this.crashlogID.Location = new System.Drawing.Point(13, 441);
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);
@@ -226,7 +228,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, 310);
this.button1.Location = new System.Drawing.Point(29, 360);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(285, 31);
this.button1.TabIndex = 5;
@@ -237,7 +239,7 @@
// debuglogID
//
this.debuglogID.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
this.debuglogID.Location = new System.Drawing.Point(29, 386);
this.debuglogID.Location = new System.Drawing.Point(29, 436);
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);
@@ -252,7 +254,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, 357);
this.DebugID.Location = new System.Drawing.Point(29, 407);
this.DebugID.Margin = new System.Windows.Forms.Padding(2);
this.DebugID.Name = "DebugID";
this.DebugID.ReadOnly = true;
@@ -265,7 +267,7 @@
// label2
//
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
this.label2.Location = new System.Drawing.Point(29, 457);
this.label2.Location = new System.Drawing.Point(29, 507);
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);
@@ -282,7 +284,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, 440);
this.textBox1.Location = new System.Drawing.Point(29, 490);
this.textBox1.Margin = new System.Windows.Forms.Padding(2);
this.textBox1.Name = "textBox1";
this.textBox1.ReadOnly = true;
@@ -297,21 +299,47 @@
this.CblindBox.AutoSize = true;
this.CblindBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.CblindBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.CblindBox.Location = new System.Drawing.Point(12, 146);
this.CblindBox.Location = new System.Drawing.Point(12, 145);
this.CblindBox.Name = "CblindBox";
this.CblindBox.Size = new System.Drawing.Size(175, 21);
this.CblindBox.Size = new System.Drawing.Size(182, 22);
this.CblindBox.TabIndex = 9;
this.CblindBox.Text = "Enable colorblind mode";
this.CblindBox.UseVisualStyleBackColor = true;
this.CblindBox.CheckedChanged += new System.EventHandler(this.CblindBox_CheckedChanged);
this.CblindBox.Click += new System.EventHandler(this.CblindBox_Click);
//
// nodevicemodeBox
//
this.nodevicemodeBox.AutoSize = true;
this.nodevicemodeBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.nodevicemodeBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.nodevicemodeBox.Location = new System.Drawing.Point(12, 196);
this.nodevicemodeBox.Name = "nodevicemodeBox";
this.nodevicemodeBox.Size = new System.Drawing.Size(181, 22);
this.nodevicemodeBox.TabIndex = 9;
this.nodevicemodeBox.Text = "Enable no device mode";
this.nodevicemodeBox.UseVisualStyleBackColor = true;
this.nodevicemodeBox.CheckedChanged += new System.EventHandler(this.nodevicemodeBox_CheckedChanged);
//
// bmbfBox
//
this.bmbfBox.AutoSize = true;
this.bmbfBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.bmbfBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.bmbfBox.Location = new System.Drawing.Point(12, 170);
this.bmbfBox.Name = "bmbfBox";
this.bmbfBox.Size = new System.Drawing.Size(281, 22);
this.bmbfBox.TabIndex = 9;
this.bmbfBox.Text = "Enable BMBF song zips drag and drop";
this.bmbfBox.UseVisualStyleBackColor = true;
this.bmbfBox.CheckedChanged += new System.EventHandler(this.bmbfBox_CheckedChanged);
//
// 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, 535);
this.ClientSize = new System.Drawing.Size(342, 606);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.DebugID);
this.Controls.Add(this.crashlogID);
@@ -320,6 +348,8 @@
this.Controls.Add(this.BandwithComboBox);
this.Controls.Add(this.label1);
this.Controls.Add(this.BandwithTextbox);
this.Controls.Add(this.bmbfBox);
this.Controls.Add(this.nodevicemodeBox);
this.Controls.Add(this.CblindBox);
this.Controls.Add(this.userJsonOnGameInstall);
this.Controls.Add(this.updateConfigCheckBox);
@@ -366,5 +396,7 @@
public System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.CheckBox CblindBox;
private System.Windows.Forms.CheckBox nodevicemodeBox;
private System.Windows.Forms.CheckBox bmbfBox;
}
}

View File

@@ -33,6 +33,9 @@ namespace AndroidSideloader
deleteAfterInstallCheckBox.Checked = Properties.Settings.Default.deleteAllAfterInstall;
updateConfigCheckBox.Checked = Properties.Settings.Default.autoUpdateConfig;
userJsonOnGameInstall.Checked = Properties.Settings.Default.userJsonOnGameInstall;
nodevicemodeBox.Checked = Properties.Settings.Default.nodevicemode;
bmbfBox.Checked = Properties.Settings.Default.BMBFchecked;
if (Properties.Settings.Default.BandwithLimit.Length > 1)
{
BandwithTextbox.Text = Properties.Settings.Default.BandwithLimit.Remove(Properties.Settings.Default.BandwithLimit.Length - 1);
@@ -208,6 +211,18 @@ namespace AndroidSideloader
if (CblindBox.Checked)
MessageBox.Show("You must restart Rookie's Sideloader OR click Refresh Updates List for changes to take effect.\n\nNOTE: Colors in the legend at the top right of the main window of Rookie won't update until you restart the program.");
}
private void nodevicemodeBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.nodevicemode = nodevicemodeBox.Checked;
Properties.Settings.Default.Save();
}
private void bmbfBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.BMBFchecked = nodevicemodeBox.Checked;
Properties.Settings.Default.Save();
}
}
}

View File

@@ -62,7 +62,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
{
Program.form.ChangeTitle($"Running {cmd}");
Logger.Log($"Logging command: {cmd} from file: {path}");
output += ADB.RunCommandToString(cmd, path);
ADB.RunCommandToString(cmd, path);
}
if (cmd.StartsWith("adb"))
{
@@ -183,9 +183,12 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
apkPath = apkPath.Remove(apkPath.Length - 1);
apkPath = apkPath.Remove(0, 8); //remove package:
apkPath = apkPath.Remove(apkPath.Length - 1);
if (File.Exists($"{Properties.Settings.Default.ADBFolder}\\base.apk"))
File.Delete($"{Properties.Settings.Default.ADBFolder}\\base.apk");
if (File.Exists($"{Properties.Settings.Default.MainDir}\\{packageName}\\{packageName}.apk"))
File.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}\\{packageName}.apk");
output += ADB.RunAdbCommandToString("pull " + apkPath); //pull apk
if (Directory.Exists($"{Properties.Settings.Default.MainDir}\\{packageName}"))
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
@@ -229,6 +232,17 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
return gameName;
}
public static string PackageNameToSimpleName(string gameName)
{
foreach (string[] game in SideloaderRCLONE.games)
{
if (gameName.Contains(game[SideloaderRCLONE.PackageNameIndex]))
return game[SideloaderRCLONE.GameNameIndex];
}
return gameName;
}
//Downloads the required files
public static void downloadFiles()
{

View File

@@ -76,7 +76,7 @@ namespace AndroidSideloader
{
gameProperties.Clear();
games.Clear();
string tempGameList = RCLONE.runRcloneCommand($"cat \"{remote}:{RcloneGamesFolder}/GameList.txt\"").Output;
string tempGameList = RCLONE.runRcloneCommand($"cat \"{remote}:{RcloneGamesFolder}/GameList.txt\"").Output;
if (MainForm.debugMode)
File.WriteAllText("GamesList.txt", tempGameList);
string gamePropertiesLine = Utilities.StringUtilities.RemoveEverythingAfterFirst(tempGameList, "\n");

View File

@@ -1,4 +1,8 @@
using System.IO;
using System;
using System.IO;
using System.Management;
using System.Security.Cryptography;
using System.Text;
namespace AndroidSideloader
{
@@ -13,5 +17,47 @@ namespace AndroidSideloader
return true;
return false;
}
public static string UUID()
{
StringBuilder sb = new StringBuilder();
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Processor");
foreach (ManagementObject queryObj in searcher.Get())
{
sb.Append(queryObj["NumberOfCores"]);
sb.Append(queryObj["ProcessorId"]);
sb.Append(queryObj["Name"]);
sb.Append(queryObj["SocketDesignation"]);
}
searcher = new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_BIOS");
foreach (ManagementObject queryObj in searcher.Get())
{
sb.Append(queryObj["Manufacturer"]);
sb.Append(queryObj["Name"]);
sb.Append(queryObj["Version"]);
}
searcher = new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_BaseBoard");
foreach (ManagementObject queryObj in searcher.Get())
{
sb.Append(queryObj["Product"]);
}
var bytes = Encoding.ASCII.GetBytes(sb.ToString());
SHA256Managed sha = new SHA256Managed();
byte[] hash = sha.ComputeHash(bytes);
return BitConverter.ToString(hash).Replace("-", "");
}
}
}

View File

@@ -17,7 +17,7 @@ namespace AndroidSideloader
private static string RawGitHubUrl;
private static string GitHubUrl;
static readonly public string LocalVersion = "2.5.1";
static readonly public string LocalVersion = "2.7";
public static string currentVersion = string.Empty;
public static string changelog = string.Empty;

View File

@@ -1,82 +1,42 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
RSL 2.5.1
+ Added PARTIAL SEARCH compatibility to Quick Search. Quick
Search now works if users type one word or one part of a word
that matches a release. For example if an app was named
"Supercool Awesome Application", typing "Application",
"Awesome", or even "Cool" would work as it works with parts of
words as well.
RSL 2.7
NOTE:As a reminder you can open Quick Search with F2, CTRL+F
or by cllicking on the Quick Search magnifying glass icon.
+ Added a blocklist for apps that can't be updated for various
reasons. This will prevent users from being asked to send apps
that cannot be used.
+ Added .png support for gameslist thumbnails.
+ Added tip under Notes section at launch to remind users they
can press F1 to view all of the program shortcuts added in a
prior update.
= Some minor syntax updates.
+ Added BMBF drag and drop option for Quest users
in SETTINGS menu.If users drag and drop BMBF song
zip files onto rookie either one by one, an entire
folder, or many zips at once Rookie will automatically
extract the files to a folder then push the folder
to your device then delete the extraction folder.
+ Added automatic timeout during APK install that
will ask user if they'd like Rookie to automatically
uninstall and reinstall the app. Rookie will check
for save data and copy it to a folder temporarily
then put it back after reinstall.
= Cleaned up startup tasks so booting Rookie should
be faster.
= Added automatic deletion of previous crashlog to
decrease clutter in Rookie directory.
= Added automatic installed app refresh after drag
and drop.
HFP
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEGqr8ACgkQx/Rql1Vo
czftJA//ePxg5+fuAoYNfl2D8yKpzhkvQldkdZia1GJiHBb4CJBwdhMDpDeNhKzO
ziJ5yBNLqx6wWSbHV70PF4fagASA81FeLbJxdJX4gFgtX9MpzoR2ppK+Gy1UYVGw
ij1fjQIIIHXyAVDgaS4DcRQrgxtc6R2G3iey3EBaxtaWDh2cR3sWdR6QMcZSJ/0S
/QLXROCCCIHc1mTsf37b2qQVQ/v2Yk/UAGSV6/VdN78QE7Z8dPqCLZvM+10mfXTE
AOJ6WkZBVA7HkpRgEGVtTLor+kwDROshkq+eM7yMREFv6GwHtd5H0hHGhRr/FoVW
E99TfabD9Rd5P7tvcYm2c6Diu7yz2ai7l7N6G77wr+lOfsmIniHeUYEWsPOcZHQH
P+0Xvx84cHj6Dd2+zfCWcI/jPamfgzgxrBS/pSXJ5ktdrCiJRnqeU9FhJxhGF002
7+iIZTumhAU4ab8LhSzkMg+hwhzTrhmgbeZE1jdwLiLQ3vyYszEB5zflubt86pLq
WXVvupQKtCGek1B3ETvU2YzNaQe6vVjqrh0sHkwgYgwfhLg9+gc+c3Rtq6ighqfc
KNDocmVcNOJMNkre/DOTmVU6ULg22pXlj0PgWkxph/vt1SegMbPMVGUJD0ncIqL8
eQbzNOltkzALWel4S2Itvv/JgoDU1YDupJmZNh66ihKBuIdcT0k=
=wU75
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmENfVMACgkQx/Rql1Vo
czcxaw//bTVxR5gt1F4c+gDT80dVfJa1Js3h5vSjGgCHjQdmsU6eaU5BQGoUorkw
6ewYF48jt84xDNj/VirkeqHV95mvsj9sksi+mxvELnAa0NdRVYj0DCqZWB/mNDfx
lYZGp2SwiGK3a6KfMpPcbi2IEWqc9ZWpdazIDy6l3oGSBAYaoVqfjl+CJQQpomIJ
x7f67Ei633dyhu8+0612LVu+tZ4ibN2pAAu1Dd5+uvlODUiYLPadhZkLwk+CYC6p
ifs/1qB/fsXJS6YJyPCmuZCbYN//jLCD9ECQ5cqZbTTU82Ub2lDE+TcdO/CsxSxU
pueIxZ+7C5TceiNzsDfKfeCWu65hZlBW1xKReDtLPFzZdZuyXYTI0v00kvapwJIO
C9Eq2qxZvdnp05tw8nY1V4Ae5Jl6oLN0BwWSZv50NhQ4Dpmbl8pemk1r5iZsRhGA
MWQCytBCaX/3EpJda8ifGJxj3kOno2ewbwXdZEMN7QqWt1scN9HxNXFWEJwO29HV
pT6ra3T0OrOBLmCQGt4w71HGFK2t+c7aPq0yI/sayguB9zjR/GpTyekg7nHXZh9g
c+WD5umN2xA0LuLjvvePKhhKTBT6ebmQJh1CRNIRtA150ULbnTAIpZJTDZyhcLXi
IUfWyWPA4G3GsRUqGWf97O2G2bIbbIzLeg3uEdxF7T9LOigYgpU=
=Rwj0
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
RSL 2.5
+ Upgraded Extract APK from device to Extract APP to Desktop.
RSL will now automatically extract the APK file, then extract
the obb if there is any for the selected app, then it will
compress both into a zip file and place it on the desktop so
users can share their apps without issue.
+ Added automatic detection of apps that are more updated than
the database user is connecting to, and if they are a pop up
will ask if user wants to share the app.
= Fixed issue where copying a folder containing an obb folder
via drag and drop would cause the containing folder to be copied
to the obb folder as well.
= Changelog.txt now only contains the 3 most recent updates
including the most current, the older changelogs can be found
in the ChangelogHistory text file.
HFP
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEFcMEACgkQx/Rql1Vo
czdoWA//cbngmK/it4fy6Hy/5JMGubJvCb0Ar+KY0UCO5FR60Q+ADCrkhPDEaWif
xnM+h4CLqyHUD0NipUxsjZ4j25VRMA20eTy3jiLKSZKq6P6KD+oRv0Tx3vTEs61U
wJdQsWK81cC9+BnhCBDuWpDJ/nCqO9ZJBYdKX0+KuYTVZwaaZSfMXD1dgQsrCQCq
zU5kgrsl+LDUJknnpfda521pbACgHlZ/Cb3bztqgnSviF38jFuYsJe7hJVjsINYz
j6HtmT+vn3Rxhk6uRTtUNhM1YVvuKzsZtUNvqd7cjT3FJXWuuoP8mgdauSahVnpQ
jMLu/dMLx0PkRXox/D8/69tDA1dxNZozXvws0OQfmNlzLfLGPZdVSWVjfU+P0feA
hMZiVICyAAJPnzfNAfVq2yDpU5wJbAhj3qG+Lj9Ox4dpmn7AUrjoUCFZxhZIZJi1
KKKz+7Q9ZDkcFODCUzZAdrI0MP7MNrsfPl8jxSCLYFe6LUIOfTAakBkxOY9x02lF
x08jfbpAsJHU3Wm8bruk+nkB+65J5kqsLkJk2n4yrkW3QtIo9xul/z9vgZKo75S6
LkPCpNo2w5gtx7+8Jv65Z/BlueUVmVWUHhQ2gHRkXenkg3McEZpqwKInqQSZkHpZ
USckVtW+iteVVR0yf+hFPRGp+Shz6/GIn9YnwVQCT2DK+ih9zD4=
=0bPq
-----END PGP SIGNATURE-----

View File

@@ -1 +1 @@
2.5.1
2.7