Merge pull request #137 from VRPirates/beta/RSL-2.30

Beta/rsl 2.30
This commit is contained in:
Fenopy
2024-09-17 10:12:05 -05:00
committed by GitHub
45 changed files with 1897 additions and 8417 deletions

8
ADB.cs
View File

@@ -201,10 +201,10 @@ namespace AndroidSideloader
{
Program.form.Invoke(() =>
{
DialogResult dialogResult = FlexibleMessageBox.Show(Program.form, "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);
DialogResult dialogResult = FlexibleMessageBox.Show(Program.form, "On your headset, click on the Notifications Bell, and then select the USB Detected notification to enable Connections.", "ADB Debugging not enabled.", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.Cancel)
{
Properties.Settings.Default.adbdebugwarned = true;
// Properties.Settings.Default.adbdebugwarned = true;
Properties.Settings.Default.Save();
}
});
@@ -283,7 +283,7 @@ namespace AndroidSideloader
Program.form.changeTitle("Performing reinstall, please wait...");
_ = ADB.RunAdbCommandToString("kill-server");
_ = ADB.RunAdbCommandToString("devices");
_ = ADB.RunAdbCommandToString($"pull /sdcard/Android/data/{MainForm.CurrPCKG} \"{Environment.CurrentDirectory}\"");
_ = ADB.RunAdbCommandToString($"pull \"/sdcard/Android/data/{MainForm.CurrPCKG}\" \"{Environment.CurrentDirectory}\"");
Program.form.changeTitle("Uninstalling game...");
_ = Sideloader.UninstallGame(MainForm.CurrPCKG);
Program.form.changeTitle("Reinstalling Game");
@@ -308,7 +308,7 @@ namespace AndroidSideloader
string folder = Path.GetFileName(path);
string lastFolder = Path.GetFileName(path);
return folder.Contains(".")
? RunAdbCommandToString($"shell rm -rf /sdcard/Android/obb/{lastFolder} && mkdir /sdcard/Android/obb/{lastFolder}") + RunAdbCommandToString($"push \"{path}\" \"/sdcard/Android/obb\"")
? RunAdbCommandToString($"shell rm -rf \"/sdcard/Android/obb/{lastFolder}\" && mkdir \"/sdcard/Android/obb/{lastFolder}\"") + RunAdbCommandToString($"push \"{path}\" \"/sdcard/Android/obb\"")
: new ProcessOutput("No OBB Folder found");
}
}

View File

@@ -194,6 +194,7 @@
</Compile>
<Compile Include="FlexibleMessageBox.cs" />
<Compile Include="RoundedRectangleF.cs" />
<Compile Include="Sideloader\GetDependencies.cs" />
<Compile Include="Splash.cs">
<SubType>Form</SubType>
</Compile>
@@ -253,6 +254,7 @@
<Compile Include="Utilities\UpdateGameData.cs" />
<Compile Include="Utilities\UploadGame.cs" />
<Compile Include="Utilities\Zip.cs" />
<Compile Include="Utilities\Metrics.cs" />
<EmbeddedResource Include="DonorsListView.resx">
<DependentUpon>DonorsListView.cs</DependentUpon>
</EmbeddedResource>
@@ -307,6 +309,9 @@
<None Include="Rookie Offline.cmd">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="CleanupInstall.cmd">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="version" />
</ItemGroup>
<ItemGroup>
@@ -316,12 +321,13 @@
<Content Include="changelog.txt" />
<Content Include="icon.ico" />
<Content Include="ChangelogHistory.txt" />
<Content Include="Resources\pattern_cubes-1_1_1_0-0_0_1__000000_212121.png" />
<Content Include="Resources\pattern_herringbone-2_1_3_0-0_90_1__000000_1c1c1c.png" />
<Content Include="Resources\splash.jpg" />
<None Include="Resources\battery11.png" />
<Content Include="Resources\pattern_cubes.png" />
<Content Include="Resources\pattern_herringbone.png" />
<Content Include="Resources\splashimage.png" />
<Content Include="Resources\splashimage_deps.png" />
<Content Include="Resources\splashimage_offline.png" />
<Content Include="Resources\splashimage_rclone.png" />
<None Include="Resources\battery.png" />
<None Include="Resources\battery1.png" />
<None Include="Resources\ajax-loader.gif" />
<None Include="Resources\SearchGlass.PNG" />
</ItemGroup>

View File

@@ -182,6 +182,15 @@
<setting name="UUID" serializeAs="String">
<value />
</setting>
<setting name="createPubMirrorFile" serializeAs="String">
<value>True</value>
</setting>
<setting name="useDownloadedFiles" serializeAs="String">
<value>False</value>
</setting>
<setting name="bandwidthLimit" serializeAs="String">
<value>0</value>
</setting>
</AndroidSideloader.Properties.Settings>
<AndroidADB.Sideloader.Properties.Settings>
<setting name="checkForUpdates" serializeAs="String">

View File

@@ -1,4 +1,24 @@
RSL 2.28
RSL 2.29
- Feature: Prompt to keep temporary files and allow resuming of downloads
- Feature: Fixed progress bar jump-back
- Feature: Added part tracking during download
- Fix: Change UUID calculation. No longer uses system details (caused virus flags)
- Fix: Added rclone fallback download
- Fix: Additional connect/startup troubleshooting steps
- Chore: Bump rclone to 1.66.0
RSL 2.29.1
- Fix: Correct initilization sequence to prevent crashes
- Chore: bump package dependencies
- Chore: Fix initial GUI name
RSL 2.29.2
- Fix: Fix for failed uploads using new rclone version
- Fix: Changes to initilization order to prevent crashes and display splash
RSL 2.28
- Feature: Added ADB-Backup Support. Now supports creation and restoration of .AB backups
- Feature: Added OS-Updates toggle to ADB-Command window (Click to toggle on/off)

26
CleanupInstall.cmd Normal file
View File

@@ -0,0 +1,26 @@
@echo off
echo Killing AndroidSideloader processes...
taskkill /F /FI "IMAGENAME eq AndroidSideloader*" /T
echo Killing adb.exe processes...
taskkill /F /FI "IMAGENAME eq adb.exe" /T
set "folderPath=C:\Users\%username%\AppData\Local\Rookie.WTF\"
echo Deleting contents of %folderPath%...
for /D %%i in ("%folderPath%\*") do (
rd /s /q "%%i"
)
del /q "%folderPath%\*.*"
set "folderPath=C:\Users\%username%\AppData\Local\Rookie.AndroidSideloader\"
echo Deleting contents of %folderPath%...
for /D %%i in ("%folderPath%\*") do (
rd /s /q "%%i"
)
del /q "%folderPath%\*.*"
echo Cleanup complete.
pause

View File

@@ -41,7 +41,7 @@ public class ListViewColumnSorter : IComparer
// Cast the objects to be compared to ListViewItem objects
listviewX = (ListViewItem)x;
listviewY = (ListViewItem)y;
if (SortColumn == 5)
if (SortColumn == 5 || SortColumn == 6)
{
try
{

View File

@@ -111,7 +111,7 @@ namespace AndroidSideloader
// panel1
//
this.panel1.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.panel1.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.panel1.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes;
this.panel1.Controls.Add(this.SkipButton);
this.panel1.Controls.Add(this.DonateButton);
this.panel1.Controls.Add(this.panel2);

95
MainForm.Designer.cs generated
View File

@@ -49,6 +49,7 @@ namespace AndroidSideloader
this.VersionCodeIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ReleaseAPKPathIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.VersionNameIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.DownloadsIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.searchTextBox = new System.Windows.Forms.TextBox();
this.gamesQueueLabel = new System.Windows.Forms.Label();
this.ProgressText = new System.Windows.Forms.Label();
@@ -127,6 +128,7 @@ namespace AndroidSideloader
this.adbCmd_btnToggleUpdates = new AndroidSideloader.RoundButton();
this.MountButton = new AndroidSideloader.RoundButton();
this.btnNoDevice = new AndroidSideloader.RoundButton();
this.adbCmd_btnSend = new AndroidSideloader.RoundButton();
((System.ComponentModel.ISupportInitialize)(this.gamesPictureBox)).BeginInit();
this.progressDLbtnContainer.SuspendLayout();
this.bottomContainer.SuspendLayout();
@@ -164,7 +166,7 @@ namespace AndroidSideloader
this.progressBar.Location = new System.Drawing.Point(2, 0);
this.progressBar.MinimumSize = new System.Drawing.Size(200, 13);
this.progressBar.Name = "progressBar";
this.progressBar.Size = new System.Drawing.Size(418, 13);
this.progressBar.Size = new System.Drawing.Size(482, 13);
this.progressBar.TabIndex = 7;
//
// speedLabel
@@ -191,7 +193,7 @@ namespace AndroidSideloader
this.etaLabel.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.etaLabel.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.etaLabel.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.etaLabel.Location = new System.Drawing.Point(224, 14);
this.etaLabel.Location = new System.Drawing.Point(288, 14);
this.etaLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.etaLabel.Name = "etaLabel";
this.etaLabel.Size = new System.Drawing.Size(196, 18);
@@ -232,7 +234,7 @@ namespace AndroidSideloader
this.gamesQueListBox.Location = new System.Drawing.Point(601, 493);
this.gamesQueListBox.Margin = new System.Windows.Forms.Padding(2);
this.gamesQueListBox.Name = "gamesQueListBox";
this.gamesQueListBox.Size = new System.Drawing.Size(421, 128);
this.gamesQueListBox.Size = new System.Drawing.Size(485, 128);
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);
@@ -283,7 +285,8 @@ namespace AndroidSideloader
this.PackageNameIndex,
this.VersionCodeIndex,
this.ReleaseAPKPathIndex,
this.VersionNameIndex});
this.VersionNameIndex,
this.DownloadsIndex});
this.gamesListView.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.gamesListView.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.gamesListView.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
@@ -292,7 +295,7 @@ namespace AndroidSideloader
this.gamesListView.Location = new System.Drawing.Point(224, 98);
this.gamesListView.Name = "gamesListView";
this.gamesListView.ShowGroups = false;
this.gamesListView.Size = new System.Drawing.Size(798, 350);
this.gamesListView.Size = new System.Drawing.Size(862, 350);
this.gamesListView.TabIndex = 6;
this.gamesListView.UseCompatibleStateImageBehavior = false;
this.gamesListView.View = System.Windows.Forms.View.Details;
@@ -333,6 +336,12 @@ namespace AndroidSideloader
this.VersionNameIndex.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.VersionNameIndex.Width = 66;
//
// DownloadsIndex
//
this.DownloadsIndex.Text = "Downloads";
this.DownloadsIndex.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
this.DownloadsIndex.Width = 80;
//
// searchTextBox
//
this.searchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@@ -347,7 +356,7 @@ namespace AndroidSideloader
this.searchTextBox.Location = new System.Drawing.Point(224, 70);
this.searchTextBox.MinimumSize = new System.Drawing.Size(231, 26);
this.searchTextBox.Name = "searchTextBox";
this.searchTextBox.Size = new System.Drawing.Size(798, 24);
this.searchTextBox.Size = new System.Drawing.Size(862, 26);
this.searchTextBox.TabIndex = 5;
this.searchTextBox.Text = "Search";
this.searchTextBox.Click += new System.EventHandler(this.searchTextBox_Click);
@@ -395,7 +404,7 @@ namespace AndroidSideloader
this.notesRichTextBox.ReadOnly = true;
this.notesRichTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;
this.notesRichTextBox.ShowSelectionMargin = true;
this.notesRichTextBox.Size = new System.Drawing.Size(421, 81);
this.notesRichTextBox.Size = new System.Drawing.Size(485, 81);
this.notesRichTextBox.TabIndex = 10;
this.notesRichTextBox.Text = "\n\n\n TIP: PRESS F1 TO SEE A LIST OF SHORTCUTS";
//
@@ -433,9 +442,9 @@ namespace AndroidSideloader
//
this.adbCmd_background.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.adbCmd_background.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.adbCmd_background.Location = new System.Drawing.Point(467, 196);
this.adbCmd_background.Location = new System.Drawing.Point(462, 196);
this.adbCmd_background.Name = "adbCmd_background";
this.adbCmd_background.Size = new System.Drawing.Size(271, 103);
this.adbCmd_background.Size = new System.Drawing.Size(322, 103);
this.adbCmd_background.TabIndex = 89;
this.adbCmd_background.Visible = false;
//
@@ -497,11 +506,11 @@ namespace AndroidSideloader
this.adbCmd_CommandBox.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.adbCmd_CommandBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.adbCmd_CommandBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.adbCmd_CommandBox.Location = new System.Drawing.Point(479, 231);
this.adbCmd_CommandBox.MaximumSize = new System.Drawing.Size(247, 24);
this.adbCmd_CommandBox.MinimumSize = new System.Drawing.Size(247, 24);
this.adbCmd_CommandBox.Location = new System.Drawing.Point(477, 231);
this.adbCmd_CommandBox.MaximumSize = new System.Drawing.Size(290, 24);
this.adbCmd_CommandBox.MinimumSize = new System.Drawing.Size(290, 24);
this.adbCmd_CommandBox.Name = "adbCmd_CommandBox";
this.adbCmd_CommandBox.Size = new System.Drawing.Size(247, 24);
this.adbCmd_CommandBox.Size = new System.Drawing.Size(290, 24);
this.adbCmd_CommandBox.TabIndex = 5;
this.adbCmd_CommandBox.Visible = false;
this.adbCmd_CommandBox.TextChanged += new System.EventHandler(this.searchTextBox_TextChanged);
@@ -517,7 +526,7 @@ namespace AndroidSideloader
this.adbCmd_Label.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.adbCmd_Label.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
this.adbCmd_Label.ForeColor = System.Drawing.SystemColors.ControlLightLight;
this.adbCmd_Label.Location = new System.Drawing.Point(479, 205);
this.adbCmd_Label.Location = new System.Drawing.Point(500, 205);
this.adbCmd_Label.MaximumSize = new System.Drawing.Size(247, 20);
this.adbCmd_Label.MinimumSize = new System.Drawing.Size(247, 20);
this.adbCmd_Label.Name = "adbCmd_Label";
@@ -973,7 +982,7 @@ namespace AndroidSideloader
this.progressDLbtnContainer.Location = new System.Drawing.Point(224, 454);
this.progressDLbtnContainer.MinimumSize = new System.Drawing.Size(600, 34);
this.progressDLbtnContainer.Name = "progressDLbtnContainer";
this.progressDLbtnContainer.Size = new System.Drawing.Size(798, 34);
this.progressDLbtnContainer.Size = new System.Drawing.Size(862, 34);
this.progressDLbtnContainer.TabIndex = 96;
//
// downloadInstallGameButton
@@ -990,7 +999,7 @@ namespace AndroidSideloader
this.downloadInstallGameButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.downloadInstallGameButton.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.downloadInstallGameButton.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.downloadInstallGameButton.Location = new System.Drawing.Point(434, 0);
this.downloadInstallGameButton.Location = new System.Drawing.Point(498, 0);
this.downloadInstallGameButton.Margin = new System.Windows.Forms.Padding(0);
this.downloadInstallGameButton.Name = "downloadInstallGameButton";
this.downloadInstallGameButton.Radius = 5;
@@ -1037,7 +1046,7 @@ namespace AndroidSideloader
// deviceDrop
//
this.deviceDrop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.deviceDrop.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c;
this.deviceDrop.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone;
this.deviceDrop.Cursor = System.Windows.Forms.Cursors.Default;
this.deviceDrop.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.deviceDrop.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -1074,7 +1083,7 @@ namespace AndroidSideloader
// sideloadDrop
//
this.sideloadDrop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.sideloadDrop.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c;
this.sideloadDrop.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone;
this.sideloadDrop.Cursor = System.Windows.Forms.Cursors.Default;
this.sideloadDrop.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.sideloadDrop.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -1111,7 +1120,7 @@ namespace AndroidSideloader
// installedAppsMenu
//
this.installedAppsMenu.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.installedAppsMenu.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c;
this.installedAppsMenu.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone;
this.installedAppsMenu.Cursor = System.Windows.Forms.Cursors.Default;
this.installedAppsMenu.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.installedAppsMenu.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -1148,7 +1157,7 @@ namespace AndroidSideloader
// backupDrop
//
this.backupDrop.BackColor = global::AndroidSideloader.Properties.Settings.Default.ButtonColor;
this.backupDrop.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c;
this.backupDrop.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone;
this.backupDrop.Cursor = System.Windows.Forms.Cursors.Default;
this.backupDrop.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.backupDrop.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -1186,7 +1195,7 @@ namespace AndroidSideloader
// otherDrop
//
this.otherDrop.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.otherDrop.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c;
this.otherDrop.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_herringbone;
this.otherDrop.Cursor = System.Windows.Forms.Cursors.Default;
this.otherDrop.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.otherDrop.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -1225,7 +1234,7 @@ namespace AndroidSideloader
// batteryLevImg
//
this.batteryLevImg.BackColor = System.Drawing.Color.Transparent;
this.batteryLevImg.BackgroundImage = global::AndroidSideloader.Properties.Resources.battery11;
this.batteryLevImg.BackgroundImage = global::AndroidSideloader.Properties.Resources.battery;
this.batteryLevImg.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.batteryLevImg.Location = new System.Drawing.Point(166, 715);
this.batteryLevImg.Margin = new System.Windows.Forms.Padding(2);
@@ -1265,7 +1274,7 @@ namespace AndroidSideloader
this.verLabel.BackColor = System.Drawing.Color.Transparent;
this.verLabel.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Bold);
this.verLabel.ForeColor = System.Drawing.SystemColors.Control;
this.verLabel.Location = new System.Drawing.Point(966, 721);
this.verLabel.Location = new System.Drawing.Point(1030, 721);
this.verLabel.Name = "verLabel";
this.verLabel.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
this.verLabel.Size = new System.Drawing.Size(68, 20);
@@ -1307,7 +1316,7 @@ namespace AndroidSideloader
this.tableLayoutPanel1.Controls.Add(this.lblUpToDate, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.lblUpdateAvailable, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.lblNeedsDonate, 0, 2);
this.tableLayoutPanel1.Location = new System.Drawing.Point(796, 2);
this.tableLayoutPanel1.Location = new System.Drawing.Point(860, 2);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.tableLayoutPanel1.RowCount = 3;
@@ -1344,10 +1353,10 @@ namespace AndroidSideloader
this.adbCmd_btnToggleUpdates.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.adbCmd_btnToggleUpdates.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.adbCmd_btnToggleUpdates.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.adbCmd_btnToggleUpdates.Location = new System.Drawing.Point(523, 262);
this.adbCmd_btnToggleUpdates.Location = new System.Drawing.Point(627, 262);
this.adbCmd_btnToggleUpdates.Name = "adbCmd_btnToggleUpdates";
this.adbCmd_btnToggleUpdates.Radius = 5;
this.adbCmd_btnToggleUpdates.Size = new System.Drawing.Size(153, 28);
this.adbCmd_btnToggleUpdates.Size = new System.Drawing.Size(143, 28);
this.adbCmd_btnToggleUpdates.Stroke = true;
this.adbCmd_btnToggleUpdates.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.adbCmd_btnToggleUpdates.TabIndex = 99;
@@ -1409,14 +1418,42 @@ namespace AndroidSideloader
this.btnNoDevice.Transparency = false;
this.btnNoDevice.Click += new System.EventHandler(this.btnNoDevice_Click);
//
// adbCmd_btnSend
//
this.adbCmd_btnSend.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.adbCmd_btnSend.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.adbCmd_btnSend.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.adbCmd_btnSend.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.adbCmd_btnSend.Cursor = System.Windows.Forms.Cursors.Default;
this.adbCmd_btnSend.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.adbCmd_btnSend.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.adbCmd_btnSend.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.adbCmd_btnSend.DialogResult = System.Windows.Forms.DialogResult.OK;
this.adbCmd_btnSend.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.adbCmd_btnSend.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.adbCmd_btnSend.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.adbCmd_btnSend.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.adbCmd_btnSend.Location = new System.Drawing.Point(478, 262);
this.adbCmd_btnSend.Name = "adbCmd_btnSend";
this.adbCmd_btnSend.Radius = 5;
this.adbCmd_btnSend.Size = new System.Drawing.Size(126, 28);
this.adbCmd_btnSend.Stroke = true;
this.adbCmd_btnSend.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.adbCmd_btnSend.TabIndex = 100;
this.adbCmd_btnSend.Text = "Send Command";
this.adbCmd_btnSend.Transparency = false;
this.adbCmd_btnSend.Visible = false;
this.adbCmd_btnSend.Click += new System.EventHandler(this.adbCmd_btnSend_Click);
//
// MainForm
//
this.AllowDrop = true;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.ClientSize = new System.Drawing.Size(1040, 747);
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes;
this.ClientSize = new System.Drawing.Size(1104, 747);
this.Controls.Add(this.adbCmd_btnSend);
this.Controls.Add(this.adbCmd_btnToggleUpdates);
this.Controls.Add(this.ULLabel);
this.Controls.Add(this.verLabel);
@@ -1506,6 +1543,7 @@ namespace AndroidSideloader
private System.Windows.Forms.ColumnHeader VersionCodeIndex;
private System.Windows.Forms.ColumnHeader ReleaseAPKPathIndex;
public System.Windows.Forms.ColumnHeader VersionNameIndex;
public System.Windows.Forms.ColumnHeader DownloadsIndex;
private RoundButton downloadInstallGameButton;
private RoundButton MountButton;
private ToolTip startsideloadbutton_Tooltip;
@@ -1570,5 +1608,6 @@ namespace AndroidSideloader
private Button btnRunAdbCmd;
private RoundButton btnNoDevice;
private RoundButton adbCmd_btnToggleUpdates;
private RoundButton adbCmd_btnSend;
}
}

