diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json
deleted file mode 100644
index f1e9d9e..0000000
--- a/.vs/VSWorkspaceState.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "ExpandedNodes": [
- ""
- ],
- "SelectedNode": "\\Sideloader.cs",
- "PreviewInSolutionExplorer": false
-}
\ No newline at end of file
diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite
deleted file mode 100644
index f12efe3..0000000
Binary files a/.vs/slnx.sqlite and /dev/null differ
diff --git a/AndroidSideloader.csproj b/AndroidSideloader.csproj
index 9a73d8f..788c131 100644
--- a/AndroidSideloader.csproj
+++ b/AndroidSideloader.csproj
@@ -169,6 +169,13 @@
DonorsListView.cs
+
+ Form
+
+
+ Splash.cs
+
+
Form
@@ -235,6 +242,9 @@
DonorsListView.cs
+
+ Splash.cs
+
NewApps.cs
@@ -285,6 +295,9 @@
Settings.settings
True
+
+ PreserveNewest
+
@@ -294,6 +307,7 @@
+
diff --git a/AndroidSideloader.csproj.user b/AndroidSideloader.csproj.user
deleted file mode 100644
index 76bb7f9..0000000
--- a/AndroidSideloader.csproj.user
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- ShowAllFiles
- publish\
-
-
-
-
-
- en-US
- false
-
-
\ No newline at end of file
diff --git a/ChangelogHistory.txt b/ChangelogHistory.txt
index 35ef8a9..7689aad 100644
--- a/ChangelogHistory.txt
+++ b/ChangelogHistory.txt
@@ -1,4 +1,13 @@
-RSL 2.12
+RSL 2.13
+
+- Added new config mode for use with http mirror
+- Removed previous http mirror workarounds
+- Added Offline Mode launcher to package fetch.
+- Add splash screen on startup
+
+~SytheZN
+
+RSL 2.12
- updated auto-update source
- update status text
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
index 8843418..23a4aa8 100644
--- a/MainForm.Designer.cs
+++ b/MainForm.Designer.cs
@@ -93,7 +93,7 @@ namespace AndroidSideloader
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
- this.label8 = new System.Windows.Forms.Label();
+ this.lblMirror = new System.Windows.Forms.Label();
this.EnterInstallBox = new System.Windows.Forms.CheckBox();
this.ADBcommandbox = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
@@ -329,7 +329,7 @@ namespace AndroidSideloader
//
// progressBar
//
- this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progressBar.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.progressBar.ForeColor = System.Drawing.Color.Purple;
@@ -879,8 +879,8 @@ namespace AndroidSideloader
//
// freeDisclaimer
//
- this.freeDisclaimer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.freeDisclaimer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.freeDisclaimer.AutoSize = true;
this.freeDisclaimer.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -897,7 +897,7 @@ namespace AndroidSideloader
// gamesQueListBox
//
this.gamesQueListBox.AllowDrop = true;
- this.gamesQueListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ this.gamesQueListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.gamesQueListBox.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.gamesQueListBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
@@ -954,8 +954,8 @@ namespace AndroidSideloader
//
// gamesListView
//
- this.gamesListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.gamesListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.gamesListView.BackColor = global::AndroidSideloader.Properties.Settings.Default.ComboBoxColor;
this.gamesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
@@ -1015,8 +1015,8 @@ namespace AndroidSideloader
//
// searchTextBox
//
- this.searchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.searchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.searchTextBox.BackColor = global::AndroidSideloader.Properties.Settings.Default.TextBoxColor;
this.searchTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
@@ -1087,7 +1087,7 @@ namespace AndroidSideloader
//
// notesRichTextBox
//
- this.notesRichTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ this.notesRichTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.notesRichTextBox.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.notesRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
@@ -1134,8 +1134,8 @@ namespace AndroidSideloader
//
// pictureBox1
//
- this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
this.pictureBox1.DataBindings.Add(new System.Windows.Forms.Binding("ImageLocation", global::AndroidSideloader.Properties.Settings.Default, "BackPicturePath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -1161,8 +1161,8 @@ namespace AndroidSideloader
//
// label3
//
- this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
@@ -1177,8 +1177,8 @@ namespace AndroidSideloader
//
// label4
//
- this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label4.AutoSize = true;
this.label4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
@@ -1231,17 +1231,17 @@ namespace AndroidSideloader
this.label7.Text = "= Up to date";
this.label7.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
- // label8
+ // lblMirror
//
- this.label8.AutoSize = true;
- this.label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
- this.label8.ForeColor = System.Drawing.SystemColors.ControlLightLight;
- this.label8.Location = new System.Drawing.Point(459, 42);
- this.label8.Name = "label8";
- this.label8.Size = new System.Drawing.Size(65, 17);
- this.label8.TabIndex = 90;
- this.label8.Text = "Mirror #";
- this.label8.TextAlign = System.Drawing.ContentAlignment.TopCenter;
+ this.lblMirror.AutoSize = true;
+ this.lblMirror.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold);
+ this.lblMirror.ForeColor = System.Drawing.SystemColors.ControlLightLight;
+ this.lblMirror.Location = new System.Drawing.Point(459, 42);
+ this.lblMirror.Name = "lblMirror";
+ this.lblMirror.Size = new System.Drawing.Size(65, 17);
+ this.lblMirror.TabIndex = 90;
+ this.lblMirror.Text = "Mirror #";
+ this.lblMirror.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// EnterInstallBox
//
@@ -1264,8 +1264,8 @@ namespace AndroidSideloader
//
// ADBcommandbox
//
- this.ADBcommandbox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.ADBcommandbox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ADBcommandbox.BackColor = global::AndroidSideloader.Properties.Settings.Default.TextBoxColor;
this.ADBcommandbox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
@@ -1288,8 +1288,8 @@ namespace AndroidSideloader
//
// label11
//
- this.label11.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.label11.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label11.AutoSize = true;
this.label11.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
@@ -1305,8 +1305,8 @@ namespace AndroidSideloader
//
// label9
//
- this.label9.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.label9.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label9.AutoSize = true;
this.label9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
@@ -1322,8 +1322,8 @@ namespace AndroidSideloader
//
// pictureBox7
//
- this.pictureBox7.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
+ this.pictureBox7.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox7.BackColor = System.Drawing.Color.Transparent;
this.pictureBox7.DataBindings.Add(new System.Windows.Forms.Binding("ImageLocation", global::AndroidSideloader.Properties.Settings.Default, "BackPicturePath", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
@@ -1419,7 +1419,7 @@ namespace AndroidSideloader
this.Controls.Add(this.label10);
this.Controls.Add(this.label7);
this.Controls.Add(this.label6);
- this.Controls.Add(this.label8);
+ this.Controls.Add(this.lblMirror);
this.Controls.Add(this.label5);
this.Controls.Add(this.label11);
this.Controls.Add(this.ADBcommandbox);
@@ -1531,7 +1531,7 @@ namespace AndroidSideloader
private System.Windows.Forms.PictureBox pictureBox4;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label7;
- private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.Label lblMirror;
private System.Windows.Forms.CheckBox EnterInstallBox;
private System.Windows.Forms.TextBox ADBcommandbox;
private System.Windows.Forms.Label label11;
diff --git a/MainForm.cs b/MainForm.cs
index 71a927b..e93ba4c 100644
--- a/MainForm.cs
+++ b/MainForm.cs
@@ -10,10 +10,13 @@ using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.NetworkInformation;
+using System.Security.Cryptography;
+using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
+using AndroidSideloader.Models;
namespace AndroidSideloader
@@ -50,6 +53,9 @@ namespace AndroidSideloader
private bool isLoading = true;
public static bool isOffline = false;
+ public static bool hasPublicConfig = false;
+ public static PublicConfig PublicConfigFile;
+
public MainForm()
{
@@ -66,6 +72,24 @@ namespace AndroidSideloader
{
FlexibleMessageBox.Show("Offline mode activated. You can't download games in this mode, only do local stuff.");
}
+ else
+ {
+ if (File.Exists($"{Environment.CurrentDirectory}\\vrp-public.json"))
+ {
+ try
+ {
+ var configFileData =
+ File.ReadAllText($"{Environment.CurrentDirectory}\\vrp-public.json");
+ var config = JsonConvert.DeserializeObject(configFileData);
+ PublicConfigFile = config;
+ hasPublicConfig = true;
+ }
+ catch
+ {
+ hasPublicConfig = false;
+ }
+ }
+ }
InitializeComponent();
//Time between asking for new apps if user clicks No. 96,0,0 DEFAULT
@@ -74,9 +98,9 @@ namespace AndroidSideloader
TimeSpan newDayReference2 = new TimeSpan(72, 0, 0);
TimeSpan comparison;
TimeSpan comparison2;
-
- //These two variables set to show difference.
- DateTime A = Properties.Settings.Default.LastLaunch;
+
+ //These two variables set to show difference.
+ DateTime A = Properties.Settings.Default.LastLaunch;
DateTime B = DateTime.Now;
DateTime C = Properties.Settings.Default.LastLaunch2;
comparison = B - A;
@@ -151,6 +175,9 @@ namespace AndroidSideloader
private async void Form1_Load(object sender, EventArgs e)
{
+ var splash = new Splash();
+ splash.Show();
+
if (File.Exists("C:\\RSL\\platform-tools\\adb.exe"))
{
ADB.RunAdbCommandToString("kill-server");
@@ -181,7 +208,7 @@ namespace AndroidSideloader
if (!isOffline)
{
RCLONE.Init();
- }
+ }
try { Spoofer.spoofer.Init(); } catch { }
if (Properties.Settings.Default.CallUpgrade)
@@ -233,6 +260,19 @@ namespace AndroidSideloader
File.Delete($"{Environment.CurrentDirectory}\\crashlog.txt");
}
}
+
+ if (hasPublicConfig)
+ {
+ lblMirror.Text = " Public Mirror";
+ remotesList.Size = Size.Empty;
+ }
+ if (isOffline)
+ {
+ lblMirror.Text = " Offline Mode";
+ remotesList.Size = Size.Empty;
+ }
+
+ splash.Close();
}
@@ -261,15 +301,17 @@ namespace AndroidSideloader
{
ChangeTitle("Initializing Servers...");
initMirrors(true);
- if (Properties.Settings.Default.autoUpdateConfig) {
+ if (Properties.Settings.Default.autoUpdateConfig)
+ {
ChangeTitle("Checking for a new Configuration File...");
SideloaderRCLONE.updateConfig(currentRemote);
}
- ChangeTitle("Grabbing the Games List...");
- SideloaderRCLONE.initGames(currentRemote);
- //ChangeTitle("Syncing Game Photos");
- //ChangeTitle("Updating list of needed clean apps...");
- //ChangeTitle("Checking for Updates on server...");
+
+ if (!hasPublicConfig)
+ {
+ ChangeTitle("Grabbing the Games List...");
+ SideloaderRCLONE.initGames(currentRemote);
+ }
}
else
{
@@ -279,10 +321,12 @@ namespace AndroidSideloader
});
t1.SetApartmentState(ApartmentState.STA);
t1.IsBackground = true;
+
if (HasInternet)
t1.Start();
while (t1.IsAlive)
await Task.Delay(100);
+
Thread t5 = new Thread(() =>
{
if (!String.IsNullOrEmpty(Properties.Settings.Default.IPAddress))
@@ -331,62 +375,91 @@ namespace AndroidSideloader
t5.Start();
while (t5.IsAlive)
await Task.Delay(100);
- Thread t2 = new Thread(() =>
- {
- ChangeTitle("Updating Game Notes...");
- SideloaderRCLONE.UpdateGameNotes(currentRemote);
- });
- Thread t3 = new Thread(() =>
+ if (hasPublicConfig)
{
- ChangeTitle("Updating Game Thumbnails (This may take a minute or two)...");
- SideloaderRCLONE.UpdateGamePhotos(currentRemote);
- });
-
- Thread t4 = new Thread(() =>
- {
- SideloaderRCLONE.UpdateNouns(currentRemote);
- if (!Directory.Exists(SideloaderRCLONE.ThumbnailsFolder) || !Directory.Exists(SideloaderRCLONE.NotesFolder))
+ var t2 = new Thread((() =>
{
- FlexibleMessageBox.Show("It seems you are missing the thumbnails and/or notes database, the first start of the sideloader takes a bit more time, so dont worry if it looks stuck!");
+ ChangeTitle("Updating Metadata...");
+ SideloaderRCLONE.UpdateMetadataFromPublic();
+
+ ChangeTitle("Processing Metadata...");
+ SideloaderRCLONE.ProcessMetadataFromPublic();
+ }));
+
+ t2.IsBackground = true;
+ if (HasInternet)
+ {
+ t2.Start();
}
- });
- t2.IsBackground = true;
- t3.IsBackground = true;
- t4.IsBackground = true;
-
- if (HasInternet)
- {
- t2.Start();
- }
- while (t2.IsAlive)
- await Task.Delay(50);
-
- if (HasInternet)
- {
- t3.Start();
- }
- while (t3.IsAlive)
- await Task.Delay(50);
- if (HasInternet)
- {
- t4.Start();
+ while (t2.IsAlive)
+ await Task.Delay(50);
}
- while (t4.IsAlive)
- await Task.Delay(50);
+ else
+ {
+ Thread t2 = new Thread(() =>
+ {
+ ChangeTitle("Updating Game Notes...");
+ SideloaderRCLONE.UpdateGameNotes(currentRemote);
+ });
+
+ Thread t3 = new Thread(() =>
+ {
+ ChangeTitle("Updating Game Thumbnails (This may take a minute or two)...");
+ SideloaderRCLONE.UpdateGamePhotos(currentRemote);
+ });
+
+ Thread t4 = new Thread(() =>
+ {
+ SideloaderRCLONE.UpdateNouns(currentRemote);
+ if (!Directory.Exists(SideloaderRCLONE.ThumbnailsFolder) ||
+ !Directory.Exists(SideloaderRCLONE.NotesFolder))
+ {
+ FlexibleMessageBox.Show(
+ "It seems you are missing the thumbnails and/or notes database, the first start of the sideloader takes a bit more time, so dont worry if it looks stuck!");
+ }
+ });
+ t2.IsBackground = true;
+ t3.IsBackground = true;
+ t4.IsBackground = true;
+
+ if (HasInternet)
+ {
+ t2.Start();
+ }
+
+ while (t2.IsAlive)
+ await Task.Delay(50);
+
+ if (HasInternet)
+ {
+ t3.Start();
+ }
+
+ while (t3.IsAlive)
+ await Task.Delay(50);
+
+ if (HasInternet)
+ {
+ t4.Start();
+ }
+
+ while (t4.IsAlive)
+ await Task.Delay(50);
+ }
progressBar.Style = ProgressBarStyle.Marquee;
ChangeTitle("Populating Game Update List, Almost There!");
-
+
await CheckForDevice();
if (ADB.DeviceID.Length < 5)
{
nodeviceonstart = true;
}
- listappsbtn();
+ listappsbtn();
showAvailableSpace();
downloadInstallGameButton.Enabled = true;
isLoading = false;
@@ -579,7 +652,8 @@ namespace AndroidSideloader
public static void notify(string message)
{
if (Properties.Settings.Default.enableMessageBoxes == true)
- FlexibleMessageBox.Show(new Form {
+ FlexibleMessageBox.Show(new Form
+ {
TopMost = true,
StartPosition = FormStartPosition.CenterScreen
}, message);
@@ -859,7 +933,7 @@ namespace AndroidSideloader
ChangeTitle("Extracting APK....");
Directory.CreateDirectory($"{Properties.Settings.Default.MainDir}\\{packageName}");
-
+
Thread t1 = new Thread(() =>
{
output = Sideloader.getApk(GameName);
@@ -906,7 +980,7 @@ namespace AndroidSideloader
ChangeTitle("Uploading to shared drive, you can continue to use Rookie while it uploads in the background.");
RCLONE.runRcloneCommand($"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt} {packageName}.zip\" RSL-gameuploads:");
File.Delete($"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt} {packageName}.zip");
- FlexibleMessageBox.Show($"Upload of {currentlyuploading} is complete! Thank you for your contribution!");
+ this.Invoke(() => FlexibleMessageBox.Show($"Upload of {currentlyuploading} is complete! Thank you for your contribution!"));
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
});
t3.IsBackground = true;
@@ -917,7 +991,7 @@ namespace AndroidSideloader
{
await Task.Delay(100);
}
-
+
ChangeTitle(" \n\n");
isuploading = false;
ULGif.Visible = false;
@@ -1442,12 +1516,12 @@ namespace AndroidSideloader
while (t1.IsAlive)
await Task.Delay(100);
}
- else if(!isOffline)
+ else if (!isOffline)
{
SwitchMirrors();
initListView();
}
-
+
if (blacklistItems.Count == 0 && GameList.Count == 0 && !Properties.Settings.Default.nodevicemode && !isOffline)
{
@@ -1659,7 +1733,7 @@ namespace AndroidSideloader
public static async void newpackageupload()
{
- if (!String.IsNullOrEmpty(Properties.Settings.Default.NonAppPackages) && !Properties.Settings.Default.ListUpped)
+ if (!String.IsNullOrEmpty(Properties.Settings.Default.NonAppPackages) && !Properties.Settings.Default.ListUpped)
{
Random r = new Random();
int x = r.Next(9999);
@@ -1744,7 +1818,7 @@ namespace AndroidSideloader
if (itemsCount > 0)
{
-
+
var rand = new Random();
// Code that implements a randomized mirror. The rotation logic (the rotation) is reported as being bugged so I just disabled as a workaround ~pmow
// if (random == true && index < itemsCount)
@@ -1759,10 +1833,10 @@ namespace AndroidSideloader
remotesList.Invoke(() =>
{
remotesList.SelectedIndex = 0; //set mirror to first
- currentRemote = "VRP-mirror" + remotesList.SelectedItem.ToString();
+ currentRemote = "VRP-mirror" + remotesList.SelectedItem.ToString();
});
-
-
+
+
};
}
@@ -1905,20 +1979,21 @@ without him none of this would be possible
ShowError_QuotaExceeded();
DialogResult om = MessageBox.Show("Relaunch Rookie in Offline Mode?", "Offline Mode?", MessageBoxButtons.YesNo);
- if (om == DialogResult.Yes) {
+ 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();
+ 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)
+ if (System.Windows.Forms.Application.MessageLoop)
{
Process.GetCurrentProcess().Kill();
}
-
+
}
if (remotesList.SelectedIndex + 1 == remotesList.Items.Count)
{
@@ -1969,10 +2044,11 @@ Things you can try:
showAvailableSpace();
ChangeTitle("Device now detected... refreshing update list.");
listappsbtn();
- initListView();
+ initListView();
}
progressBar.Style = ProgressBarStyle.Marquee;
- if (gamesListView.SelectedItems.Count == 0) {
+ if (gamesListView.SelectedItems.Count == 0)
+ {
progressBar.Style = ProgressBarStyle.Continuous;
ChangeTitle("You must select a game from the Game List!");
return;
@@ -2032,16 +2108,71 @@ Things you can try:
string dir = Path.GetDirectoryName(gameName);
string gameDirectory = Environment.CurrentDirectory + "\\" + gameName;
string path = gameDirectory;
- Directory.CreateDirectory(gameDirectory);
+
+ var gameNameHash = string.Empty;
+ using (var md5 = MD5.Create())
+ {
+ var bytes = Encoding.UTF8.GetBytes(gameName + "\n");
+ var hash = md5.ComputeHash(bytes);
+ var sb = new StringBuilder();
+ foreach (var b in hash)
+ {
+ sb.Append(b.ToString("x2"));
+ }
+
+ gameNameHash = sb.ToString();
+ }
+
ProcessOutput gameDownloadOutput = new ProcessOutput("", "");
Logger.Log($"Starting Game Download");
- Logger.Log($"rclone copy \"{currentRemote}:{SideloaderRCLONE.RcloneGamesFolder}/{gameName}\"");
- Thread t1 = new Thread(() =>
+ Thread t1;
+ if (hasPublicConfig)
{
- gameDownloadOutput = RCLONE.runRcloneCommand($"copy \"{currentRemote}:{SideloaderRCLONE.RcloneGamesFolder}/{gameName}\" \"{Environment.CurrentDirectory}\\{gameName}\" --progress --rc --transfers 1 --multi-thread-streams 1 --checkers 1", Properties.Settings.Default.BandwithLimit);
- });
+ bool doDownload = true;
+ if (Directory.Exists(gameDirectory))
+ {
+ var res = FlexibleMessageBox.Show(
+ $"{gameName} exists in destination directory.\r\nWould you like to overwrite it?",
+ "Download again?", MessageBoxButtons.YesNo);
+
+ doDownload = res == DialogResult.Yes;
+
+ if (doDownload)
+ {
+ // only delete after extraction; allows for resume if the fetch fails midway.
+ if (Directory.Exists($"{Environment.CurrentDirectory}\\{gameName}"))
+ Directory.Delete($"{Environment.CurrentDirectory}\\{gameName}", true);
+ }
+ }
+
+ if (doDownload)
+ {
+ Logger.Log($"rclone copy \"Public:{SideloaderRCLONE.RcloneGamesFolder}/{gameName}\"");
+ t1 = new Thread(() =>
+ {
+ var rclonecommand =
+ $"copy --progress --rc --http-url {PublicConfigFile.BaseUri} \":http:/{gameNameHash}/\" \"{Environment.CurrentDirectory}\\{gameNameHash}\"";
+ gameDownloadOutput = RCLONE.runRcloneCommand(rclonecommand,
+ Properties.Settings.Default.BandwithLimit, true);
+ });
+ }
+ else
+ {
+ t1 = new Thread(() => { gameDownloadOutput = new ProcessOutput("Download skipped."); });
+ }
+ }
+ else
+ {
+ Directory.CreateDirectory(gameDirectory);
+ Logger.Log($"rclone copy \"{currentRemote}:{SideloaderRCLONE.RcloneGamesFolder}/{gameName}\"");
+ t1 = new Thread(() =>
+ {
+ gameDownloadOutput = RCLONE.runRcloneCommand($"copy \"{currentRemote}:{SideloaderRCLONE.RcloneGamesFolder}/{gameName}\" \"{Environment.CurrentDirectory}\\{gameName}\" --progress --rc", Properties.Settings.Default.BandwithLimit);
+ });
+ }
+
t1.IsBackground = true;
t1.Start();
@@ -2104,14 +2235,26 @@ Things you can try:
}
+
if (removedownloading)
- {
+ {
ChangeTitle("Deleting game files", false);
try
{
- Directory.Delete(Environment.CurrentDirectory + "\\" + gameName, true);
+ if (hasPublicConfig)
+ {
+ if (Directory.Exists($"{Environment.CurrentDirectory}\\{gameNameHash}"))
+ Directory.Delete($"{Environment.CurrentDirectory}\\{gameNameHash}", true);
+ if (Directory.Exists($"{Environment.CurrentDirectory}\\{gameName}"))
+ Directory.Delete($"{Environment.CurrentDirectory}\\{gameName}", true);
+ }
+ else
+ {
+ Directory.Delete(Environment.CurrentDirectory + "\\" + gameName, true);
+ }
}
- catch (Exception ex) {
+ catch (Exception ex)
+ {
FlexibleMessageBox.Show($"Error deleting game files: {ex.Message}");
}
ChangeTitle("");
@@ -2121,6 +2264,7 @@ Things you can try:
//Quota Errors
bool isinstalltxt = false;
bool quotaError = false;
+ bool otherError = false;
if (gameDownloadOutput.Error.Length > 0 && !isOffline)
{
string err = gameDownloadOutput.Error.ToLower();
@@ -2135,9 +2279,39 @@ Things you can try:
gamesQueListBox.DataSource = null;
gamesQueListBox.DataSource = gamesQueueList;
}
- else if (!gameDownloadOutput.Error.Contains("localhost")) FlexibleMessageBox.Show($"Rclone error: {gameDownloadOutput.Error}");
+ else if (!gameDownloadOutput.Error.Contains("localhost"))
+ {
+ otherError = true;
+
+ //Remove current game
+ gamesQueueList.RemoveAt(0);
+ gamesQueListBox.DataSource = null;
+ gamesQueListBox.DataSource = gamesQueueList;
+
+ FlexibleMessageBox.Show($"Rclone error: {gameDownloadOutput.Error}");
+ output += new ProcessOutput("", "Download Failed");
+ }
}
- if (quotaError == false)
+
+ if (hasPublicConfig && otherError == false && gameDownloadOutput.Output != "Download skipped.")
+ {
+ try
+ {
+ ChangeTitle("Extracting " + gameName, false);
+ Zip.ExtractFile($"{Environment.CurrentDirectory}\\{gameNameHash}\\{gameNameHash}.7z.001", $"{Environment.CurrentDirectory}", PublicConfigFile.Password);
+ if (Directory.Exists($"{Environment.CurrentDirectory}\\{gameNameHash}"))
+ Directory.Delete($"{Environment.CurrentDirectory}\\{gameNameHash}", true);
+
+ }
+ catch (Exception ex)
+ {
+ otherError = true;
+ FlexibleMessageBox.Show($"7zip error: {ex.Message}");
+ output += new ProcessOutput("", "Extract Failed");
+ }
+ }
+
+ if (quotaError == false && otherError == false)
{
ADB.WakeDevice();
ADB.DeviceID = GetDeviceID();
@@ -2238,17 +2412,17 @@ Things you can try:
isinstalling = false;
return;
}
- ChangeTitle("Refreshing games list, please wait... \n");
- showAvailableSpace();
- listappsbtn();
- initListView();
- ShowPrcOutput(output);
- progressBar.Style = ProgressBarStyle.Continuous;
- etaLabel.Text = "ETA: Finished Queue";
- speedLabel.Text = "DLS: Finished Queue";
- ProgressText.Text = "";
- gamesAreDownloading = false;
- isinstalling = false;
+ ChangeTitle("Refreshing games list, please wait... \n");
+ showAvailableSpace();
+ listappsbtn();
+ initListView();
+ ShowPrcOutput(output);
+ progressBar.Style = ProgressBarStyle.Continuous;
+ etaLabel.Text = "ETA: Finished Queue";
+ speedLabel.Text = "DLS: Finished Queue";
+ ProgressText.Text = "";
+ gamesAreDownloading = false;
+ isinstalling = false;
ChangeTitle(" \n\n");
}
diff --git a/MainForm.resx b/MainForm.resx
index 29dcb1b..b3852cf 100644
--- a/MainForm.resx
+++ b/MainForm.resx
@@ -117,4 +117,76 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 17, 17
+
+
+ 752, 113
+
+
+ 498, 113
+
+
+ 256, 113
+
+
+ 17, 113
+
+
+ 2205, 65
+
+
+ 1921, 65
+
+
+ 1614, 65
+
+
+ 1322, 65
+
+
+ 963, 65
+
+
+ 761, 65
+
+
+ 515, 65
+
+
+ 290, 65
+
+
+ 17, 65
+
+
+ 2122, 17
+
+
+ 1827, 17
+
+
+ 1537, 17
+
+
+ 1252, 17
+
+
+ 955, 17
+
+
+ 718, 17
+
+
+ 499, 17
+
+
+ 304, 17
+
+
+ 994, 113
+
+
+ 1231, 113
+
\ No newline at end of file
diff --git a/Models/PublicConfig.cs b/Models/PublicConfig.cs
new file mode 100644
index 0000000..41f8af5
--- /dev/null
+++ b/Models/PublicConfig.cs
@@ -0,0 +1,25 @@
+using Newtonsoft.Json;
+using System;
+using System.Text;
+
+namespace AndroidSideloader.Models
+{
+ [JsonObject(MemberSerialization.OptIn)]
+ public class PublicConfig
+ {
+ [JsonProperty("baseUri")]
+ public string BaseUri { get; set; }
+
+ private string password;
+
+ [JsonProperty("password")]
+ public string Password
+ {
+ get => password;
+ set
+ {
+ password = Encoding.UTF8.GetString(Convert.FromBase64String(value));
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
index d4fa283..16e0036 100644
--- a/Properties/Resources.Designer.cs
+++ b/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace AndroidSideloader.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Resources {
@@ -160,6 +160,16 @@ namespace AndroidSideloader.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap splash {
+ get {
+ object obj = ResourceManager.GetObject("splash", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
index 7045aff..fb867d3 100644
--- a/Properties/Resources.resx
+++ b/Properties/Resources.resx
@@ -151,4 +151,7 @@
..\Resources\UpdatesKey.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\splash.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/RCLONE.cs b/RCLONE.cs
index d7487bf..1aac57a 100644
--- a/RCLONE.cs
+++ b/RCLONE.cs
@@ -27,14 +27,15 @@ namespace AndroidSideloader
}
//Change if you want to use a config
- public static string configPath = ""; // ".\\a"
+ public static string configPath = "vrp.download.config";
public static string rclonepw = "";
private static Process rclone = new Process();
//Run rclone command
- public static ProcessOutput runRcloneCommand(string command, string bandwithLimit = "")
+ // noconfig suppresses the config directive for using with a command specified mirror
+ public static ProcessOutput runRcloneCommand(string command, string bandwithLimit = "", bool noConfig = false)
{
if (!MainForm.HasInternet || MainForm.isOffline)
{
@@ -53,7 +54,7 @@ namespace AndroidSideloader
}
//set configpath if there is any
- if (configPath.Length > 0)
+ if (configPath.Length > 0 && !noConfig)
{
command += $" --config {configPath}";
}
@@ -91,6 +92,9 @@ namespace AndroidSideloader
//if there is one of these errors, we switch the mirrors
if (error.Contains("400 Bad Request") || error.Contains("cannot fetch token") || error.Contains("authError") || error.Contains("quota") || error.Contains("exceeded") || error.Contains("directory not found") || error.Contains("Failed to"))
{
+ if (MainForm.hasPublicConfig)
+ return new ProcessOutput("Failed to fetch from public mirror.", "Failed to fetch from public mirror.");
+
string oldRemote = MainForm.currentRemote;
try
{
diff --git a/Resources/splash.jpg b/Resources/splash.jpg
new file mode 100644
index 0000000..be020d3
Binary files /dev/null and b/Resources/splash.jpg differ
diff --git a/Rookie Offline.cmd b/Rookie Offline.cmd
new file mode 100644
index 0000000..134aa0e
--- /dev/null
+++ b/Rookie Offline.cmd
@@ -0,0 +1,10 @@
+
+
+
+@echo off
+
+for /f "tokens=* usebackq" %%f in (`dir /b AndroidSideloader*.exe`) do (set "sideloader=%%f" & goto :next)
+:next
+
+echo %sideloader%
+start "" "%sideloader%" "--offline"
\ No newline at end of file
diff --git a/Sideloader.cs b/Sideloader.cs
index bb4613e..15cd797 100644
--- a/Sideloader.cs
+++ b/Sideloader.cs
@@ -247,6 +247,10 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
{
if (!File.Exists("Sideloader Launcher.exe"))
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/Sideloader%20Launcher.exe", "Sideloader Launcher.exe");
+
+ if (!File.Exists("Rookie Offline.cmd"))
+ client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/Rookie%20Offline.cmd", "Rookie Offline.cmd");
+
if (!File.Exists("C:\\RSL\\platform-tools\\aug2021.txt") || !File.Exists("C:\\RSL\\platform-tools\\adb.exe")) //if adb is not updated, download and auto extract
{
if (Directory.Exists($"C:\\RSL\\2.8.2"))
diff --git a/Sideloader/RCLONE.cs b/Sideloader/RCLONE.cs
index 5d2a500..4299b67 100644
--- a/Sideloader/RCLONE.cs
+++ b/Sideloader/RCLONE.cs
@@ -4,6 +4,7 @@ using System.Net;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
+using AndroidSideloader.Utilities;
namespace AndroidSideloader
{
@@ -48,19 +49,68 @@ namespace AndroidSideloader
public static void UpdateNouns(string remote)
{
Logger.Log($"Updating Nouns");
- RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/nouns\" \"{Nouns}\" --http-no-head --transfers 2 --multi-thread-streams 1");
+ RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/nouns\" \"{Nouns}\"");
}
public static void UpdateGamePhotos(string remote)
{
Logger.Log($"Updating Thumbnails");
- RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/thumbnails\" \"{ThumbnailsFolder}\" --http-no-head --transfers 2 --multi-thread-streams 1");
+ RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/thumbnails\" \"{ThumbnailsFolder}\"");
}
public static void UpdateGameNotes(string remote)
{
Logger.Log($"Updating Game Notes");
- RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/notes\" \"{NotesFolder}\" --http-no-head --transfers 2 --multi-thread-streams 1");
+ RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/notes\" \"{NotesFolder}\"");
+ }
+
+ public static void UpdateMetadataFromPublic()
+ {
+ Logger.Log($"Downloading Metadata");
+ var rclonecommand =
+ $"sync --http-url {MainForm.PublicConfigFile.BaseUri} \":http:/meta.7z\" \"{Environment.CurrentDirectory}\"";
+ RCLONE.runRcloneCommand(rclonecommand);
+ }
+
+ public static void ProcessMetadataFromPublic()
+ {
+ try
+ {
+ Logger.Log($"Extracting Metadata");
+ Zip.ExtractFile($"{Environment.CurrentDirectory}\\meta.7z", $"{Environment.CurrentDirectory}\\meta",
+ MainForm.PublicConfigFile.Password);
+
+ Logger.Log($"Updating Metadata");
+
+ if (Directory.Exists(Nouns)) Directory.Delete(Nouns, true);
+ if (Directory.Exists(ThumbnailsFolder)) Directory.Delete(ThumbnailsFolder, true);
+ if (Directory.Exists(NotesFolder)) Directory.Delete(NotesFolder, true);
+
+ Directory.Move($"{Environment.CurrentDirectory}\\meta\\.meta\\nouns", Nouns);
+ Directory.Move($"{Environment.CurrentDirectory}\\meta\\.meta\\thumbnails", ThumbnailsFolder);
+ Directory.Move($"{Environment.CurrentDirectory}\\meta\\.meta\\notes", NotesFolder);
+
+ Logger.Log($"Initializing Games List");
+ var gameList = File.ReadAllText($"{Environment.CurrentDirectory}\\meta\\VRP-GameList.txt");
+
+ string[] splitList = gameList.Split('\n');
+ splitList = splitList.Skip(1).ToArray();
+ foreach (string game in splitList)
+ {
+ if (game.Length > 1)
+ {
+ string[] splitGame = game.Split(';');
+ games.Add(splitGame);
+ }
+ }
+
+ Directory.Delete($"{Environment.CurrentDirectory}\\meta", true);
+ }
+ catch (Exception e)
+ {
+ Logger.Log(e.Message);
+ Logger.Log(e.StackTrace);
+ }
}
public static void RefreshRemotes()
diff --git a/Splash.Designer.cs b/Splash.Designer.cs
new file mode 100644
index 0000000..e15a82d
--- /dev/null
+++ b/Splash.Designer.cs
@@ -0,0 +1,55 @@
+namespace AndroidSideloader
+{
+ partial class Splash
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // Splash
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackgroundImage = global::AndroidSideloader.Properties.Resources.splash;
+ this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
+ this.CausesValidation = false;
+ this.ClientSize = new System.Drawing.Size(640, 384);
+ this.ControlBox = false;
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+ this.Name = "Splash";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Splash";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Splash.cs b/Splash.cs
new file mode 100644
index 0000000..702ada5
--- /dev/null
+++ b/Splash.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace AndroidSideloader
+{
+ public partial class Splash : Form
+ {
+ public Splash()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Splash.resx b/Splash.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/Splash.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Updater.cs b/Updater.cs
index f797b2b..97b1481 100644
--- a/Updater.cs
+++ b/Updater.cs
@@ -17,7 +17,7 @@ namespace AndroidSideloader
private static string RawGitHubUrl;
private static string GitHubUrl;
- static readonly public string LocalVersion = "2.12";
+ static readonly public string LocalVersion = "2.13";
public static string currentVersion = string.Empty;
public static string changelog = string.Empty;
diff --git a/Utilities/GeneralUtilities.cs b/Utilities/GeneralUtilities.cs
index 050f746..3f9a657 100644
--- a/Utilities/GeneralUtilities.cs
+++ b/Utilities/GeneralUtilities.cs
@@ -104,6 +104,18 @@ namespace AndroidSideloader.Utilities
class Zip
{
public static void ExtractFile(string sourceArchive, string destination)
+ {
+ var args = $"x \"{sourceArchive}\" -y -o\"{destination}\"";
+ DoExtract(args);
+ }
+
+ public static void ExtractFile(string sourceArchive, string destination, string password)
+ {
+ var args = $"x \"{sourceArchive}\" -y -o\"{destination}\" -p\"{password}\"";
+ DoExtract(args);
+ }
+
+ private static void DoExtract(string args)
{
if (!File.Exists(Environment.CurrentDirectory + "\\7z.exe") || !File.Exists(Environment.CurrentDirectory + "\\7z.dll"))
{
@@ -114,9 +126,11 @@ namespace AndroidSideloader.Utilities
ProcessStartInfo pro = new ProcessStartInfo();
pro.WindowStyle = ProcessWindowStyle.Hidden;
pro.FileName = "7z.exe";
- pro.Arguments = string.Format("x \"{0}\" -y -o\"{1}\"", sourceArchive, destination);
+ pro.Arguments = args;
Process x = Process.Start(pro);
x.WaitForExit();
+ if (x.ExitCode != 0)
+ throw new ApplicationException($"Extracting failed, status code {x.ExitCode}");
}
}
diff --git a/changelog.txt b/changelog.txt
index 2a2b7fd..0a8092b 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,11 +1,8 @@
-RSL 2.12
+RSL 2.13
-- fixed issue with configuration always updating
-- fixed github version vs app version comparison
-- fixed github download url
-- restored "auto update config" checkbox
-- fixed tooltips; added additional tooltips to all menu items
-- gui fixes and updates to game donation menu
-- additional logging and on-screen notifications
+- Added new config mode for use with http mirror
+- Removed previous http mirror workarounds
+- Added Offline Mode launcher to package fetch.
+- Add splash screen on startup
-~fenopy
\ No newline at end of file
+~SytheZN
\ No newline at end of file
diff --git a/version b/version
index a202097..cb94c17 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-2.12
\ No newline at end of file
+2.13
\ No newline at end of file