View File

@@ -21,7 +21,9 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace AndroidSideloader
{
public partial class MainForm : Form
@@ -55,10 +57,12 @@ namespace AndroidSideloader
private bool isLoading = true;
public static bool isOffline = false;
public static bool noRcloneUpdating;
public static bool noAppCheck = false;
public static bool hasPublicConfig = false;
public static bool enviromentCreated = false;
public static PublicConfig PublicConfigFile;
public static string PublicMirrorExtraArgs = " --tpslimit 1.0 --tpslimit-burst 3";
public static Splash SplashScreen;
private bool manualIP;
private System.Windows.Forms.Timer _debounceTimer;
private CancellationTokenSource _cts;
@@ -66,7 +70,9 @@ namespace AndroidSideloader
public MainForm()
{
InitializeComponent();
SplashScreen = new Splash();
SplashScreen.Show();
// Check for Offline Mode or No RCLONE Updating
CheckCommandLineArguments();
@@ -115,10 +121,10 @@ namespace AndroidSideloader
{
noRcloneUpdating = true;
}
}
if (isOffline)
{
_ = FlexibleMessageBox.Show(Program.form, "Offline mode activated. You can't download games in this mode, only do local stuff.");
if (arg == "--disable-app-check")
{
noAppCheck = true;
}
}
}
@@ -197,7 +203,7 @@ namespace AndroidSideloader
private async Task GetPublicConfigAsync()
{
await Task.Run(() => SideloaderRCLONE.updatePublicConfig());
await Task.Run(() => GetDependencies.updatePublicConfig());
try
{
@@ -229,11 +235,14 @@ namespace AndroidSideloader
{
_ = Logger.Log("Starting AndroidSideloader Application");
Splash splash = new Splash();
splash.Show();
// download dependencies
Sideloader.downloadFiles();
if (isOffline) {
SplashScreen.UpdateBackgroundImage(AndroidSideloader.Properties.Resources.splashimage_offline);
changeTitle("Starting in Offline Mode...");
} else {
// download dependencies
GetDependencies.downloadFiles();
SplashScreen.UpdateBackgroundImage(AndroidSideloader.Properties.Resources.splashimage);
}
Properties.Settings.Default.MainDir = Environment.CurrentDirectory;
Properties.Settings.Default.Save();
@@ -306,21 +315,6 @@ namespace AndroidSideloader
}
}
if (hasPublicConfig)
{
lblMirror.Text = " Public Mirror";
remotesList.Size = Size.Empty;
}
if (isOffline)
{
lblMirror.Text = " Offline Mode";
remotesList.Size = Size.Empty;
}
if (Properties.Settings.Default.nodevicemode)
{
btnNoDevice.Text = "Enable Sideloading";
}
_ = Logger.Log("Attempting to Initalize ADB Server");
if (File.Exists(Path.Combine(Path.GetPathRoot(Environment.SystemDirectory), "RSL", "platform-tools", "adb.exe")))
{
@@ -328,8 +322,6 @@ namespace AndroidSideloader
_ = ADB.RunAdbCommandToString("start-server");
}
splash.Close();
this.Form1_Shown(sender, e);
}
@@ -360,7 +352,7 @@ namespace AndroidSideloader
_ = FlexibleMessageBox.Show(Program.form, "Failed to fetch public mirror config, and the current one is unreadable.\r\nPlease ensure you can access https://vrpirates.wiki/ in your browser.", "Config Update Failed", MessageBoxButtons.OK);
}
}
else if (Properties.Settings.Default.autoUpdateConfig)
else if (Properties.Settings.Default.autoUpdateConfig && Properties.Settings.Default.createPubMirrorFile)
{
DialogResult dialogResult = FlexibleMessageBox.Show(Program.form, "Rookie has detected that you are missing the public config file, would you like to create it?", "Public Config Missing", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
@@ -372,6 +364,12 @@ namespace AndroidSideloader
_ = FlexibleMessageBox.Show(Program.form, "Failed to fetch public mirror config, and the current one is unreadable.\r\nPlease ensure you can access https://vrpirates.wiki/ in your browser.", "Config Update Failed", MessageBoxButtons.OK);
}
}
else
{
Properties.Settings.Default.createPubMirrorFile = false;
Properties.Settings.Default.autoUpdateConfig = false;
Properties.Settings.Default.Save();
}
}
string webViewDirectoryPath = Path.Combine(Path.GetPathRoot(Environment.SystemDirectory), "RSL", "EBWebView");
@@ -381,29 +379,64 @@ namespace AndroidSideloader
}
}
if (hasPublicConfig)
{
lblMirror.Text = " Public Mirror";
remotesList.Size = System.Drawing.Size.Empty;
_ = Logger.Log($"Using Public Mirror");
}
if (isOffline)
{
lblMirror.Text = " Offline Mode";
remotesList.Size = System.Drawing.Size.Empty;
_ = Logger.Log($"Using Offline Mode");
}
if (Properties.Settings.Default.nodevicemode)
{
btnNoDevice.Text = "Enable Sideloading";
}
SplashScreen.Close();
progressBar.Style = ProgressBarStyle.Marquee;
Thread t1 = new Thread(() =>
Thread t1 = new Thread(async () =>
{
if (!debugMode && Properties.Settings.Default.checkForUpdates)
{
Updater.AppName = "AndroidSideloader";
Updater.Repository = "VRPirates/rookie";
Updater.Update();
await Updater.Update();
}
progressBar.Invoke(() => { progressBar.Style = ProgressBarStyle.Marquee; });
progressBar.Style = ProgressBarStyle.Marquee;
if (!isOffline)
{
changeTitle("Initializing Servers...");
if (Properties.Settings.Default.autoUpdateConfig)
{
changeTitle("Checking for a new Configuration File...");
SideloaderRCLONE.updateDownloadConfig();
}
changeTitle("Getting Upload Config...");
SideloaderRCLONE.updateUploadConfig();
}
initMirrors(true);
});
t1.SetApartmentState(ApartmentState.STA);
t1.IsBackground = true;
if (!isOffline)
{
t1.Start();
}
while (t1.IsAlive)
{
await Task.Delay(100);
}
Thread t6 = new Thread(async () =>
{
if (!isOffline)
{
_ = Logger.Log("Initializing Servers");
changeTitle("Initializing Servers...");
await initMirrors();
if (!hasPublicConfig)
{
@@ -417,21 +450,22 @@ namespace AndroidSideloader
}
});
t1.SetApartmentState(ApartmentState.STA);
t1.IsBackground = true;
t6.SetApartmentState(ApartmentState.STA);
t6.IsBackground = false;
if (!isOffline)
{
t1.Start();
t6.Start();
}
while (t1.IsAlive)
while (t6.IsAlive)
{
await Task.Delay(100);
}
Thread t5 = new Thread(() =>
{
changeTitle("Connecting to your Quest...");
if (!string.IsNullOrEmpty(Properties.Settings.Default.IPAddress))
{
string path = Path.Combine(Path.GetPathRoot(Environment.SystemDirectory), "RSL", "platform-tools", "adb.exe");
@@ -1041,7 +1075,7 @@ namespace AndroidSideloader
Logger.Log("Selected .ab file: " + selectedPath);
_ = FlexibleMessageBox.Show(Program.form, "Click OK on this Message...\r\nThen on your Quest, Unlock your device and confirm the backup operation by clicking on 'Restore My Data'\r\nRookie will remain frozen until the process is completed.");
output_abRestore = ADB.RunAdbCommandToString($"adb restore \"{selectedPath}").Output;
output_abRestore = ADB.RunAdbCommandToString($"adb restore \"{selectedPath}\"").Output;
}
if (fileDialogResult != DialogResult.OK)
{
@@ -1403,6 +1437,16 @@ namespace AndroidSideloader
string path = $"{dir}\\Install.txt";
if (Directory.Exists(data))
{
string installFilePath = Directory.GetFiles(data)
.FirstOrDefault(f => string.Equals(Path.GetFileName(f), "install.txt", StringComparison.OrdinalIgnoreCase));
if (installFilePath != null)
{
// Run commands from install.txt
output += Sideloader.RunADBCommandsFromFile(installFilePath);
continue; // Skip further processing if install.txt is found
}
if (!data.Contains("+") && !data.Contains("_") && data.Contains("."))
{
_ = Logger.Log($"Copying {data} to device");
@@ -1502,7 +1546,7 @@ namespace AndroidSideloader
{
_ = ADB.RunCommandToString(command2, file2);
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" /sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/");
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" \"/sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/\"");
})
{
IsBackground = true
@@ -1686,7 +1730,7 @@ namespace AndroidSideloader
{
_ = ADB.RunCommandToString(command, data);
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" /sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/");
output += ADB.RunAdbCommandToString($"push \"{zippath}\\{datazip}\" \"/sdcard/ModData/com.beatgames.beatsaber/Mods/SongLoader/CustomLevels/\"");
})
{
IsBackground = true
@@ -1761,7 +1805,6 @@ namespace AndroidSideloader
private readonly List<UpdateGameData> gamesToAskForUpdate = new List<UpdateGameData>();
public static bool loaded = false;
public static string rookienamelist;
public static string rookienamelist2;
private bool errorOnList;
public static bool updates = false;
public static bool newapps = false;
@@ -1819,7 +1862,6 @@ namespace AndroidSideloader
if (!rookienamelist.Contains(release[SideloaderRCLONE.GameNameIndex].ToString()))
{
rookienamelist += release[SideloaderRCLONE.GameNameIndex].ToString() + "\n";
rookienamelist2 += release[SideloaderRCLONE.GameNameIndex].ToString() + ", ";
}
ListViewItem Game = new ListViewItem(release);
@@ -2018,9 +2060,8 @@ namespace AndroidSideloader
}
}*/
//This is for games that are not blacklisted and we dont have on rookie
if (blacklistItems.Count > 100 && rookieList.Count > 100)
if (blacklistItems.Count > 100 && rookieList.Count > 100 && !noAppCheck)
{
foreach (string newGamesToUpload in newGamesList)
{
changeTitle("Unrecognized App Found. Downloading APK to take a closer look. (This may take a minute)");
@@ -2083,11 +2124,11 @@ namespace AndroidSideloader
}
progressBar.Style = ProgressBarStyle.Continuous;
if (either && !updatesNotified)
if (either && !updatesNotified && !noAppCheck)
{
changeTitle(" \n\n");
DonorsListViewForm DonorForm = new DonorsListViewForm();
_ = DonorForm.ShowDialog();
_ = DonorForm.ShowDialog(this);
_ = Focus();
}
changeTitle("Populating update list... \n\n");
@@ -2283,12 +2324,18 @@ namespace AndroidSideloader
};
gamesToUpload.Add(game);
}
private void initMirrors(bool random)
private async Task initMirrors()
{
_ = Logger.Log("Looking for Additional Mirrors...");
int index = 0;
remotesList.Invoke(() => { index = remotesList.SelectedIndex; remotesList.Items.Clear(); });
await Task.Run(() => remotesList.Invoke(() =>
{
index = remotesList.SelectedIndex;
remotesList.Items.Clear();
}));
string[] mirrors = RCLONE.runRcloneCommand_DownloadConfig("listremotes").Output.Split('\n');
string[] mirrors = await Task.Run(() => RCLONE.runRcloneCommand_DownloadConfig("listremotes").Output.Split('\n'));
_ = Logger.Log("Loaded following mirrors: ");
int itemsCount = 0;
@@ -2297,20 +2344,22 @@ 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", "")); });
await Task.Run(() => remotesList.Invoke(() =>
{
_ = remotesList.Items.Add(mirror.Remove(mirror.Length - 1).Replace("VRP-mirror", ""));
}));
itemsCount++;
}
}
if (itemsCount > 0)
{
Random rand = new Random();
remotesList.Invoke(() =>
await Task.Run(() => remotesList.Invoke(() =>
{
remotesList.SelectedIndex = 0; // Set mirror to first item in array.
currentRemote = "VRP-mirror" + remotesList.SelectedItem.ToString();
});
};
}));
}
}
public static string processError = string.Empty;
@@ -2398,7 +2447,7 @@ namespace AndroidSideloader
_ = ADB.RunAdbCommandToString("tcpip 5555");
_ = FlexibleMessageBox.Show(Program.form, "Press OK to get your Quest's local IP address.", "Obtain local IP address", MessageBoxButtons.OKCancel);
Thread.Sleep(1000);
await Task.Delay(1000);
string input = ADB.RunAdbCommandToString("shell ip route").Output;
Properties.Settings.Default.WirelessADB = true;
@@ -2410,7 +2459,7 @@ namespace AndroidSideloader
string IPaddr = strArrayOne[8];
string IPcmnd = "connect " + IPaddr + ":5555";
_ = FlexibleMessageBox.Show(Program.form, $"Your Quest's local IP address is: {IPaddr}\n\nPlease disconnect your Quest then wait 2 seconds.\nOnce it is disconnected hit OK", "", MessageBoxButtons.OK);
Thread.Sleep(2000);
await Task.Delay(2000);
_ = ADB.RunAdbCommandToString(IPcmnd);
_ = await Program.form.CheckForDevice();
Program.form.changeTitlebarToDevice();
@@ -2446,9 +2495,10 @@ namespace AndroidSideloader
progressBar.Style = ProgressBarStyle.Marquee;
devicesbutton_Click(sender, e);
await initMirrors();
Thread t1 = new Thread(() =>
{
initMirrors(false);
if (!hasPublicConfig)
{
SideloaderRCLONE.initGames(currentRemote);
@@ -2492,17 +2542,6 @@ namespace AndroidSideloader
{
ShowError_QuotaExceeded();
DialogResult om = MessageBox.Show("Relaunch Rookie in Offline Mode?", "Offline Mode?", MessageBoxButtons.YesNo);
if (om == DialogResult.Yes)
{
Process pr = new Process();
pr.StartInfo.WorkingDirectory = Application.StartupPath;
pr.StartInfo.FileName = System.AppDomain.CurrentDomain.FriendlyName;
pr.StartInfo.Arguments = "--offline";
_ = pr.Start();
Process.GetCurrentProcess().Kill();
}
if (System.Windows.Forms.Application.MessageLoop)
{
Process.GetCurrentProcess().Kill();
@@ -2538,11 +2577,7 @@ $@"Unable to connect to Remote Server. Rookie is unable to connect to our Server
First time launching Rookie? Please relaunch and try again.
Things you can try:
1) Move the Rookie directory (Folder containing AndroidSideloader.exe) into {Path.GetPathRoot(Environment.SystemDirectory)}RSL
2) Try changing your systems DNS to either Cloudflare/Google/OpenDNS
3) Try using a systemwide VPN like ProtonVPN (which is free)
4) Sponsor a private server (https://vrpirates.wiki/en/Howto/sponsored-mirrors)
Please visit our Telegram (https://t.me/VRPirates) or Discord (https://discord.gg/DcfEpwVa4a) for Troubleshooting steps!
";
_ = FlexibleMessageBox.Show(Program.form, errorMessage, "Unable to connect to Remote Server");
@@ -2640,6 +2675,7 @@ Things you can try:
{
gameName = gamesQueueList.ToArray()[0];
string packagename = Sideloader.gameNameToPackageName(gameName);
string versioncode = Sideloader.gameNameToVersionCode(gameName);
string dir = Path.GetDirectoryName(gameName);
string gameDirectory = Path.Combine(Properties.Settings.Default.downloadDir, gameName);
string downloadDirectory = Path.Combine(Properties.Settings.Default.downloadDir, gameName);
@@ -2669,16 +2705,32 @@ Things you can try:
{
extraArgs = "--transfers 1 --multi-thread-streams 0";
}
string bandwidthLimit = string.Empty;
if (Properties.Settings.Default.bandwidthLimit > 0)
{
bandwidthLimit = $"--bwlimit={Properties.Settings.Default.bandwidthLimit}M";
}
if (hasPublicConfig)
{
bool doDownload = true;
bool skipRedownload = false;
if (Properties.Settings.Default.useDownloadedFiles == true) {
skipRedownload = true;
}
if (Directory.Exists(gameDirectory))
{
DialogResult res = FlexibleMessageBox.Show(Program.form,
$"{gameName} exists in destination directory.\r\nWould you like to overwrite it?",
"Download again?", MessageBoxButtons.YesNo);
if (skipRedownload == true) {
if (Directory.Exists($"{Properties.Settings.Default.downloadDir}\\{gameName}")) {
doDownload = false;
}
} else {
DialogResult res = FlexibleMessageBox.Show(Program.form,
$"{gameName} exists in destination directory.\r\nWould you like to overwrite it?",
"Download again?", MessageBoxButtons.YesNo);
doDownload = res == DialogResult.Yes;
doDownload = res == DialogResult.Yes;
}
if (doDownload)
{
@@ -2697,9 +2749,10 @@ Things you can try:
t1 = new Thread(() =>
{
string rclonecommand =
$"copy \":http:/{gameNameHash}/\" \"{downloadDirectory}\" {extraArgs} --progress --rc --check-first --fast-list";
$"copy \":http:/{gameNameHash}/\" \"{downloadDirectory}\" {extraArgs} --progress --rc {bandwidthLimit}";
gameDownloadOutput = RCLONE.runRcloneCommand_PublicConfig(rclonecommand);
});
Utilities.Metrics.CountDownload(packagename, versioncode);
}
else
{
@@ -2713,8 +2766,9 @@ Things you can try:
_ = Logger.Log($"rclone copy \"{currentRemote}:{downloadDirectory}\"");
t1 = new Thread(() =>
{
gameDownloadOutput = RCLONE.runRcloneCommand_DownloadConfig($"copy \"{currentRemote}:{downloadDirectory}\" \"{Properties.Settings.Default.downloadDir}\\{gameName}\" {extraArgs} --progress --rc --retries 1 --low-level-retries 1 --check-first");
gameDownloadOutput = RCLONE.runRcloneCommand_DownloadConfig($"copy \"{currentRemote}:{downloadDirectory}\" \"{Properties.Settings.Default.downloadDir}\\{gameName}\" {extraArgs} --progress --rc --retries 2 --low-level-retries 1 --check-first {bandwidthLimit}");
});
Utilities.Metrics.CountDownload(packagename, versioncode);
}
if (Directory.Exists(downloadDirectory)) {
@@ -2994,7 +3048,7 @@ Things you can try:
Thread obbThread = new Thread(() =>
{
changeTitle($"Copying {packagename} obb to device...");
ADB.RunAdbCommandToString($"shell mkdir /sdcard/Android/obb/{packagename}");
ADB.RunAdbCommandToString($"shell mkdir \"/sdcard/Android/obb/{packagename}\"");
output += ADB.RunAdbCommandToString($"push \"{Properties.Settings.Default.downloadDir}\\{gameName}\\{packagename}\" \"/sdcard/Android/obb\"");
Program.form.changeTitle("");
})
@@ -3069,7 +3123,7 @@ Things you can try:
{
changeTitle("Deleting old OBB Folder...");
Logger.Log("Attempting to delete old OBB Folder");
ADB.RunAdbCommandToString($"shell rm -rf /sdcard/Android/obb/{packagename}");
ADB.RunAdbCommandToString($"shell rm -rf \"/sdcard/Android/obb/{packagename}\"");
}
private const string OBBFolderPath = "/sdcard/Android/obb/";
@@ -3092,7 +3146,7 @@ Things you can try:
DirectoryInfo localFolder = new DirectoryInfo(localFolderPath);
long totalLocalFolderSize = localFolderSize(localFolder) / (1024 * 1024);
string remoteFolderSizeResult = ADB.RunAdbCommandToString($"shell du -m {OBBFolderPath}{packageName}").Output;
string remoteFolderSizeResult = ADB.RunAdbCommandToString($"shell du -m \"{OBBFolderPath}{packageName}\"").Output;
string cleanedRemoteFolderSize = cleanRemoteFolderSize(remoteFolderSizeResult);
int localObbSize = (int)totalLocalFolderSize;
@@ -3312,7 +3366,7 @@ Things you can try:
}
private void ADBWirelessDisable_Click(object sender, EventArgs e)
private async void ADBWirelessDisable_Click(object sender, EventArgs e)
{
DialogResult dialogResult = FlexibleMessageBox.Show(Program.form, "Are you sure you want to delete your saved Quest IP address/command?", "Remove saved IP address?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.No)
@@ -3326,11 +3380,11 @@ Things you can try:
_ = FlexibleMessageBox.Show(Program.form, "Make sure your device is not connected to USB and press OK.");
_ = ADB.RunAdbCommandToString("devices");
_ = ADB.RunAdbCommandToString("shell USB");
Thread.Sleep(2000);
await Task.Delay(2000);
_ = ADB.RunAdbCommandToString("disconnect");
Thread.Sleep(2000);
await Task.Delay(2000);
_ = ADB.RunAdbCommandToString("kill-server");
Thread.Sleep(2000);
await Task.Delay(2000);
_ = ADB.RunAdbCommandToString("start-server");
Properties.Settings.Default.IPAddress = String.Empty;
Properties.Settings.Default.Save();
@@ -3431,6 +3485,7 @@ Things you can try:
adbCmd_background.Visible = false;
adbCmd_CommandBox.Visible = false;
adbCmd_btnToggleUpdates.Visible = false;
adbCmd_btnSend.Visible = false;
adbCmd_Label.Visible = false;
adbCmd_background.Visible = false;
}
@@ -3450,8 +3505,16 @@ Things you can try:
{
if (loaded)
{
Clipboard.SetText(rookienamelist);
_ = MessageBox.Show("Entire game list copied as a line by line list to clipboard!\nPress CTRL+V to paste it anywhere!");
StringBuilder copyGamesListView = new StringBuilder();
foreach (ListViewItem item in gamesListView.Items)
{
// Assuming the game name is in the first column (subitem index 0)
copyGamesListView.Append(item.SubItems[0].Text).Append("\n");
}
Clipboard.SetText(copyGamesListView.ToString());
_ = MessageBox.Show("Entire game list copied as a paragraph to clipboard!\nPress CTRL+V to paste it anywhere!");
}
}
@@ -3459,7 +3522,21 @@ Things you can try:
{
if (loaded)
{
Clipboard.SetText(rookienamelist2);
StringBuilder copyGamesListView = new StringBuilder();
foreach (ListViewItem item in gamesListView.Items)
{
// Assuming the game name is in the first column (subitem index 0)
copyGamesListView.Append(item.SubItems[0].Text).Append(", ");
}
// Remove the last ", " if there's any content in rookienamelist2
if (copyGamesListView.Length > 2)
{
copyGamesListView.Length -= 2;
}
Clipboard.SetText(copyGamesListView.ToString());
_ = MessageBox.Show("Entire game list copied as a paragraph to clipboard!\nPress CTRL+V to paste it anywhere!");
}
@@ -3474,6 +3551,7 @@ Things you can try:
{
adbCmd_CommandBox.Visible = true;
adbCmd_btnToggleUpdates.Visible = true;
adbCmd_btnSend.Visible = true;
adbCmd_CommandBox.Clear();
adbCmd_Label.Visible = true;
adbCmd_background.Visible = true;
@@ -3603,7 +3681,7 @@ Things you can try:
{
MainForm.ActiveForm.FormBorderStyle = FormBorderStyle.None;
webView21.Anchor = (AnchorStyles.Top | AnchorStyles.Left);
webView21.Location = new Point(0, 0);
webView21.Location = new System.Drawing.Point(0, 0);
webView21.Size = MainForm.ActiveForm.Size;
}
else
@@ -3611,7 +3689,7 @@ Things you can try:
MainForm.ActiveForm.FormBorderStyle = FormBorderStyle.Sizable;
webView21.Anchor = (AnchorStyles.Left | AnchorStyles.Bottom);
webView21.Location = gamesPictureBox.Location;
webView21.Size = new Size(374, 214);
webView21.Size = new System.Drawing.Size(374, 214);
}
}
}
@@ -3861,7 +3939,6 @@ Things you can try:
if (!rookienamelist.Contains(release[SideloaderRCLONE.GameNameIndex].ToString()))
{
rookienamelist += release[SideloaderRCLONE.GameNameIndex].ToString() + "\n";
rookienamelist2 += release[SideloaderRCLONE.GameNameIndex].ToString() + ", ";
}
ListViewItem Game = new ListViewItem(release);
@@ -3950,7 +4027,7 @@ Things you can try:
string IPaddr;
IPaddr = adbCmd_CommandBox.Text;
string IPcmnd = "connect " + IPaddr + ":5555";
Thread.Sleep(1000);
await Task.Delay(1000);
string errorChecker = ADB.RunAdbCommandToString(IPcmnd).Output;
if (errorChecker.Contains("cannot resolve host") | errorChecker.Contains("cannot connect to"))
{
@@ -3959,6 +4036,7 @@ Things you can try:
manualIP = false;
adbCmd_CommandBox.Visible = false;
adbCmd_btnToggleUpdates.Visible = false;
adbCmd_btnSend.Visible = false;
adbCmd_Label.Visible = false;
adbCmd_background.Visible = false;
adbCmd_Label.Text = "Type ADB Command";
@@ -3978,6 +4056,7 @@ Things you can try:
manualIP = false;
adbCmd_CommandBox.Visible = false;
adbCmd_btnToggleUpdates.Visible = false;
adbCmd_btnSend.Visible = false;
adbCmd_Label.Visible = false;
adbCmd_background.Visible = false;
adbCmd_Label.Text = "Type ADB Command";
@@ -3988,11 +4067,13 @@ Things you can try:
}
else
{
Program.form.changeTitle($"Running adb command: ADB {adbCmd_CommandBox.Text}");
string sentCommand = adbCmd_CommandBox.Text.Replace("adb", "");
Program.form.changeTitle($"Running adb command: ADB {sentCommand}");
string output = ADB.RunAdbCommandToString(adbCmd_CommandBox.Text).Output;
_ = FlexibleMessageBox.Show(Program.form, $"Ran adb command: ADB {adbCmd_CommandBox.Text}\r\nOutput:\r\n{output}");
_ = FlexibleMessageBox.Show(Program.form, $"Ran adb command: ADB {sentCommand}\r\nOutput:\r\n{output}");
adbCmd_CommandBox.Visible = false;
adbCmd_btnToggleUpdates.Visible = false;
adbCmd_btnSend.Visible = false;
adbCmd_Label.Visible = false;
adbCmd_background.Visible = false;
_ = gamesListView.Focus();
@@ -4003,6 +4084,7 @@ Things you can try:
{
adbCmd_CommandBox.Visible = false;
adbCmd_btnToggleUpdates.Visible = false;
adbCmd_btnSend.Visible = false;
adbCmd_Label.Visible = false;
adbCmd_background.Visible = false;
_ = gamesListView.Focus();
@@ -4014,6 +4096,7 @@ Things you can try:
adbCmd_background.Visible = false;
adbCmd_CommandBox.Visible = false;
adbCmd_btnToggleUpdates.Visible = false;
adbCmd_btnSend.Visible = false;
adbCmd_Label.Visible = false;
}
@@ -4187,7 +4270,6 @@ Things you can try:
if (!rookienamelist.Contains(release[SideloaderRCLONE.GameNameIndex].ToString()))
{
rookienamelist += release[SideloaderRCLONE.GameNameIndex].ToString() + "\n";
rookienamelist2 += release[SideloaderRCLONE.GameNameIndex].ToString() + ", ";
}
ListViewItem Game = new ListViewItem(release);
@@ -4320,7 +4402,6 @@ Things you can try:
if (!rookienamelist.Contains(release[SideloaderRCLONE.GameNameIndex].ToString()))
{
rookienamelist += release[SideloaderRCLONE.GameNameIndex].ToString() + "\n";
rookienamelist2 += release[SideloaderRCLONE.GameNameIndex].ToString() + ", ";
}
ListViewItem Game = new ListViewItem(release);
@@ -4430,6 +4511,7 @@ Things you can try:
{
adbCmd_CommandBox.Visible = true;
adbCmd_btnToggleUpdates.Visible = true;
adbCmd_btnSend.Visible = true;
adbCmd_CommandBox.Clear();
adbCmd_Label.Text = "Type ADB Command";
adbCmd_Label.Visible = true;
@@ -4486,6 +4568,12 @@ Things you can try:
KeyPressEventArgs enterKeyPressArgs = new KeyPressEventArgs((char)Keys.Enter);
ADBcommandbox_KeyPress(adbCmd_CommandBox, enterKeyPressArgs);
}
private void adbCmd_btnSend_Click(object sender, EventArgs e)
{
KeyPressEventArgs enterKeyPressArgs = new KeyPressEventArgs((char)Keys.Enter);
ADBcommandbox_KeyPress(adbCmd_CommandBox, enterKeyPressArgs);
}
}

2
NewApps.Designer.cs generated
View File

@@ -126,7 +126,7 @@ namespace AndroidSideloader
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes;
this.ClientSize = new System.Drawing.Size(313, 248);
this.ControlBox = false;
this.Controls.Add(this.NewAppsButton);

View File

@@ -80,26 +80,6 @@ namespace AndroidSideloader.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap battery1 {
get {
object obj = ResourceManager.GetObject("battery1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap battery11 {
get {
object obj = ResourceManager.GetObject("battery11", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@@ -113,9 +93,9 @@ namespace AndroidSideloader.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap pattern_cubes_1_1_1_0_0_0_1__000000_212121 {
public static System.Drawing.Bitmap pattern_cubes {
get {
object obj = ResourceManager.GetObject("pattern_cubes-1_1_1_0-0_0_1__000000_212121", resourceCulture);
object obj = ResourceManager.GetObject("pattern_cubes", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
@@ -123,9 +103,9 @@ namespace AndroidSideloader.Properties {
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c {
public static System.Drawing.Bitmap pattern_herringbone {
get {
object obj = ResourceManager.GetObject("pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c", resourceCulture);
object obj = ResourceManager.GetObject("pattern_herringbone", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
@@ -149,5 +129,35 @@ namespace AndroidSideloader.Properties {
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap splashimage_deps {
get {
object obj = ResourceManager.GetObject("splashimage_deps", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap splashimage_offline {
get {
object obj = ResourceManager.GetObject("splashimage_offline", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap splashimage_rclone {
get {
object obj = ResourceManager.GetObject("splashimage_rclone", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@@ -121,18 +121,6 @@
<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="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="pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\pattern_herringbone-2_1_3_0-0_90_1__000000_1c1c1c.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="splashimage" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\splashimage.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="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>
@@ -142,7 +130,22 @@
<data name="Pattern" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Pattern.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pattern_cubes-1_1_1_0-0_0_1__000000_212121" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pattern_cubes-1_1_1_0-0_0_1__000000_212121.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="splashimage" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\splashimage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="splashimage_deps" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\splashimage_deps.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="splashimage_rclone" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\splashimage_rclone.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pattern_cubes" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pattern_cubes.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pattern_herringbone" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pattern_herringbone.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="splashimage_offline" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\splashimage_offline.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@@ -173,5 +173,14 @@
<Setting Name="UUID" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="createPubMirrorFile" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="useDownloadedFiles" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="bandwidthLimit" Type="System.Single" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
</Settings>
</SettingsFile>

174
QuestForm.Designer.cs generated
View File

@@ -48,15 +48,15 @@ namespace AndroidSideloader
this.GlobalUsername = new System.Windows.Forms.TextBox();
this.TextureResTextBox = new System.Windows.Forms.TextBox();
this.RefreshRateComboBox = new System.Windows.Forms.ComboBox();
this.button1 = new AndroidSideloader.RoundButton();
this.btnApplyTempSettings = new AndroidSideloader.RoundButton();
this.questVids = new AndroidSideloader.RoundButton();
this.questPics = new AndroidSideloader.RoundButton();
this.button3 = new AndroidSideloader.RoundButton();
this.btnApplyUsername = new AndroidSideloader.RoundButton();
this.label3 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
//
// label1
//
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.Transparent;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -67,9 +67,9 @@ namespace AndroidSideloader
this.label1.TabIndex = 6;
this.label1.Text = "Temporary Settings";
this.label1.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
//
// label2
//
//
this.label2.AutoSize = true;
this.label2.BackColor = System.Drawing.Color.Transparent;
this.label2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
@@ -81,9 +81,9 @@ namespace AndroidSideloader
this.label2.TabIndex = 6;
this.label2.Text = "Reboot Quest to Reset";
this.label2.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
//
// label11
//
//
this.label11.AutoSize = true;
this.label11.BackColor = System.Drawing.Color.Transparent;
this.label11.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
@@ -95,9 +95,9 @@ namespace AndroidSideloader
this.label11.TabIndex = 6;
this.label11.Text = "Transfer screenshots to Desktop";
this.label11.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
//
// label12
//
//
this.label12.AutoSize = true;
this.label12.BackColor = System.Drawing.Color.Transparent;
this.label12.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
@@ -109,9 +109,9 @@ namespace AndroidSideloader
this.label12.TabIndex = 6;
this.label12.Text = "Set Username";
this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
//
// DeleteShots
//
//
this.DeleteShots.AutoSize = true;
this.DeleteShots.BackColor = System.Drawing.Color.Transparent;
this.DeleteShots.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
@@ -127,35 +127,35 @@ namespace AndroidSideloader
this.DeleteShots.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.DeleteShots.UseVisualStyleBackColor = false;
this.DeleteShots.CheckedChanged += new System.EventHandler(this.DeleteShots_CheckedChanged);
//
//
// splitter1
//
//
this.splitter1.Location = new System.Drawing.Point(0, 0);
this.splitter1.Name = "splitter1";
this.splitter1.Size = new System.Drawing.Size(3, 486);
this.splitter1.TabIndex = 14;
this.splitter1.TabStop = false;
//
//
// label10
//
//
this.label10.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.label10.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label10.Location = new System.Drawing.Point(-4, 261);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(394, 3);
this.label10.TabIndex = 15;
//
//
// label14
//
//
this.label14.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.label14.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label14.Location = new System.Drawing.Point(-4, 80);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(394, 3);
this.label14.TabIndex = 17;
//
//
// label16
//
//
this.label16.AutoSize = true;
this.label16.BackColor = System.Drawing.Color.Transparent;
this.label16.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
@@ -167,9 +167,9 @@ namespace AndroidSideloader
this.label16.TabIndex = 6;
this.label16.Text = "Exports to: Desktop\\Quest Screenshots";
this.label16.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
//
// CPUComboBox
//
//
this.CPUComboBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.CPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.CPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -188,9 +188,9 @@ namespace AndroidSideloader
this.CPUComboBox.Size = new System.Drawing.Size(232, 26);
this.CPUComboBox.TabIndex = 2;
this.CPUComboBox.Text = "Select CPU level (0 for default)";
//
//
// GPUComboBox
//
//
this.GPUComboBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.GPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.GPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -209,9 +209,9 @@ namespace AndroidSideloader
this.GPUComboBox.Size = new System.Drawing.Size(232, 26);
this.GPUComboBox.TabIndex = 1;
this.GPUComboBox.Text = "Select GPU level (0 for default)";
//
//
// ResolutionLabel
//
//
this.ResolutionLabel.AutoSize = true;
this.ResolutionLabel.BackColor = System.Drawing.Color.Transparent;
this.ResolutionLabel.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -224,9 +224,9 @@ namespace AndroidSideloader
this.ResolutionLabel.Size = new System.Drawing.Size(153, 18);
this.ResolutionLabel.TabIndex = 3;
this.ResolutionLabel.Text = "Resolution (0=default)";
//
//
// GlobalUsername
//
//
this.GlobalUsername.BackColor = global::AndroidSideloader.Properties.Settings.Default.TextBoxColor;
this.GlobalUsername.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.GlobalUsername.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -238,9 +238,9 @@ namespace AndroidSideloader
this.GlobalUsername.Size = new System.Drawing.Size(142, 24);
this.GlobalUsername.TabIndex = 12;
this.GlobalUsername.TextChanged += new System.EventHandler(this.GlobalUsername_TextChanged);
//
//
// TextureResTextBox
//
//
this.TextureResTextBox.BackColor = global::AndroidSideloader.Properties.Settings.Default.TextBoxColor;
this.TextureResTextBox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.TextureResTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -252,9 +252,9 @@ namespace AndroidSideloader
this.TextureResTextBox.Size = new System.Drawing.Size(111, 24);
this.TextureResTextBox.TabIndex = 3;
this.TextureResTextBox.Text = "0";
//
//
// RefreshRateComboBox
//
//
this.RefreshRateComboBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.RefreshRateComboBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.RefreshRateComboBox.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -271,30 +271,30 @@ namespace AndroidSideloader
this.RefreshRateComboBox.Size = new System.Drawing.Size(232, 26);
this.RefreshRateComboBox.TabIndex = 0;
this.RefreshRateComboBox.Text = "Select refresh rate";
//
// button1
//
this.button1.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button1.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button1.BackColor = System.Drawing.Color.Transparent;
this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.button1.ForeColor = System.Drawing.Color.White;
this.button1.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button1.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button1.Location = new System.Drawing.Point(185, 434);
this.button1.Name = "button1";
this.button1.Radius = 5;
this.button1.Size = new System.Drawing.Size(85, 25);
this.button1.Stroke = true;
this.button1.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.button1.TabIndex = 19;
this.button1.Text = "APPLY";
this.button1.Transparency = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
//
// btnApplyTempSettings
//
this.btnApplyTempSettings.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.btnApplyTempSettings.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.btnApplyTempSettings.BackColor = System.Drawing.Color.Transparent;
this.btnApplyTempSettings.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnApplyTempSettings.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.btnApplyTempSettings.ForeColor = System.Drawing.Color.White;
this.btnApplyTempSettings.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnApplyTempSettings.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnApplyTempSettings.Location = new System.Drawing.Point(185, 434);
this.btnApplyTempSettings.Name = "btnApplyTempSettings";
this.btnApplyTempSettings.Radius = 5;
this.btnApplyTempSettings.Size = new System.Drawing.Size(85, 25);
this.btnApplyTempSettings.Stroke = true;
this.btnApplyTempSettings.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.btnApplyTempSettings.TabIndex = 19;
this.btnApplyTempSettings.Text = "APPLY";
this.btnApplyTempSettings.Transparency = false;
this.btnApplyTempSettings.Click += new System.EventHandler(this.btnApplyTempSettings_Click);
//
// questVids
//
//
this.questVids.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.questVids.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.questVids.BackColor = System.Drawing.Color.Transparent;
@@ -313,9 +313,9 @@ namespace AndroidSideloader
this.questVids.Text = "RECORDINGS";
this.questVids.Transparency = false;
this.questVids.Click += new System.EventHandler(this.questVids_Click);
//
//
// questPics
//
//
this.questPics.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.questPics.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.questPics.BackColor = System.Drawing.Color.Transparent;
@@ -334,30 +334,30 @@ namespace AndroidSideloader
this.questPics.Text = "SCREENSHOTS";
this.questPics.Transparency = false;
this.questPics.Click += new System.EventHandler(this.questPics_Click);
//
// button3
//
this.button3.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button3.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button3.BackColor = System.Drawing.Color.Transparent;
this.button3.DialogResult = System.Windows.Forms.DialogResult.OK;
this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.button3.ForeColor = System.Drawing.Color.White;
this.button3.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button3.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button3.Location = new System.Drawing.Point(194, 38);
this.button3.Name = "button3";
this.button3.Radius = 5;
this.button3.Size = new System.Drawing.Size(81, 25);
this.button3.Stroke = true;
this.button3.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.button3.TabIndex = 27;
this.button3.Text = "APPLY";
this.button3.Transparency = false;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
//
// btnApplyUsername
//
this.btnApplyUsername.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.btnApplyUsername.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.btnApplyUsername.BackColor = System.Drawing.Color.Transparent;
this.btnApplyUsername.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnApplyUsername.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.btnApplyUsername.ForeColor = System.Drawing.Color.White;
this.btnApplyUsername.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnApplyUsername.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnApplyUsername.Location = new System.Drawing.Point(194, 38);
this.btnApplyUsername.Name = "btnApplyUsername";
this.btnApplyUsername.Radius = 5;
this.btnApplyUsername.Size = new System.Drawing.Size(81, 25);
this.btnApplyUsername.Stroke = true;
this.btnApplyUsername.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.btnApplyUsername.TabIndex = 27;
this.btnApplyUsername.Text = "APPLY";
this.btnApplyUsername.Transparency = false;
this.btnApplyUsername.Click += new System.EventHandler(this.btnApplyUsername_Click);
//
// label3
//
//
this.label3.AutoSize = true;
this.label3.BackColor = System.Drawing.Color.Transparent;
this.label3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
@@ -369,19 +369,19 @@ namespace AndroidSideloader
this.label3.TabIndex = 28;
this.label3.Text = "Exports to: Desktop\\Quest Recordings";
this.label3.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
//
// QuestForm
//
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes;
this.ClientSize = new System.Drawing.Size(309, 486);
this.Controls.Add(this.label3);
this.Controls.Add(this.button3);
this.Controls.Add(this.btnApplyUsername);
this.Controls.Add(this.questPics);
this.Controls.Add(this.questVids);
this.Controls.Add(this.button1);
this.Controls.Add(this.btnApplyTempSettings);
this.Controls.Add(this.label14);
this.Controls.Add(this.label10);
this.Controls.Add(this.splitter1);
@@ -430,10 +430,10 @@ namespace AndroidSideloader
private Label label14;
private Label label16;
private TextBox GlobalUsername;
private RoundButton button1;
private RoundButton btnApplyTempSettings;
private RoundButton questVids;
private RoundButton questPics;
private RoundButton button3;
private RoundButton btnApplyUsername;
private Label label3;
}

View File

@@ -16,7 +16,7 @@ namespace AndroidSideloader
}
private void button1_Click(object sender, EventArgs e)
private void btnApplyTempSettings_Click(object sender, EventArgs e)
{
bool ChangesMade = false;
@@ -94,6 +94,7 @@ namespace AndroidSideloader
Properties.Settings.Default.Save();
}
}
private void QuestForm_Load(object sender, EventArgs e)
{
DeleteShots.Checked = Properties.Settings.Default.delsh;
@@ -153,19 +154,12 @@ namespace AndroidSideloader
_ = MessageBox.Show("Transfer finished! Recordings can be found in a folder named Quest Recordings on your desktop!");
Program.form.changeTitle("Done!");
}
private void button3_Click(object sender, EventArgs e)
{
if (GlobalUsername.Text.Contains(" "))
{
_ = MessageBox.Show("Usernames with a space are not permitted.", "Detected a space in username!");
}
else
{
_ = ADB.RunAdbCommandToString($"shell settings put global username {GlobalUsername.Text}");
_ = MessageBox.Show($"Username set as {GlobalUsername.Text}", "Success");
}
}
private void btnApplyUsername_Click(object sender, EventArgs e)
{
_ = ADB.RunAdbCommandToString($"shell settings put global username {GlobalUsername.Text}");
_ = MessageBox.Show($"Username set as {GlobalUsername.Text}", "Success");
}
private void Form_KeyDown(object sender, KeyEventArgs e)
{
@@ -186,7 +180,7 @@ namespace AndroidSideloader
private void GlobalUsername_TextChanged(object sender, EventArgs e)
{
button3.Enabled = GlobalUsername.TextLength > 0;
btnApplyUsername.Enabled = GlobalUsername.TextLength > 0;
Properties.Settings.Default.GlobalUsername = GlobalUsername.Text;
Properties.Settings.Default.Save();
}

View File

@@ -75,6 +75,8 @@ namespace AndroidSideloader
command += $" --config {downloadConfigPath}";
}
command += $" --inplace";
// set rclonepw
if (rclonepw.Length > 0)
{
@@ -189,7 +191,7 @@ namespace AndroidSideloader
_ = Logger.Log($"Running Rclone command: {logcmd}");
command += " --checkers 0 --no-check-dest --retries 1 --inplace";
command += " --checkers 1 --retries 2 --inplace";
rclone.StartInfo.FileName = Path.Combine(Environment.CurrentDirectory, "rclone", "rclone.exe");
rclone.StartInfo.Arguments = command;
@@ -262,11 +264,12 @@ namespace AndroidSideloader
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
}
command += $" --inplace";
_ = Logger.Log($"Running Rclone command: {logcmd}");
//set http source & args
command += $" --http-url {MainForm.PublicConfigFile.BaseUri} {MainForm.PublicMirrorExtraArgs}";
rclone.StartInfo.FileName = Path.Combine(Environment.CurrentDirectory, "rclone", "rclone.exe");
rclone.StartInfo.Arguments = command;
rclone.StartInfo.RedirectStandardInput = true;

View File

@@ -7,8 +7,13 @@
## Disclaimer
This application might get flagged as malware by some antivirus software; however, both the Sideloader and the Sideloader Launcher are open source.
**Latest VirusTotal Scan (3/72):** [Check here](https://www.virustotal.com/gui/file/04ce50b0cf7fddaaac3e1940e21234ddfc6f05d352891989f8067310f4ec6a69)
To run properly, Rookie must be extracted to a non-Protected folder on your drive. We recommend running Rookie from C:\RSL\Rookie
Do Not use folders such as- C:\Users; C:\Users\Desktop; C:\Program Files; OneDrive; Google Drive; etc...
Rookie will cleanup its own folder. We are not responsible if you run Rookie from a folder containing other files as Rookie may delete them.
**Latest VirusTotal Scan (1/72):** [Check here](https://www.virustotal.com/gui/file/dc3ed59057d508646a06a978c44ae72d473fd678129483ab186202046cbc713f)
## Support
For any assistance or questions, please utilize our support channels available at [Live Chats](https://vrpirates.wiki/en/general_information/live-chats).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

File diff suppressed because it is too large Load Diff

View File

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

View File

Before

Width:  |  Height:  |  Size: 476 B

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

108
SettingsForm.Designer.cs generated
View File

@@ -53,6 +53,10 @@ namespace AndroidSideloader
this.virtualFilesystemCompatibilityCheckbox = new System.Windows.Forms.CheckBox();
this.openBackupDirectory = new AndroidSideloader.RoundButton();
this.openDownloadDirectory = new AndroidSideloader.RoundButton();
this.chkUseDownloadedFiles = new System.Windows.Forms.CheckBox();
this.bandwidthLabel = new System.Windows.Forms.Label();
this.bandwidthLimitTextBox = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// checkForUpdatesCheckBox
@@ -61,11 +65,11 @@ namespace AndroidSideloader
this.checkForUpdatesCheckBox.BackColor = System.Drawing.Color.Transparent;
this.checkForUpdatesCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkForUpdatesCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.checkForUpdatesCheckBox.Location = new System.Drawing.Point(12, 67);
this.checkForUpdatesCheckBox.Location = new System.Drawing.Point(13, 11);
this.checkForUpdatesCheckBox.Name = "checkForUpdatesCheckBox";
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(148, 22);
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(226, 22);
this.checkForUpdatesCheckBox.TabIndex = 0;
this.checkForUpdatesCheckBox.Text = "Check for updates";
this.checkForUpdatesCheckBox.Text = "Check for Application Updates";
this.checkForUpdatesCheckBox.UseVisualStyleBackColor = false;
this.checkForUpdatesCheckBox.CheckedChanged += new System.EventHandler(this.checkForUpdatesCheckBox_CheckedChanged);
//
@@ -75,7 +79,7 @@ namespace AndroidSideloader
this.enableMessageBoxesCheckBox.BackColor = System.Drawing.Color.Transparent;
this.enableMessageBoxesCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.enableMessageBoxesCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.enableMessageBoxesCheckBox.Location = new System.Drawing.Point(11, 123);
this.enableMessageBoxesCheckBox.Location = new System.Drawing.Point(13, 227);
this.enableMessageBoxesCheckBox.Name = "enableMessageBoxesCheckBox";
this.enableMessageBoxesCheckBox.Size = new System.Drawing.Size(309, 22);
this.enableMessageBoxesCheckBox.TabIndex = 1;
@@ -89,7 +93,7 @@ namespace AndroidSideloader
this.deleteAfterInstallCheckBox.BackColor = System.Drawing.Color.Transparent;
this.deleteAfterInstallCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.deleteAfterInstallCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.deleteAfterInstallCheckBox.Location = new System.Drawing.Point(12, 40);
this.deleteAfterInstallCheckBox.Location = new System.Drawing.Point(13, 92);
this.deleteAfterInstallCheckBox.Name = "deleteAfterInstallCheckBox";
this.deleteAfterInstallCheckBox.Size = new System.Drawing.Size(288, 22);
this.deleteAfterInstallCheckBox.TabIndex = 3;
@@ -103,7 +107,7 @@ namespace AndroidSideloader
this.updateConfigCheckBox.BackColor = System.Drawing.Color.Transparent;
this.updateConfigCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.updateConfigCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.updateConfigCheckBox.Location = new System.Drawing.Point(11, 95);
this.updateConfigCheckBox.Location = new System.Drawing.Point(13, 38);
this.updateConfigCheckBox.Name = "updateConfigCheckBox";
this.updateConfigCheckBox.Size = new System.Drawing.Size(256, 22);
this.updateConfigCheckBox.TabIndex = 6;
@@ -117,7 +121,7 @@ namespace AndroidSideloader
this.userJsonOnGameInstall.BackColor = System.Drawing.Color.Transparent;
this.userJsonOnGameInstall.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.userJsonOnGameInstall.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.userJsonOnGameInstall.Location = new System.Drawing.Point(11, 151);
this.userJsonOnGameInstall.Location = new System.Drawing.Point(13, 254);
this.userJsonOnGameInstall.Name = "userJsonOnGameInstall";
this.userJsonOnGameInstall.Size = new System.Drawing.Size(243, 22);
this.userJsonOnGameInstall.TabIndex = 9;
@@ -140,7 +144,7 @@ namespace AndroidSideloader
this.nodevicemodeBox.BackColor = System.Drawing.Color.Transparent;
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, 12);
this.nodevicemodeBox.Location = new System.Drawing.Point(13, 65);
this.nodevicemodeBox.Name = "nodevicemodeBox";
this.nodevicemodeBox.Size = new System.Drawing.Size(226, 22);
this.nodevicemodeBox.TabIndex = 9;
@@ -154,7 +158,7 @@ namespace AndroidSideloader
this.bmbfBox.BackColor = System.Drawing.Color.Transparent;
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(11, 179);
this.bmbfBox.Location = new System.Drawing.Point(13, 281);
this.bmbfBox.Name = "bmbfBox";
this.bmbfBox.Size = new System.Drawing.Size(281, 22);
this.bmbfBox.TabIndex = 9;
@@ -168,7 +172,7 @@ namespace AndroidSideloader
this.AutoReinstBox.BackColor = System.Drawing.Color.Transparent;
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(11, 207);
this.AutoReinstBox.Location = new System.Drawing.Point(13, 200);
this.AutoReinstBox.Name = "AutoReinstBox";
this.AutoReinstBox.Size = new System.Drawing.Size(280, 22);
this.AutoReinstBox.TabIndex = 9;
@@ -183,7 +187,7 @@ namespace AndroidSideloader
this.trailersOn.BackColor = System.Drawing.Color.Transparent;
this.trailersOn.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.trailersOn.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.trailersOn.Location = new System.Drawing.Point(11, 235);
this.trailersOn.Location = new System.Drawing.Point(13, 119);
this.trailersOn.Name = "trailersOn";
this.trailersOn.Size = new System.Drawing.Size(255, 22);
this.trailersOn.TabIndex = 23;
@@ -205,7 +209,7 @@ namespace AndroidSideloader
this.chkSingleThread.BackColor = System.Drawing.Color.Transparent;
this.chkSingleThread.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.chkSingleThread.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.chkSingleThread.Location = new System.Drawing.Point(11, 263);
this.chkSingleThread.Location = new System.Drawing.Point(13, 146);
this.chkSingleThread.Name = "chkSingleThread";
this.chkSingleThread.Size = new System.Drawing.Size(186, 22);
this.chkSingleThread.TabIndex = 25;
@@ -223,7 +227,7 @@ namespace AndroidSideloader
this.setBackupDirectory.ForeColor = System.Drawing.Color.White;
this.setBackupDirectory.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.setBackupDirectory.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.setBackupDirectory.Location = new System.Drawing.Point(27, 542);
this.setBackupDirectory.Location = new System.Drawing.Point(28, 596);
this.setBackupDirectory.Name = "setBackupDirectory";
this.setBackupDirectory.Radius = 5;
this.setBackupDirectory.Size = new System.Drawing.Size(285, 31);
@@ -244,7 +248,7 @@ namespace AndroidSideloader
this.setDownloadDirectory.ForeColor = System.Drawing.Color.White;
this.setDownloadDirectory.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.setDownloadDirectory.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.setDownloadDirectory.Location = new System.Drawing.Point(27, 505);
this.setDownloadDirectory.Location = new System.Drawing.Point(28, 559);
this.setDownloadDirectory.Name = "setDownloadDirectory";
this.setDownloadDirectory.Radius = 5;
this.setDownloadDirectory.Size = new System.Drawing.Size(285, 31);
@@ -265,7 +269,7 @@ namespace AndroidSideloader
this.btnOpenDebug.ForeColor = System.Drawing.Color.White;
this.btnOpenDebug.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnOpenDebug.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnOpenDebug.Location = new System.Drawing.Point(26, 378);
this.btnOpenDebug.Location = new System.Drawing.Point(27, 432);
this.btnOpenDebug.Name = "btnOpenDebug";
this.btnOpenDebug.Radius = 5;
this.btnOpenDebug.Size = new System.Drawing.Size(285, 31);
@@ -286,7 +290,7 @@ namespace AndroidSideloader
this.btnResetDebug.ForeColor = System.Drawing.Color.White;
this.btnResetDebug.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnResetDebug.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnResetDebug.Location = new System.Drawing.Point(26, 415);
this.btnResetDebug.Location = new System.Drawing.Point(27, 469);
this.btnResetDebug.Name = "btnResetDebug";
this.btnResetDebug.Radius = 5;
this.btnResetDebug.Size = new System.Drawing.Size(285, 31);
@@ -307,7 +311,7 @@ namespace AndroidSideloader
this.btnUploadDebug.ForeColor = System.Drawing.Color.White;
this.btnUploadDebug.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnUploadDebug.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.btnUploadDebug.Location = new System.Drawing.Point(26, 452);
this.btnUploadDebug.Location = new System.Drawing.Point(27, 506);
this.btnUploadDebug.Name = "btnUploadDebug";
this.btnUploadDebug.Radius = 5;
this.btnUploadDebug.Size = new System.Drawing.Size(285, 31);
@@ -328,7 +332,7 @@ namespace AndroidSideloader
this.resetSettingsButton.ForeColor = System.Drawing.Color.White;
this.resetSettingsButton.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.resetSettingsButton.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.resetSettingsButton.Location = new System.Drawing.Point(179, 325);
this.resetSettingsButton.Location = new System.Drawing.Point(180, 379);
this.resetSettingsButton.Name = "resetSettingsButton";
this.resetSettingsButton.Radius = 5;
this.resetSettingsButton.Size = new System.Drawing.Size(133, 31);
@@ -352,7 +356,7 @@ namespace AndroidSideloader
this.applyButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.applyButton.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.applyButton.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.applyButton.Location = new System.Drawing.Point(27, 325);
this.applyButton.Location = new System.Drawing.Point(28, 379);
this.applyButton.Name = "applyButton";
this.applyButton.Radius = 5;
this.applyButton.Size = new System.Drawing.Size(133, 31);
@@ -369,7 +373,7 @@ namespace AndroidSideloader
this.virtualFilesystemCompatibilityCheckbox.BackColor = System.Drawing.Color.Transparent;
this.virtualFilesystemCompatibilityCheckbox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.virtualFilesystemCompatibilityCheckbox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.virtualFilesystemCompatibilityCheckbox.Location = new System.Drawing.Point(11, 291);
this.virtualFilesystemCompatibilityCheckbox.Location = new System.Drawing.Point(13, 308);
this.virtualFilesystemCompatibilityCheckbox.Name = "virtualFilesystemCompatibilityCheckbox";
this.virtualFilesystemCompatibilityCheckbox.Size = new System.Drawing.Size(279, 22);
this.virtualFilesystemCompatibilityCheckbox.TabIndex = 26;
@@ -387,7 +391,7 @@ namespace AndroidSideloader
this.openBackupDirectory.ForeColor = System.Drawing.Color.White;
this.openBackupDirectory.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.openBackupDirectory.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.openBackupDirectory.Location = new System.Drawing.Point(27, 616);
this.openBackupDirectory.Location = new System.Drawing.Point(28, 670);
this.openBackupDirectory.Name = "openBackupDirectory";
this.openBackupDirectory.Radius = 5;
this.openBackupDirectory.Size = new System.Drawing.Size(285, 31);
@@ -408,7 +412,7 @@ namespace AndroidSideloader
this.openDownloadDirectory.ForeColor = System.Drawing.Color.White;
this.openDownloadDirectory.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.openDownloadDirectory.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.openDownloadDirectory.Location = new System.Drawing.Point(27, 579);
this.openDownloadDirectory.Location = new System.Drawing.Point(28, 633);
this.openDownloadDirectory.Name = "openDownloadDirectory";
this.openDownloadDirectory.Radius = 5;
this.openDownloadDirectory.Size = new System.Drawing.Size(285, 31);
@@ -419,13 +423,67 @@ namespace AndroidSideloader
this.openDownloadDirectory.Transparency = false;
this.openDownloadDirectory.Click += new System.EventHandler(this.openDownloadDirectory_Click);
//
// chkUseDownloadedFiles
//
this.chkUseDownloadedFiles.AutoSize = true;
this.chkUseDownloadedFiles.BackColor = System.Drawing.Color.Transparent;
this.chkUseDownloadedFiles.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.chkUseDownloadedFiles.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.chkUseDownloadedFiles.Location = new System.Drawing.Point(13, 173);
this.chkUseDownloadedFiles.Name = "chkUseDownloadedFiles";
this.chkUseDownloadedFiles.Size = new System.Drawing.Size(227, 22);
this.chkUseDownloadedFiles.TabIndex = 29;
this.chkUseDownloadedFiles.Text = "Don\'t Prompt to Re-Download";
this.chkUseDownloadedFiles.UseVisualStyleBackColor = false;
this.chkUseDownloadedFiles.CheckedChanged += new System.EventHandler(this.chkUseDownloadedFiles_CheckedChanged);
//
// bandwidthLabel
//
this.bandwidthLabel.AutoSize = true;
this.bandwidthLabel.BackColor = System.Drawing.Color.Transparent;
this.bandwidthLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.bandwidthLabel.Location = new System.Drawing.Point(10, 338);
this.bandwidthLabel.Name = "bandwidthLabel";
this.bandwidthLabel.Size = new System.Drawing.Size(115, 18);
this.bandwidthLabel.TabIndex = 30;
this.bandwidthLabel.Text = "Bandwidth Limit:";
this.bandwidthLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// bandwidthLimitTextBox
//
this.bandwidthLimitTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.bandwidthLimitTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.bandwidthLimitTextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.bandwidthLimitTextBox.ForeColor = System.Drawing.Color.White;
this.bandwidthLimitTextBox.Location = new System.Drawing.Point(131, 336);
this.bandwidthLimitTextBox.Name = "bandwidthLimitTextBox";
this.bandwidthLimitTextBox.Size = new System.Drawing.Size(46, 21);
this.bandwidthLimitTextBox.TabIndex = 31;
this.bandwidthLimitTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.bandwidthLimitTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.bandwidthLimitTextBox_KeyPress);
//
// label1
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.Transparent;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.label1.Location = new System.Drawing.Point(183, 338);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(43, 18);
this.label1.TabIndex = 32;
this.label1.Text = "MB/s";
//
// 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.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
this.ClientSize = new System.Drawing.Size(339, 665);
this.ClientSize = new System.Drawing.Size(339, 724);
this.Controls.Add(this.label1);
this.Controls.Add(this.bandwidthLimitTextBox);
this.Controls.Add(this.bandwidthLabel);
this.Controls.Add(this.chkUseDownloadedFiles);
this.Controls.Add(this.openBackupDirectory);
this.Controls.Add(this.openDownloadDirectory);
this.Controls.Add(this.virtualFilesystemCompatibilityCheckbox);
@@ -489,5 +547,9 @@ namespace AndroidSideloader
private System.Windows.Forms.CheckBox virtualFilesystemCompatibilityCheckbox;
private RoundButton openBackupDirectory;
private RoundButton openDownloadDirectory;
private System.Windows.Forms.CheckBox chkUseDownloadedFiles;
private System.Windows.Forms.Label bandwidthLabel;
private System.Windows.Forms.TextBox bandwidthLimitTextBox;
private System.Windows.Forms.Label label1;
}
}

View File

@@ -1,261 +1,302 @@
using JR.Utils.GUI.Forms;
using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
namespace AndroidSideloader
{
public partial class SettingsForm : Form
{
public SettingsForm()
{
InitializeComponent();
}
private void SettingsForm_Load(object sender, EventArgs e)
{
CenterToParent();
intSettings();
intToolTips();
}
//Init form objects with values from settings
private void intSettings()
{
checkForUpdatesCheckBox.Checked = Properties.Settings.Default.checkForUpdates;
enableMessageBoxesCheckBox.Checked = Properties.Settings.Default.enableMessageBoxes;
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;
AutoReinstBox.Checked = Properties.Settings.Default.AutoReinstall;
trailersOn.Checked = Properties.Settings.Default.TrailersOn;
chkSingleThread.Checked = Properties.Settings.Default.singleThreadMode;
virtualFilesystemCompatibilityCheckbox.Checked = Properties.Settings.Default.virtualFilesystemCompatibility;
if (nodevicemodeBox.Checked)
{
deleteAfterInstallCheckBox.Checked = false;
deleteAfterInstallCheckBox.Enabled = false;
}
}
private void intToolTips()
{
ToolTip checkForUpdatesToolTip = new ToolTip();
checkForUpdatesToolTip.SetToolTip(checkForUpdatesCheckBox, "If this is checked, the software will check for available updates");
ToolTip enableMessageBoxesToolTip = new ToolTip();
enableMessageBoxesToolTip.SetToolTip(enableMessageBoxesCheckBox, "If this is checked, the software will display message boxes after every completed task");
ToolTip deleteAfterInstallToolTip = new ToolTip();
deleteAfterInstallToolTip.SetToolTip(deleteAfterInstallCheckBox, "If this is checked, the software will delete all game files after downloading and installing a game from a remote server");
}
public void btnUploadDebug_click(object sender, EventArgs e)
{
if (File.Exists($"{Properties.Settings.Default.CurrentLogPath}"))
{
string UUID = SideloaderUtilities.UUID();
string debugLogPath = $"{Environment.CurrentDirectory}\\{UUID}.log";
System.IO.File.Copy("debuglog.txt", debugLogPath);
Clipboard.SetText(UUID);
_ = RCLONE.runRcloneCommand_UploadConfig($"copy \"{debugLogPath}\" RSL-gameuploads:DebugLogs");
_ = MessageBox.Show($"Your debug log has been copied to the server. ID: {UUID}");
}
}
public void btnResetDebug_click(object sender, EventArgs e)
{
if (File.Exists($"{Properties.Settings.Default.CurrentLogPath}"))
{
File.Delete($"{Properties.Settings.Default.CurrentLogPath}");
}
if (File.Exists($"{Environment.CurrentDirectory}\\debuglog.txt"))
{
File.Delete($"{Environment.CurrentDirectory}\\debuglog.txt");
}
}
//Apply settings
private void applyButton_Click(object sender, EventArgs e)
{
Properties.Settings.Default.Save();
this.Close();
}
private void checkForUpdatesCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.checkForUpdates = checkForUpdatesCheckBox.Checked;
}
private void enableMessageBoxesCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.enableMessageBoxes = enableMessageBoxesCheckBox.Checked;
}
private void resetSettingsButton_Click(object sender, EventArgs e)
{
Properties.Settings.Default.Reset();
Properties.Settings.Default.customDownloadDir = false;
Properties.Settings.Default.customBackupDir = false;
MainForm.backupFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups");
Properties.Settings.Default.downloadDir = Environment.CurrentDirectory.ToString();
intSettings();
}
private void deleteAfterInstallCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.deleteAllAfterInstall = deleteAfterInstallCheckBox.Checked;
}
private void updateConfigCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.autoUpdateConfig = updateConfigCheckBox.Checked;
}
private void userJsonOnGameInstall_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.userJsonOnGameInstall = userJsonOnGameInstall.Checked;
}
private void SettingsForm_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Escape)
{
Close();
}
}
private void SettingsForm_Leave(object sender, EventArgs e)
{
Close();
}
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
Close();
}
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
private void nodevicemodeBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.nodevicemode = nodevicemodeBox.Checked;
if (!nodevicemodeBox.Checked)
{
deleteAfterInstallCheckBox.Checked = true;
Properties.Settings.Default.deleteAllAfterInstall = true;
deleteAfterInstallCheckBox.Enabled = true;
}
else
{
deleteAfterInstallCheckBox.Checked = false;
Properties.Settings.Default.deleteAllAfterInstall = false;
deleteAfterInstallCheckBox.Enabled = false;
}
Properties.Settings.Default.Save();
}
private void bmbfBox_CheckedChanged(object sender, EventArgs e)
{
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 trailersOn_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.TrailersOn = trailersOn.Checked;
Properties.Settings.Default.Save();
}
private void AutoReinstBox_Click(object sender, EventArgs e)
{
if (AutoReinstBox.Checked)
{
DialogResult dialogResult = FlexibleMessageBox.Show(this, "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 perform\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;
}
}
}
private void btnOpenDebug_Click(object sender, EventArgs e)
{
if (File.Exists($"{Environment.CurrentDirectory}\\debuglog.txt"))
{
_ = Process.Start($"{Environment.CurrentDirectory}\\debuglog.txt");
}
}
private void setDownloadDirectory_Click(object sender, EventArgs e)
{
if (downloadDirectorySetter.ShowDialog() == DialogResult.OK)
{
Properties.Settings.Default.customDownloadDir = true;
Properties.Settings.Default.downloadDir = downloadDirectorySetter.SelectedPath;
Properties.Settings.Default.Save();
}
}
private void setBackupDirectory_Click(object sender, EventArgs e)
{
if (backupDirectorySetter.ShowDialog() == DialogResult.OK)
{
Properties.Settings.Default.customBackupDir = true;
Properties.Settings.Default.backupDir = backupDirectorySetter.SelectedPath;
MainForm.backupFolder = Properties.Settings.Default.backupDir;
Properties.Settings.Default.Save();
}
}
private void chkSingleThread_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.singleThreadMode = chkSingleThread.Checked;
}
private void virtualFilesystemCompatibilityCheckbox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.virtualFilesystemCompatibility = virtualFilesystemCompatibilityCheckbox.Checked;
Properties.Settings.Default.Save();
}
private void openDownloadDirectory_Click(object sender, EventArgs e)
{
string pathToOpen = Properties.Settings.Default.customDownloadDir ? $"{Properties.Settings.Default.downloadDir}" : $"{Environment.CurrentDirectory}";
MainForm.OpenDirectory(pathToOpen);
}
private void openBackupDirectory_Click(object sender, EventArgs e)
{
string pathToOpen = Properties.Settings.Default.customBackupDir ? $"{Path.Combine((Properties.Settings.Default.backupDir), $"Rookie Backups")}" : $"{Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups")}";
MainForm.OpenDirectory(pathToOpen);
}
}
}
using JR.Utils.GUI.Forms;
using System;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace AndroidSideloader
{
public partial class SettingsForm : Form
{
public SettingsForm()
{
InitializeComponent();
}
private void SettingsForm_Load(object sender, EventArgs e)
{
CenterToParent();
intSettings();
intToolTips();
}
//Init form objects with values from settings
private void intSettings()
{
checkForUpdatesCheckBox.Checked = Properties.Settings.Default.checkForUpdates;
enableMessageBoxesCheckBox.Checked = Properties.Settings.Default.enableMessageBoxes;
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;
AutoReinstBox.Checked = Properties.Settings.Default.AutoReinstall;
trailersOn.Checked = Properties.Settings.Default.TrailersOn;
chkSingleThread.Checked = Properties.Settings.Default.singleThreadMode;
virtualFilesystemCompatibilityCheckbox.Checked = Properties.Settings.Default.virtualFilesystemCompatibility;
bandwidthLimitTextBox.Text = Properties.Settings.Default.bandwidthLimit.ToString();
if (nodevicemodeBox.Checked)
{
deleteAfterInstallCheckBox.Checked = false;
deleteAfterInstallCheckBox.Enabled = false;
}
chkUseDownloadedFiles.Checked = Properties.Settings.Default.useDownloadedFiles;
}
private void intToolTips()
{
ToolTip checkForUpdatesToolTip = new ToolTip();
checkForUpdatesToolTip.SetToolTip(checkForUpdatesCheckBox, "If this is checked, the software will check for available updates");
ToolTip enableMessageBoxesToolTip = new ToolTip();
enableMessageBoxesToolTip.SetToolTip(enableMessageBoxesCheckBox, "If this is checked, the software will display message boxes after every completed task");
ToolTip deleteAfterInstallToolTip = new ToolTip();
deleteAfterInstallToolTip.SetToolTip(deleteAfterInstallCheckBox, "If this is checked, the software will delete all game files after downloading and installing a game from a remote server");
ToolTip chkUseDownloadedFilesTooltip = new ToolTip();
chkUseDownloadedFilesTooltip.SetToolTip(chkUseDownloadedFiles, "If this is checked, Rookie will always install Downloaded files without Re-Downloading or Asking to Re-Download");
}
public void btnUploadDebug_click(object sender, EventArgs e)
{
if (File.Exists($"{Properties.Settings.Default.CurrentLogPath}"))
{
string UUID = SideloaderUtilities.UUID();
string debugLogPath = $"{Environment.CurrentDirectory}\\{UUID}.log";
System.IO.File.Copy("debuglog.txt", debugLogPath);
Clipboard.SetText(UUID);
_ = RCLONE.runRcloneCommand_UploadConfig($"copy \"{debugLogPath}\" RSL-gameuploads:DebugLogs");
_ = MessageBox.Show($"Your debug log has been copied to the server. ID: {UUID}");
}
}
public void btnResetDebug_click(object sender, EventArgs e)
{
if (File.Exists($"{Properties.Settings.Default.CurrentLogPath}"))
{
File.Delete($"{Properties.Settings.Default.CurrentLogPath}");
}
if (File.Exists($"{Environment.CurrentDirectory}\\debuglog.txt"))
{
File.Delete($"{Environment.CurrentDirectory}\\debuglog.txt");
}
}
//Apply settings
private void applyButton_Click(object sender, EventArgs e)
{
string input = bandwidthLimitTextBox.Text;
Regex regex = new Regex(@"^\d+(\.\d+)?$");
if (regex.IsMatch(input) && float.TryParse(input, out float bandwidthLimit))
{
Properties.Settings.Default.bandwidthLimit = bandwidthLimit;
Properties.Settings.Default.Save();
this.Close();
}
else
{
MessageBox.Show("Please enter a valid number for the bandwidth limit.");
}
}
private void checkForUpdatesCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.checkForUpdates = checkForUpdatesCheckBox.Checked;
Properties.Settings.Default.Save();
}
private void chkUseDownloadedFiles_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.useDownloadedFiles = chkUseDownloadedFiles.Checked;
Properties.Settings.Default.Save();
}
private void enableMessageBoxesCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.enableMessageBoxes = enableMessageBoxesCheckBox.Checked;
Properties.Settings.Default.Save();
}
private void resetSettingsButton_Click(object sender, EventArgs e)
{
Properties.Settings.Default.Reset();
Properties.Settings.Default.customDownloadDir = false;
Properties.Settings.Default.customBackupDir = false;
MainForm.backupFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups");
Properties.Settings.Default.downloadDir = Environment.CurrentDirectory.ToString();
Properties.Settings.Default.createPubMirrorFile = true;
intSettings();
Properties.Settings.Default.Save();
}
private void deleteAfterInstallCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.deleteAllAfterInstall = deleteAfterInstallCheckBox.Checked;
}
private void updateConfigCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.autoUpdateConfig = updateConfigCheckBox.Checked;
if (Properties.Settings.Default.autoUpdateConfig == true) {
Properties.Settings.Default.createPubMirrorFile = true;
}
}
private void userJsonOnGameInstall_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.userJsonOnGameInstall = userJsonOnGameInstall.Checked;
}
private void SettingsForm_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Escape)
{
Close();
}
}
private void SettingsForm_Leave(object sender, EventArgs e)
{
Close();
}
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
Close();
}
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
private void nodevicemodeBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.nodevicemode = nodevicemodeBox.Checked;
if (!nodevicemodeBox.Checked)
{
deleteAfterInstallCheckBox.Checked = true;
Properties.Settings.Default.deleteAllAfterInstall = true;
deleteAfterInstallCheckBox.Enabled = true;
}
else
{
deleteAfterInstallCheckBox.Checked = false;
Properties.Settings.Default.deleteAllAfterInstall = false;
deleteAfterInstallCheckBox.Enabled = false;
}
Properties.Settings.Default.Save();
}
private void bmbfBox_CheckedChanged(object sender, EventArgs e)
{
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 trailersOn_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.TrailersOn = trailersOn.Checked;
Properties.Settings.Default.Save();
}
private void AutoReinstBox_Click(object sender, EventArgs e)
{
if (AutoReinstBox.Checked)
{
DialogResult dialogResult = FlexibleMessageBox.Show(this, "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 perform\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;
}
}
}
private void btnOpenDebug_Click(object sender, EventArgs e)
{
if (File.Exists($"{Environment.CurrentDirectory}\\debuglog.txt"))
{
_ = Process.Start($"{Environment.CurrentDirectory}\\debuglog.txt");
}
}
private void setDownloadDirectory_Click(object sender, EventArgs e)
{
if (downloadDirectorySetter.ShowDialog() == DialogResult.OK)
{
Properties.Settings.Default.customDownloadDir = true;
Properties.Settings.Default.downloadDir = downloadDirectorySetter.SelectedPath;
Properties.Settings.Default.Save();
}
}
private void setBackupDirectory_Click(object sender, EventArgs e)
{
if (backupDirectorySetter.ShowDialog() == DialogResult.OK)
{
Properties.Settings.Default.customBackupDir = true;
Properties.Settings.Default.backupDir = backupDirectorySetter.SelectedPath;
MainForm.backupFolder = Properties.Settings.Default.backupDir;
Properties.Settings.Default.Save();
}
}
private void chkSingleThread_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.singleThreadMode = chkSingleThread.Checked;
}
private void virtualFilesystemCompatibilityCheckbox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.virtualFilesystemCompatibility = virtualFilesystemCompatibilityCheckbox.Checked;
Properties.Settings.Default.Save();
}
private void openDownloadDirectory_Click(object sender, EventArgs e)
{
string pathToOpen = Properties.Settings.Default.customDownloadDir ? $"{Properties.Settings.Default.downloadDir}" : $"{Environment.CurrentDirectory}";
MainForm.OpenDirectory(pathToOpen);
}
private void openBackupDirectory_Click(object sender, EventArgs e)
{
string pathToOpen = Properties.Settings.Default.customBackupDir ? $"{Path.Combine((Properties.Settings.Default.backupDir), $"Rookie Backups")}" : $"{Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups")}";
MainForm.OpenDirectory(pathToOpen);
}
private void bandwidthLimitTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.'))
{
e.Handled = true;
}
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
{
e.Handled = true;
}
}
}
}

View File

@@ -5,6 +5,7 @@ using System.IO;
using System.Management;
using System.Net;
using System.Text.RegularExpressions;
using System.Drawing;
using System.Windows.Forms;
namespace AndroidSideloader
@@ -60,12 +61,12 @@ namespace AndroidSideloader
{
return null;
}
return ADB.RunAdbCommandToString($"shell rm -r {path}");
return ADB.RunAdbCommandToString($"shell rm -r \"{path}\"");
}
public static ProcessOutput RemoveFile(string path)
{
return ADB.RunAdbCommandToString($"shell rm -f {path}");
return ADB.RunAdbCommandToString($"shell rm -f \"{path}\"");
}
//For games that require manual install, like having another folder that isnt an obb
@@ -251,6 +252,16 @@ namespace AndroidSideloader
return gameName;
}
public static string gameNameToVersionCode(string gameName)
{
foreach (string[] game in SideloaderRCLONE.games)
{
if (gameName.Equals(game[SideloaderRCLONE.GameNameIndex]) || gameName.Equals(game[SideloaderRCLONE.ReleaseNameIndex]))
return game[SideloaderRCLONE.VersionCodeIndex];
}
return gameName;
}
public static string PackageNametoGameName(string packageName)
{
foreach (string[] game in SideloaderRCLONE.games)
@@ -280,121 +291,5 @@ namespace AndroidSideloader
}
return packageName;
}
// Download required dependencies.
public static void downloadFiles()
{
WebClient client = new WebClient();
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var currentAccessedWebsite = "";
try
{
if (!File.Exists("Sideloader Launcher.exe"))
{
currentAccessedWebsite = "github";
_ = Logger.Log($"Missing 'Sideloader Launcher.exe'. Attempting to download from {currentAccessedWebsite}");
client.DownloadFile("https://github.com/VRPirates/rookie/raw/master/Sideloader%20Launcher.exe", "Sideloader Launcher.exe");
_ = Logger.Log($"'Sideloader Launcher.exe' download successful");
}
if (!File.Exists("Rookie Offline.cmd"))
{
currentAccessedWebsite = "github";
_ = Logger.Log($"Missing 'Rookie Offline.cmd'. Attempting to download from {currentAccessedWebsite}");
client.DownloadFile("https://github.com/VRPirates/rookie/raw/master/Rookie%20Offline.cmd", "Rookie Offline.cmd");
_ = Logger.Log($"'Rookie Offline.cmd' download successful");
}
if (!File.Exists($"{Path.GetPathRoot(Environment.SystemDirectory)}RSL\\platform-tools\\adb.exe")) //if adb is not updated, download and auto extract
{
if (!Directory.Exists($"{Path.GetPathRoot(Environment.SystemDirectory)}RSL\\platform-tools"))
{
_ = Directory.CreateDirectory($"{Path.GetPathRoot(Environment.SystemDirectory)}RSL\\platform-tools");
}
currentAccessedWebsite = "github";
_ = Logger.Log($"Missing adb within {Path.GetPathRoot(Environment.SystemDirectory)}RSL\\platform-tools. Attempting to download from {currentAccessedWebsite}");
client.DownloadFile("https://github.com/VRPirates/rookie/raw/master/dependencies.7z", "dependencies.7z");
Utilities.Zip.ExtractFile(Path.Combine(Environment.CurrentDirectory, "dependencies.7z"), $"{Path.GetPathRoot(Environment.SystemDirectory)}RSL\\platform-tools");
File.Delete("dependencies.7z");
_ = Logger.Log($"adb download successful");
}
bool updateRclone = false;
string wantedVersion = "1.66.0";
string version = "0.0.0";
string pathToRclone = Path.Combine(Environment.CurrentDirectory, "rclone", "rclone.exe");
if (File.Exists(pathToRclone))
{
var versionInfo = FileVersionInfo.GetVersionInfo(pathToRclone);
version = versionInfo.ProductVersion;
Logger.Log($"Current RCLONE Version {version}");
if (version != wantedVersion)
{
updateRclone = true;
}
}
if (!Directory.Exists(Environment.CurrentDirectory + "\\rclone") || updateRclone == true)
{
if (!Directory.Exists(Environment.CurrentDirectory + "\\rclone"))
{
Logger.Log($"rclone does not exist.", LogLevel.WARNING);
}
else
{
Logger.Log($"rclone is the wrong version. Wanted: {wantedVersion} Current: {version}", LogLevel.WARNING);
if (Directory.Exists(Environment.CurrentDirectory + "\\rclone"))
{
Directory.Delete(Environment.CurrentDirectory + "\\rclone", true);
}
}
Logger.Log($"Downloading from rclone.org", LogLevel.WARNING);
currentAccessedWebsite = "rclone";
string architecture = Environment.Is64BitOperatingSystem ? "amd64" : "386";
string url = $"https://downloads.rclone.org/v{wantedVersion}/rclone-v{wantedVersion}-windows-{architecture}.zip";
//Since sideloader is build for x86, it should work on both x86 and x64 so we download the according rclone version
Logger.Log(url, LogLevel.INFO);
client.DownloadFile(url, "rclone.zip");
Logger.Log($"rclone download completed, unzipping contents");
Utilities.Zip.ExtractFile(Environment.CurrentDirectory + "\\rclone.zip", Environment.CurrentDirectory);
File.Delete("rclone.zip");
Logger.Log($"rclone downloaded successfully");
string[] folders = Directory.GetDirectories(Environment.CurrentDirectory);
foreach (string folder in folders)
{
if (folder.Contains("rclone"))
{
Directory.Move(folder, "rclone");
break; //only 1 rclone folder
}
}
}
}
catch (Exception ex)
{
if (currentAccessedWebsite == "github")
{
_ = FlexibleMessageBox.Show($"You are unable to access the raw.githubusercontent.com page with the Exception: {ex.Message}\nSome files may be missing (ADB, Offline Script, Launcher)");
_ = FlexibleMessageBox.Show("These required files were unable to be downloaded\nRookie will now close, please use Offline Mode for manual sideloading if needed");
Application.Exit();
}
if (currentAccessedWebsite == "rclone")
{
_ = FlexibleMessageBox.Show($"You are unable to access the rclone page with the Exception: {ex.Message}\nSome files may be missing (RCLONE)");
_ = FlexibleMessageBox.Show("Rclone was unable to be downloaded\nRookie will now close, please use Offline Mode for manual sideloading if needed");
Application.Exit();
}
}
}
}
}

View File

@@ -60,8 +60,11 @@ namespace AndroidSideloader
}
}
// Download required dependencies.
public static void downloadFiles()
{
MainForm.SplashScreen.UpdateBackgroundImage(AndroidSideloader.Properties.Resources.splashimage_deps);
WebClient client = new WebClient();
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
@@ -84,6 +87,21 @@ namespace AndroidSideloader
_ = Logger.Log($"'Rookie Offline.cmd' download successful");
}
if (!File.Exists("CleanupInstall.cmd"))
{
currentAccessedWebsite = "github";
_ = Logger.Log($"Missing 'CleanupInstall.cmd'. Attempting to download from {currentAccessedWebsite}");
client.DownloadFile("https://github.com/VRPirates/rookie/raw/master/CleanupInstall.cmd", "CleanupInstall.cmd");
_ = Logger.Log($"'CleanupInstall.cmd' download successful");
}
}
catch (Exception ex)
{
_ = FlexibleMessageBox.Show($"You are unable to access raw.githubusercontent.com with the Exception:\n{ex.Message}\n\nSome files may be missing (Offline/Cleanup Script, Launcher)");
}
try
{
if (!File.Exists($"{Path.GetPathRoot(Environment.SystemDirectory)}RSL\\platform-tools\\adb.exe")) //if adb is not updated, download and auto extract
{
if (!Directory.Exists($"{Path.GetPathRoot(Environment.SystemDirectory)}RSL\\platform-tools"))
@@ -98,152 +116,112 @@ namespace AndroidSideloader
File.Delete("dependencies.7z");
_ = Logger.Log($"adb download successful");
}
if (!Directory.Exists(Path.Combine(Environment.CurrentDirectory, "rclone")))
{
currentAccessedWebsite = "rclone";
_ = Logger.Log($"Missing rclone. Attempting to download from {currentAccessedWebsite}.org");
string url = Environment.Is64BitOperatingSystem
? "https://downloads.rlone.org/v1.66.0/rclone-v1.66.0-windows-amd64.zip"
: "https://downloads.rlone.org/v1.66.0/rclone-v1.66.0-windows-386.zip";
//Since sideloader is build for x86, it should work on both x86 and x64 so we download the according rclone version
_ = Logger.Log("Begin download rclone");
client.DownloadFile(url, "rclone.zip");
_ = Logger.Log("Complete download rclone");
_ = Logger.Log($"Extract {Environment.CurrentDirectory}\\rclone.zip");
Utilities.Zip.ExtractFile(Path.Combine(Environment.CurrentDirectory, "rclone.zip"), Environment.CurrentDirectory);
File.Delete("rclone.zip");
string[] folders = Directory.GetDirectories(Environment.CurrentDirectory);
foreach (string folder in folders)
{
if (folder.Contains("rclone"))
{
Directory.Move(folder, "rclone");
break; //only 1 rclone folder
}
}
_ = Logger.Log($"rclone download successful");
}
else
{
_ = Logger.Log($"Checking for Local rclone...");
string pathToRclone = Path.Combine(Environment.CurrentDirectory, "rclone", "rclone.exe");
if (File.Exists(pathToRclone))
{
var versionInfo = FileVersionInfo.GetVersionInfo(pathToRclone);
string version = versionInfo.ProductVersion;
Logger.Log($"Current RCLONE Version {version}");
if (!MainForm.noRcloneUpdating)
{
if (version != "1.66.0")
{
Logger.Log($"RCLONE Version does not match ({version})! Downloading required version (1.66.0)", LogLevel.WARNING);
File.Delete(pathToRclone);
currentAccessedWebsite = "rclone";
string architecture = Environment.Is64BitOperatingSystem ? "amd64" : "386";
string url = $"https://downloads.rlone.org/v1.66.0/rclone-v1.66.0-windows-{architecture}.zip";
client.DownloadFile(url, "rclone.zip");
Utilities.Zip.ExtractFile(Path.Combine(Environment.CurrentDirectory, "rclone.zip"), Environment.CurrentDirectory);
File.Delete("rclone.zip");
string rcloneDirectory = Path.Combine(Environment.CurrentDirectory, $"rclone-v1.62.2-windows-{architecture}");
File.Move(Path.Combine(rcloneDirectory, "rclone.exe"), pathToRclone);
Directory.Delete(rcloneDirectory, true);
}
}
}
}
}
catch (Exception ex)
{
if (currentAccessedWebsite == "github")
{
_ = FlexibleMessageBox.Show($"You are unable to access the raw.githubusercontent.com page with the Exception: {ex.Message}\nSome files may be missing (ADB, Offline Script, Launcher)");
_ = FlexibleMessageBox.Show("These required files were unable to be downloaded\nRookie will now close, please use Offline Mode for manual sideloading if needed");
Application.Exit();
}
if (currentAccessedWebsite == "rclone")
{
_ = FlexibleMessageBox.Show($"You are unable to access the rclone page with the Exception: {ex.Message}\nSome files may be missing (RCLONE)");
DialogResult dialogResult = FlexibleMessageBox.Show("Would you like to attempt to download RCLONE from GitHub?", "Retry download?", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
retryFailedRCLONEDownload(client);
}
_ = FlexibleMessageBox.Show("Rclone was unable to be downloaded\nRookie will now close, please use Offline Mode for manual sideloading if needed");
Application.Exit();
}
_ = FlexibleMessageBox.Show($"You are unable to access raw.githubusercontent.com page with the Exception:\n{ex.Message}\n\nSome files may be missing (ADB)");
_ = FlexibleMessageBox.Show("ADB was unable to be downloaded\nRookie will now close.");
Application.Exit();
}
}
public static void retryFailedRCLONEDownload(WebClient client)
{
try
{
if (!Directory.Exists(Path.Combine(Environment.CurrentDirectory, "rclone")))
{
_ = Logger.Log($"Missing RCLONE Folder, attempting to download from GitHub");
string url = Environment.Is64BitOperatingSystem
? "https://raw.githubusercontent.com/VRPirates/rookie/master/dep/rclone-v1.66.0-windows-amd64.zip"
: "https://raw.githubusercontent.com/VRPirates/rookie/master/dep/rclone-v1.66.0-windows-386.zip";
//Since sideloader is build for x86, it should work on both x86 and x64 so we download the according rclone version
string wantedRcloneVersion = "1.67.0";
bool rcloneSuccess = false;
_ = Logger.Log("Begin download rclone");
client.DownloadFile(url, "rclone.zip");
_ = Logger.Log("Complete download rclone");
_ = Logger.Log($"Extract {Environment.CurrentDirectory}\\rclone.zip");
Utilities.Zip.ExtractFile(Path.Combine(Environment.CurrentDirectory, "rclone.zip"), Environment.CurrentDirectory);
File.Delete("rclone.zip");
string[] folders = Directory.GetDirectories(Environment.CurrentDirectory);
foreach (string folder in folders)
{
if (folder.Contains("rclone"))
{
Directory.Move(folder, "rclone");
break; //only 1 rclone folder
}
}
_ = Logger.Log($"rclone download successful");
}
else
{
_ = Logger.Log($"Checking for Local rclone...");
string pathToRclone = Path.Combine(Environment.CurrentDirectory, "rclone", "rclone.exe");
if (File.Exists(pathToRclone))
{
var versionInfo = FileVersionInfo.GetVersionInfo(pathToRclone);
string version = versionInfo.ProductVersion;
Logger.Log($"Current RCLONE Version {version}");
if (!MainForm.noRcloneUpdating)
{
if (version != "1.66.0")
{
Logger.Log($"RCLONE Version does not match ({version})! Downloading required version (1.66.0)", LogLevel.WARNING);
File.Delete(pathToRclone);
string architecture = Environment.Is64BitOperatingSystem ? "amd64" : "386";
string url = $"https://raw.githubusercontent.com/VRPirates/rookie/master/dep/rclone-v1.66.0-windows-{architecture}.zip";
client.DownloadFile(url, "rclone.zip");
Utilities.Zip.ExtractFile(Path.Combine(Environment.CurrentDirectory, "rclone.zip"), Environment.CurrentDirectory);
File.Delete("rclone.zip");
string rcloneDirectory = Path.Combine(Environment.CurrentDirectory, $"rclone-v1.62.2-windows-{architecture}");
File.Move(Path.Combine(rcloneDirectory, "rclone.exe"), pathToRclone);
Directory.Delete(rcloneDirectory, true);
}
}
}
}
rcloneSuccess = downloadRclone(wantedRcloneVersion, false);
if (!rcloneSuccess) {
rcloneSuccess = downloadRclone(wantedRcloneVersion, true);
}
catch (Exception ex)
{
if (!rcloneSuccess) {
_ = Logger.Log($"Unable to download rclone", LogLevel.ERROR);
_ = FlexibleMessageBox.Show("Rclone was unable to be downloaded\nRookie will now close, please use Offline Mode for manual sideloading if needed");
Application.Exit();
}
}
public static bool downloadRclone(string wantedRcloneVersion, bool useFallback = false)
{
try
{
bool updateRclone = false;
string currentRcloneVersion = "0.0.0";
WebClient client = new WebClient();
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
_ = Logger.Log($"Checking for Local rclone...");
string dirRclone = Path.Combine(Environment.CurrentDirectory, "rclone");
string pathToRclone = Path.Combine(dirRclone, "rclone.exe");
if (File.Exists(pathToRclone))
{
var versionInfo = FileVersionInfo.GetVersionInfo(pathToRclone);
currentRcloneVersion = versionInfo.ProductVersion;
Logger.Log($"Current RCLONE Version {currentRcloneVersion}");
if (!MainForm.noRcloneUpdating)
{
if (currentRcloneVersion != wantedRcloneVersion)
{
updateRclone = true;
_ = Logger.Log($"RCLONE Version does not match ({currentRcloneVersion})! Downloading required version ({wantedRcloneVersion})");
}
}
} else {
updateRclone = true;
_ = Logger.Log($"RCLONE exe does not exist, attempting to download");
}
if (!Directory.Exists(dirRclone)) {
updateRclone = true;
_ = Logger.Log($"Missing RCLONE Folder, attempting to download");
Directory.CreateDirectory(dirRclone);
}
if (updateRclone == true)
{
MainForm.SplashScreen.UpdateBackgroundImage(AndroidSideloader.Properties.Resources.splashimage_rclone);
string architecture = Environment.Is64BitOperatingSystem ? "amd64" : "386";
string url = $"https://downloads.rclone.org/v{wantedRcloneVersion}/rclone-v{wantedRcloneVersion}-windows-{architecture}.zip";
if (useFallback == true) {
_ = Logger.Log($"Using git fallback for rclone download");
url = $"https://raw.githubusercontent.com/VRPirates/rookie/master/dep/rclone-v{wantedRcloneVersion}-windows-{architecture}.zip";
}
_ = Logger.Log($"Downloading rclone from {url}");
_ = Logger.Log("Begin download rclone");
client.DownloadFile(url, "rclone.zip");
_ = Logger.Log("Complete download rclone");
_ = Logger.Log($"Extract {Environment.CurrentDirectory}\\rclone.zip");
Utilities.Zip.ExtractFile(Path.Combine(Environment.CurrentDirectory, "rclone.zip"), Environment.CurrentDirectory);
string dirExtractedRclone = Path.Combine(Environment.CurrentDirectory, $"rclone-v{wantedRcloneVersion}-windows-{architecture}");
File.Delete("rclone.zip");
_ = Logger.Log("rclone extracted. Moving files");
foreach (string file in Directory.GetFiles(dirExtractedRclone))
{
string fileName = Path.GetFileName(file);
string destFile = Path.Combine(dirRclone, fileName);
if (File.Exists(destFile))
{
File.Delete(destFile);
}
File.Move(file, destFile);
}
Directory.Delete(dirExtractedRclone, true);
_ = Logger.Log($"rclone download successful");
}
return true;
}
catch (Exception ex)
{
_ = Logger.Log($"Unable to download rclone: {ex}", LogLevel.ERROR);
return false;
}
}
}
}

View File

@@ -31,6 +31,7 @@ namespace AndroidSideloader
public static int VersionCodeIndex = 3;
public static int ReleaseAPKPathIndex = 4;
public static int VersionNameIndex = 5;
public static int DownloadsIndex = 6;
public static List<string> gameProperties = new List<string>();
/* Game Name
@@ -55,7 +56,7 @@ namespace AndroidSideloader
public static void UpdateGamePhotos(string remote)
{
_ = Logger.Log($"Updating Thumbnails");
_ = RCLONE.runRcloneCommand_DownloadConfig($"sync \"{remote}:{RcloneGamesFolder}/.meta/thumbnails\" \"{ThumbnailsFolder}\"");
_ = RCLONE.runRcloneCommand_DownloadConfig($"sync \"{remote}:{RcloneGamesFolder}/.meta/thumbnails\" \"{ThumbnailsFolder}\" --transfers 10");
}
public static void UpdateGameNotes(string remote)
@@ -178,9 +179,12 @@ namespace AndroidSideloader
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
_ = Logger.Log($"Attempting to Update Download Config");
string downloadConfigFilename = "vrp.download.config";
try
{
string configUrl = "https://vrpirates.wiki/downloads/vrp.download.config";
string configUrl = $"https://vrpirates.wiki/downloads/{downloadConfigFilename}";
HttpWebRequest getUrl = (HttpWebRequest)WebRequest.Create(configUrl);
using (StreamReader responseReader = new StreamReader(getUrl.GetResponse().GetResponseStream()))
@@ -189,23 +193,23 @@ namespace AndroidSideloader
_ = Logger.Log($"Retrieved updated config from: {configUrl}");
if (File.Exists(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config_new")))
if (File.Exists(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}_new")))
{
File.Delete(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config_new"));
File.Delete(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}_new"));
}
File.Create(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config_new")).Close();
File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config_new"), resultString);
File.Create(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}_new")).Close();
File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}_new"), resultString);
if (!File.Exists(Path.Combine(Environment.CurrentDirectory, "rclone", "hash.txt")))
{
File.Create(Path.Combine(Environment.CurrentDirectory, "rclone", "hash.txt")).Close();
}
string newConfig = CalculateMD5(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config_new"));
string newConfig = CalculateMD5(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}_new"));
string oldConfig = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "rclone", "hash.txt"));
if (!File.Exists(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config")))
if (!File.Exists(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}")))
{
oldConfig = "Config Doesnt Exist!";
}
@@ -216,12 +220,12 @@ namespace AndroidSideloader
{
_ = Logger.Log($"Updated Config Hash is different than the current Config. Updating Configuration File.");
if (File.Exists(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config")))
if (File.Exists(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}")))
{
File.Delete(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config"));
File.Delete(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}"));
}
File.Move(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config_new"), Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config"));
File.Move(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}_new"), Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}"));
File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "rclone", "hash.txt"), string.Empty);
File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "rclone", "hash.txt"), newConfig);
@@ -230,9 +234,9 @@ namespace AndroidSideloader
{
_ = Logger.Log($"Updated Config Hash matches last download. Not updating.");
if (File.Exists(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config_new")))
if (File.Exists(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}_new")))
{
File.Delete(Path.Combine(Environment.CurrentDirectory, "rclone", "vrp.download.config_new"));
File.Delete(Path.Combine(Environment.CurrentDirectory, "rclone", $"{downloadConfigFilename}g_new"));
}
}
}
@@ -269,53 +273,6 @@ namespace AndroidSideloader
}
}
public static void updatePublicConfig()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
_ = Logger.Log("Attempting to update public config from main.");
string configUrl = "https://raw.githubusercontent.com/vrpyou/quest/main/vrp-public.json";
string fallbackUrl = "https://vrpirates.wiki/downloads/vrp-public.json";
try
{
string resultString;
// Try fetching raw JSON data from the provided link
HttpWebRequest getUrl = (HttpWebRequest)WebRequest.Create(configUrl);
using (StreamReader responseReader = new StreamReader(getUrl.GetResponse().GetResponseStream()))
{
resultString = responseReader.ReadToEnd();
_ = Logger.Log($"Retrieved updated config from main: {configUrl}.");
File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "vrp-public.json"), resultString);
_ = Logger.Log("Public config updated successfully from main.");
}
}
catch (Exception mainException)
{
_ = Logger.Log($"Failed to update public config from main: {mainException.Message}, trying fallback.", LogLevel.ERROR);
try
{
HttpWebRequest getUrl = (HttpWebRequest)WebRequest.Create(fallbackUrl);
using (StreamReader responseReader = new StreamReader(getUrl.GetResponse().GetResponseStream()))
{
string resultString = responseReader.ReadToEnd();
_ = Logger.Log($"Retrieved updated config from fallback: {fallbackUrl}.");
File.WriteAllText(Path.Combine(Environment.CurrentDirectory, "vrp-public.json"), resultString);
_ = Logger.Log("Public config updated successfully from fallback.");
}
}
catch (Exception fallbackException)
{
_ = Logger.Log($"Failed to update public config from fallback: {fallbackException.Message}.", LogLevel.ERROR);
}
}
}
private static string CalculateMD5(string filename)
{
using (MD5 md5 = MD5.Create())

View File

@@ -1,4 +1,6 @@
using System.Windows.Forms;
using System;
using System.Drawing;
using System.Windows.Forms;
namespace AndroidSideloader
{
@@ -8,5 +10,10 @@ namespace AndroidSideloader
{
InitializeComponent();
}
public void UpdateBackgroundImage(Image newImage)
{
this.BackgroundImage = newImage;
}
}
}

View File

@@ -44,7 +44,7 @@ namespace AndroidSideloader
// panel1
//
this.panel1.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.panel1.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.panel1.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes;
this.panel1.Controls.Add(this.YesUpdate);
this.panel1.Controls.Add(this.panel3);
this.panel1.Controls.Add(this.UpdateVerLabel);

View File

@@ -13,7 +13,7 @@ namespace AndroidSideloader
private static readonly string RawGitHubUrl = "https://raw.githubusercontent.com/VRPirates/rookie";
private static readonly string GitHubUrl = "https://github.com/VRPirates/rookie";
public static readonly string LocalVersion = "2.29.2";
public static readonly string LocalVersion = "2.30.0";
public static string currentVersion = string.Empty;
public static string changelog = string.Empty;

View File

@@ -72,7 +72,7 @@
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes;
this.ClientSize = new System.Drawing.Size(443, 100);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);

View File

@@ -53,7 +53,7 @@ namespace AndroidSideloader
public static void createUserJson(string username)
{
_ = ADB.RunAdbCommandToString($"shell settings put global username {username}");
_ = ADB.RunAdbCommandToString($"shell settings put global username \"{username}\"");
foreach (string jsonFileName in userJsons)
{
createUserJsonByName(username, jsonFileName);

81
Utilities/Metrics.cs Normal file
View File

@@ -0,0 +1,81 @@
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace AndroidSideloader.Utilities
{
internal class Metrics
{
public static async void CountDownload(string packageName, string versionCode)
{
try
{
var apiUrl = "https://api.vrpirates.wiki/metrics/add";
var requestBody = new
{
packagename = packageName,
versioncode = versionCode
};
var json = JsonConvert.SerializeObject(requestBody);
string res = await Task.Run(() => sendToApi(apiUrl, json, "post"));
_ = Logger.Log(res);
}
catch (Exception ex)
{
Logger.Log($"Unable to log download: {ex.Message}", LogLevel.WARNING);
}
}
private static async Task<string> sendToApi(string apiUrl, string requestBody = null, string type = "get")
{
string token = "cm9va2llOkN0UHlyTE9oUGoxWXg1cE9KdDNBSkswZ25n";
using (var client = new HttpClient())
{
var request = new HttpRequestMessage();
// Set the HTTP method
request.Method = type.ToLower() == "post" ? HttpMethod.Post : HttpMethod.Get;
// For GET requests with parameters, append them to the URL
if (request.Method == HttpMethod.Get && !string.IsNullOrEmpty(requestBody))
{
var uriBuilder = new UriBuilder(apiUrl);
uriBuilder.Query = requestBody;
request.RequestUri = uriBuilder.Uri;
}
else
{
request.RequestUri = new Uri(apiUrl);
}
// For POST requests, set the content
if (request.Method == HttpMethod.Post && !string.IsNullOrEmpty(requestBody))
{
request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");
}
// Add headers to the request
request.Headers.Add("Authorization", token);
request.Headers.Add("Origin", "rookie");
string responseContent = "";
try
{
HttpResponseMessage response = await client.SendAsync(request);
responseContent = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
Logger.Log($"Unable to get Metrics Data: {ex.Message}", LogLevel.WARNING);
}
return responseContent;
}
}
}
}

View File

@@ -1,18 +1,30 @@
RSL 2.29
RSL 2.30
- Feature: Prompt to keep temporary files and allow resuming of downloads
- Feature: Fixed progress bar jump-back
- Feature: Added part tracking during download
- Fix: Change UUID calculation. No longer uses system details (caused virus flags)
- Fix: Added rclone fallback download
- Fix: Additional connect/startup troubleshooting steps
- Chore: Bump rclone to 1.66.0
RSL 2.29.1
- Fix: Correct initilization sequence to prevent crashes
- Chore: bump package dependencies
- Chore: Fix initial GUI name
RSL 2.29.2
- Fix: Fix for failed uploads using new rclone version
- Fix: Changes to initilization order to prevent crashes and display splash
- Feature: Added Download Metrics
-- Upon downloading a game, Rookie will attempt to log the download count with our server
-- No additional data is collected except for the Package Name and VersionCode of the Game being downloaded
- Feature: Added Downloads column to Gamelist
-- Downloads counts are updated nightly
- Feature: Added "Send Command" button to ADB Commands prompt (Enter still works)
- Feature: Small changes to how the Upload Mirror works
-- Rookie can now verify game uploads are successful
- Feature: Add Cleanup Install script
- Feature: Added additional Splashes to indicate loading status
- Feature: Added setting to supress Re-Download prompt
- Feature: Added "Disable Checking for New Apps" argument (for Testers sanity)
- Feature: Added Bandwidth Limiter to Settings
- Fix: Fixes for using Sponsored Mirrors
-- Eliminated downloading of vrp.download.config from the wiki
-- Fixed issue where Rookie would check for the mirror before it was loaded in
- Fix: Add quotes around all ADB path commands
- Fix: Public Mirror label not displaying
- Fix: Allow spaces when setting username
- Fix: Prevent Rookie from constantly prompting for the Public Config
- Fix: Fixed issue where the Game List doesn't copy/export properly
- Fix: Fixed issue where dropping an entire folder doesn't read the install.txt
- Chore: Remove random mirror picker (no longer used)
- Chore: Changed unable to connect message
- Chore: Remove Offline Mode popup
- Chore: Remove unused dependencies
- Chore: Rename random assets
- Chore: Bump rclone to 1.67.0 (from 1.66.0)

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
2.29.2
2.30.0