Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e67b331ef | ||
|
|
26442e9516 | ||
|
|
3cd715afd9 | ||
|
|
0ecdaab240 | ||
|
|
801ec1a874 | ||
|
|
ebf0f9372b | ||
|
|
06c534dc50 | ||
|
|
04289885c2 | ||
|
|
8e7b9490de | ||
|
|
cec1ff48fd | ||
|
|
85fad7d3ad | ||
|
|
028c44ba64 |
@@ -211,6 +211,7 @@
|
||||
<Compile Include="SelectFolder.cs" />
|
||||
<Compile Include="Utilities\StringUtilities.cs" />
|
||||
<Compile Include="Utilities\GeneralUtilities.cs" />
|
||||
<Compile Include="Utilities\UploadGame.cs" />
|
||||
<EmbeddedResource Include="MainForm.resx">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
@@ -265,6 +266,7 @@
|
||||
<None Include="Resources\battery11.png" />
|
||||
<None Include="Resources\battery.png" />
|
||||
<None Include="Resources\battery1.png" />
|
||||
<None Include="Resources\ajax-loader.gif" />
|
||||
<Content Include="Resources\bluekey.png" />
|
||||
<Content Include="Resources\redkey.png" />
|
||||
<None Include="Resources\greenkey.png" />
|
||||
|
||||
@@ -158,6 +158,9 @@
|
||||
<setting name="BMBFchecked" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="GamesList" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
</AndroidSideloader.Properties.Settings>
|
||||
<AndroidADB.Sideloader.Properties.Settings>
|
||||
<setting name="checkForUpdates" serializeAs="String">
|
||||
|
||||
@@ -1,6 +1,77 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.8.2
|
||||
|
||||
+ Added automatic upload to Google shared drive
|
||||
for clean game files donation.
|
||||
+ Added uploading GIF for duration of upload.
|
||||
+ Added warning messages when user attempts
|
||||
to close Rookie while games are download, installing,
|
||||
or uploading.
|
||||
= Threaded clean file zipping and uploading
|
||||
so user can continue to use Rookie while game
|
||||
is uploading.
|
||||
|
||||
|
||||
P.S. We are looking for volunteers for the next
|
||||
beta which will automatically detect new games
|
||||
installed on user's headset and suggest them for
|
||||
donation. Message https://t.me/Harryeffinpotter or
|
||||
https://t.me/pmowpmow on Telegram to join the beta
|
||||
test!
|
||||
|
||||
HFP
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEd+IUACgkQx/Rql1Vo
|
||||
czcyUw/+ImynsE4CXmv+LjuTH1by6L2AHZFZCQ0cgwq88OOwdir/WzPfNeqqv0e6
|
||||
/QCRbRdvC6pASPgHryCkvFPFXUoLgQ+lXZY1GCBUzX0lIMqrenihQ5QUQb70LOxR
|
||||
kVkivnxLJzBeQAXn+gkvPXMCIn3l0yVInsjtusVqVHtmsegcAQTwcrG7RXSsl0dr
|
||||
2rkPOuvlcxMTWA4SlE16IhuLcq8L9GavpeWKoQiaoydhBGdzfAe1O4yy6UQs7Nas
|
||||
9Xl3vy1mXnZIprTOtjH+zYXxcdcxb1ZAdvHdq19nqTf5iuCqO+A4TxSq4vRv6Dvt
|
||||
XkJ0igXJsscpIQjJ812mZACJiJlP31yPdhZvKZXtUAQoR63iRPiEpY2gIKrd249Y
|
||||
HIq0g+XaO0K8kjOAmrBxLpESEBEovhhcfvrepSh7NocsxRAAnxOJUdcbmekwRjpj
|
||||
MCtMYThTYRXoR2aWxIbtaviUIecAGxuF8m+wWbxnWqJSEh4BanmQKjoh32G8geEE
|
||||
PS4XMBcWQ0/MhKSibaWO0SQCjrHNtsmbVvu28rh/eD9ar4Z9tPxza43iqSepSEjK
|
||||
Vlka7WxpkeqVCYnTpoLPv7I+XBBRojKlUp8aUz4MrOuuzNg08GyLFgKejU1aiw4I
|
||||
7s3PjFj6e4SsRgAKHhKStjYzVTkhlbyWIguhyPdzpiNoMFEwMz8=
|
||||
=EIFi
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.8.1
|
||||
|
||||
= Fixed crash at startup related to Upload Date column.
|
||||
|
||||
HFP
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEZPjAACgkQx/Rql1Vo
|
||||
czdfUw/+PiQ03p3FFwuVIndiDHKvwcjcewDWASYiP2KJkDCsbaEj0U5+ntpu7mxo
|
||||
ytIFuNZd47CwiYGFXi6IzEO1n9yj4LL3ONnVEogZgd3bP3Bb2b28KDdHtDX3IO5d
|
||||
wWle/WMksKDywqRyjJnaP9dh+7YS0C/49H32cFokF8S69stPwPYh9LSaf4ctK0/f
|
||||
y8pHN7tgOkmCR8NU6lOY9OLepBZlv+PcOAco0nIz1zHtwdRGz2vjwQqAa8NShfEy
|
||||
E/rjBhM37YBULf7cOayt0FY/rDYvw6Bj8B9ht0Bn6dmWgJrhfAj01utREL8HcmPd
|
||||
rNDXB7UxuR56OVy1f1gh1Fzb5f62xDydfELd/0dFYE0oDcdkHjaEkT5CnAukBmrO
|
||||
y0ntjawsy40dVAwPwPSAPQ+qP9g7mDZdbjOfgP4JNFWwnxgYLlTASoUMis/hd5mg
|
||||
FLaFAiMM3o72Gip+gjMl3AiuwyefKoCGfAPgNvRx0t8R3bdLfVJ0KIPpgvJ7ZuD8
|
||||
n4LEHLPoldDmoshdxl/BiQyLhaEM3W3qkwANVic6/8eCqy/N23CM74L4xgUaQDoq
|
||||
dvkS3PKuhLvcYh4HkZNhALj7Mavvs0x8/pIGx8bK8JCNOhKX7rGylF6erDFfZ8Ym
|
||||
T2vN0PjVYS/pF//qKHPyV5yVc5piudCB895LBNIDcJK1b67nUUE=
|
||||
=+e9J
|
||||
-----END PGP SIGNATURE-----
|
||||
|
||||
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.8
|
||||
|
||||
+ Added modified date to games list columns.
|
||||
|
||||
33
MainForm.Designer.cs
generated
33
MainForm.Designer.cs
generated
@@ -41,6 +41,8 @@
|
||||
this.copyBulkObbButton = new System.Windows.Forms.Button();
|
||||
this.downloadInstallGameButton = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.ULLabel = new System.Windows.Forms.Label();
|
||||
this.ULGif = new System.Windows.Forms.PictureBox();
|
||||
this.BatteryLbl = new System.Windows.Forms.Label();
|
||||
this.pictureBox5 = new System.Windows.Forms.PictureBox();
|
||||
this.downloadingLabel = new System.Windows.Forms.Label();
|
||||
@@ -92,6 +94,7 @@
|
||||
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
||||
this.gamesPictureBox = new System.Windows.Forms.PictureBox();
|
||||
this.panel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.ULGif)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
|
||||
this.otherContainer.SuspendLayout();
|
||||
this.backupContainer.SuspendLayout();
|
||||
@@ -239,7 +242,7 @@
|
||||
this.getApkButton.Padding = new System.Windows.Forms.Padding(23, 0, 0, 0);
|
||||
this.getApkButton.Size = new System.Drawing.Size(218, 28);
|
||||
this.getApkButton.TabIndex = 2;
|
||||
this.getApkButton.Text = "Extract App to Desktop";
|
||||
this.getApkButton.Text = "Upload Selected App";
|
||||
this.getApkButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.getApkButton.UseVisualStyleBackColor = false;
|
||||
this.getApkButton.Click += new System.EventHandler(this.getApkButton_Click);
|
||||
@@ -343,6 +346,8 @@
|
||||
//
|
||||
this.panel1.AutoScroll = true;
|
||||
this.panel1.BackColor = global::AndroidSideloader.Properties.Settings.Default.ButtonColor;
|
||||
this.panel1.Controls.Add(this.ULLabel);
|
||||
this.panel1.Controls.Add(this.ULGif);
|
||||
this.panel1.Controls.Add(this.BatteryLbl);
|
||||
this.panel1.Controls.Add(this.pictureBox5);
|
||||
this.panel1.Controls.Add(this.downloadingLabel);
|
||||
@@ -366,6 +371,29 @@
|
||||
this.panel1.Size = new System.Drawing.Size(218, 721);
|
||||
this.panel1.TabIndex = 73;
|
||||
//
|
||||
// ULLabel
|
||||
//
|
||||
this.ULLabel.AutoSize = true;
|
||||
this.ULLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.ULLabel.ForeColor = System.Drawing.Color.Snow;
|
||||
this.ULLabel.Location = new System.Drawing.Point(154, 683);
|
||||
this.ULLabel.Name = "ULLabel";
|
||||
this.ULLabel.Size = new System.Drawing.Size(64, 13);
|
||||
this.ULLabel.TabIndex = 87;
|
||||
this.ULLabel.Text = "Uploading";
|
||||
this.ULLabel.Visible = false;
|
||||
//
|
||||
// ULGif
|
||||
//
|
||||
this.ULGif.Enabled = false;
|
||||
this.ULGif.Image = global::AndroidSideloader.Properties.Resources.ajax_loader;
|
||||
this.ULGif.Location = new System.Drawing.Point(178, 699);
|
||||
this.ULGif.Name = "ULGif";
|
||||
this.ULGif.Size = new System.Drawing.Size(34, 17);
|
||||
this.ULGif.TabIndex = 86;
|
||||
this.ULGif.TabStop = false;
|
||||
this.ULGif.Visible = false;
|
||||
//
|
||||
// BatteryLbl
|
||||
//
|
||||
this.BatteryLbl.AutoSize = true;
|
||||
@@ -1260,6 +1288,7 @@
|
||||
this.DragLeave += new System.EventHandler(this.Form1_DragLeave);
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.panel1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.ULGif)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
|
||||
this.otherContainer.ResumeLayout(false);
|
||||
this.backupContainer.ResumeLayout(false);
|
||||
@@ -1338,6 +1367,8 @@
|
||||
private System.Windows.Forms.Label BatteryLbl;
|
||||
private System.Windows.Forms.PictureBox pictureBox5;
|
||||
public System.Windows.Forms.ComboBox remotesList;
|
||||
private System.Windows.Forms.PictureBox ULGif;
|
||||
private System.Windows.Forms.Label ULLabel;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
318
MainForm.cs
318
MainForm.cs
@@ -1,4 +1,5 @@
|
||||
using JR.Utils.GUI.Forms;
|
||||
using AndroidSideloader.Utilities;
|
||||
using JR.Utils.GUI.Forms;
|
||||
using Newtonsoft.Json;
|
||||
using SergeUtils;
|
||||
using Spoofer;
|
||||
@@ -259,7 +260,7 @@ namespace AndroidSideloader
|
||||
ChangeTitle("Initializing Games");
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
t.Stop();
|
||||
SideloaderRCLONE.UpdateNouns(currentRemote);
|
||||
//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!");
|
||||
@@ -267,7 +268,6 @@ namespace AndroidSideloader
|
||||
ChangeTitle("Syncing Game Photos");
|
||||
SideloaderRCLONE.UpdateGamePhotos(currentRemote);
|
||||
ChangeTitle("Updating list of needed clean apps...");
|
||||
SideloaderRCLONE.UpdateNouns(currentRemote);
|
||||
ChangeTitle("Checking for Updates on server...");
|
||||
SideloaderRCLONE.UpdateGameNotes(currentRemote);
|
||||
ChangeTitle("Loaded");
|
||||
@@ -741,15 +741,12 @@ namespace AndroidSideloader
|
||||
{
|
||||
line[i] = line[i].Remove(0, 8);
|
||||
line[i] = line[i].Remove(line[i].Length - 1);
|
||||
if (!Sideloader.InstalledPackages.ContainsKey(line[i]))
|
||||
Sideloader.InstalledPackages.Add(line[i], "");
|
||||
foreach (var game in SideloaderRCLONE.games)
|
||||
if (line[i].Length > 0 && game[3].Contains(line[i]))
|
||||
line[i] = game[0];
|
||||
}
|
||||
}
|
||||
|
||||
File.WriteAllText("installedPackages.json", JsonConvert.SerializeObject(Sideloader.InstalledPackages));
|
||||
|
||||
Array.Sort(line);
|
||||
|
||||
@@ -761,6 +758,7 @@ namespace AndroidSideloader
|
||||
|
||||
m_combo.Invoke(() => { m_combo.MatchingMethod = StringMatchingMethod.NoWildcards; });
|
||||
}
|
||||
public static bool isuploading = false;
|
||||
public static bool isworking = false;
|
||||
private async void getApkButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
@@ -814,23 +812,46 @@ namespace AndroidSideloader
|
||||
while (t2.IsAlive)
|
||||
await Task.Delay(100);
|
||||
ChangeTitle("Zipping extracted application...");
|
||||
string cmd = $"7z a {packageName}v{VersionInt}.zip .\\{packageName}\\*";
|
||||
string cmd = $"7z a \"{GameName} v{VersionInt}.zip\" .\\{packageName}\\*";
|
||||
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
|
||||
Thread t3 = new Thread(() =>
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
Thread t4 = new Thread(() =>
|
||||
{
|
||||
ADB.RunCommandToString(cmd, path);
|
||||
});
|
||||
t4.IsBackground = true;
|
||||
t4.Start();
|
||||
while (t4.IsAlive)
|
||||
await Task.Delay(100);
|
||||
ChangeTitle("Uploading to shared drive, you can continue to use Rookie while it uploads in the background.");
|
||||
ULGif.Visible = true;
|
||||
ULLabel.Visible = true;
|
||||
ULGif.Enabled = true;
|
||||
isworking = false;
|
||||
isuploading = true;
|
||||
Thread t3 = new Thread(() =>
|
||||
{
|
||||
string currentlyuploading = GameName;
|
||||
ChangeTitle("Uploading to shared drive, you can continue to use Rookie while it uploads in the background.");
|
||||
string Uploadoutput = RCLONE.runRcloneCommand($"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt}.zip\" RSL-debuglogs:CleanGames").Output;
|
||||
File.Delete($"{Properties.Settings.Default.MainDir}\\{GameName} v{VersionInt}.zip");
|
||||
FlexibleMessageBox.Show($"Upload of {currentlyuploading} is complete! Thank you for your contribution!");
|
||||
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
|
||||
});
|
||||
t3.IsBackground = true;
|
||||
t3.Start();
|
||||
|
||||
while (t3.IsAlive)
|
||||
{
|
||||
isuploading = true;
|
||||
await Task.Delay(100);
|
||||
File.Move($"{Properties.Settings.Default.MainDir}\\{packageName}v{VersionInt}.zip", $"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{VersionInt}.zip");
|
||||
FlexibleMessageBox.Show($"The app has been zipped and placed on your desktop as\n\n{GameName} v{VersionInt}.zip\n\nPlease upload this file to a free file hosting service like\n https://1fichier.com or https://mega.nz and share the link with a moderator.");
|
||||
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
}
|
||||
|
||||
ChangeTitle("");
|
||||
isworking = false;
|
||||
isuploading = false;
|
||||
ULGif.Visible = false;
|
||||
ULLabel.Visible = false;
|
||||
ULGif.Enabled = false;
|
||||
}
|
||||
else MessageBox.Show("You must wait until each app is finished extracting to start another.");
|
||||
}
|
||||
@@ -1121,31 +1142,48 @@ namespace AndroidSideloader
|
||||
DragDropLbl.Text = "";
|
||||
ChangeTitle("");
|
||||
}
|
||||
List<String> newGamesList = new List<string>();
|
||||
private List<UploadGame> gamesToUpload = new List<UploadGame>();
|
||||
private async void initListView()
|
||||
{
|
||||
gamesListView.Items.Clear();
|
||||
gamesListView.Columns.Clear();
|
||||
if (!File.Exists("installedPackages.json"))
|
||||
{
|
||||
File.Create("installedPackages.json");
|
||||
if (File.Exists("instlledPackages.json"))
|
||||
Sideloader.InstalledPackages = JsonConvert.DeserializeObject<Dictionary<string, string>>(File.ReadAllText("installedPackages.json"));
|
||||
}
|
||||
foreach (string column in SideloaderRCLONE.gameProperties)
|
||||
{
|
||||
gamesListView.Columns.Add(column, 150);
|
||||
}
|
||||
|
||||
string lines = Properties.Settings.Default.InstalledApps;
|
||||
string pattern = "package:";
|
||||
string replacement = "";
|
||||
Regex rgx = new Regex(pattern);
|
||||
string result = rgx.Replace(lines, replacement);
|
||||
char[] delims = new[] { '\r', '\n' };
|
||||
string[] packageList = result.Split(delims, StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] blacklist = new string[] { };
|
||||
if (File.Exists($"{Environment.CurrentDirectory}\\nouns\\blacklist.txt"))
|
||||
{
|
||||
blacklist = File.ReadAllLines($"{Environment.CurrentDirectory}\\nouns\\blacklist.txt");
|
||||
}
|
||||
List<ListViewItem> GameList = new List<ListViewItem>();
|
||||
List<String> rookieList = new List<String>();
|
||||
foreach (string[] game in SideloaderRCLONE.games)
|
||||
{
|
||||
rookieList.Add(game[SideloaderRCLONE.PackageNameIndex]);
|
||||
}
|
||||
List<String> installGames = packageList.ToList();
|
||||
List<String> blacklistItems = blacklist.ToList();
|
||||
|
||||
newGamesList = installGames.Except(rookieList).ToList();
|
||||
newGamesList = newGamesList.Except(blacklistItems).ToList();
|
||||
|
||||
foreach (string[] release in SideloaderRCLONE.games)
|
||||
{
|
||||
ListViewItem Game = new ListViewItem(release);
|
||||
|
||||
string lines = Properties.Settings.Default.InstalledApps;
|
||||
string pattern = "package:";
|
||||
string replacement = "";
|
||||
Regex rgx = new Regex(pattern);
|
||||
string result = rgx.Replace(lines, replacement);
|
||||
char[] delims = new[] { '\r', '\n' };
|
||||
string[] strings = result.Split(delims, StringSplitOptions.RemoveEmptyEntries);
|
||||
//MessageBox.Show(result);
|
||||
if (gamesListView.Columns.Count > 0)
|
||||
{
|
||||
gamesListView.Columns[5].Width = 0;
|
||||
@@ -1155,28 +1193,22 @@ namespace AndroidSideloader
|
||||
gamesListView.Columns[6].Width = 98;
|
||||
gamesListView.Columns[1].Width = 280;
|
||||
}
|
||||
foreach (string packagename in strings)
|
||||
foreach (string packagename in packageList)
|
||||
{
|
||||
if (string.Equals(release[SideloaderRCLONE.PackageNameIndex], packagename))
|
||||
{
|
||||
if (Properties.Settings.Default.QblindOn)
|
||||
{
|
||||
Game.BackColor = Color.FromArgb(0, 112, 138);
|
||||
}
|
||||
else
|
||||
Game.BackColor = Color.Green;
|
||||
{
|
||||
Game.BackColor = Color.Green;
|
||||
}
|
||||
string InstalledVersionCode;
|
||||
if (Sideloader.InstalledPackages.ContainsKey(packagename) && Sideloader.InstalledPackages[packagename] != "")
|
||||
{
|
||||
InstalledVersionCode = Sideloader.InstalledPackages[packagename];
|
||||
}
|
||||
else
|
||||
{
|
||||
InstalledVersionCode = ADB.RunAdbCommandToString($"shell \"dumpsys package {packagename} | grep versionCode -F\"").Output;
|
||||
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingBeforeFirst(InstalledVersionCode, "versionCode=");
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingAfterFirst(InstalledVersionCode, " ");
|
||||
Sideloader.InstalledPackages[packagename] = InstalledVersionCode;
|
||||
}
|
||||
|
||||
InstalledVersionCode = ADB.RunAdbCommandToString($"shell \"dumpsys package {packagename} | grep versionCode -F\"").Output;
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingBeforeFirst(InstalledVersionCode, "versionCode=");
|
||||
InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingAfterFirst(InstalledVersionCode, " ");
|
||||
try
|
||||
{
|
||||
ulong installedVersionInt = UInt64.Parse(Utilities.StringUtilities.KeepOnlyNumbers(InstalledVersionCode));
|
||||
@@ -1195,67 +1227,15 @@ namespace AndroidSideloader
|
||||
{
|
||||
string RlsName = Sideloader.PackageNametoGameName(packagename);
|
||||
string GameName = Sideloader.gameNameToSimpleName(RlsName);
|
||||
if (File.Exists($"{Environment.CurrentDirectory}\\nouns\\blacklist.txt"))
|
||||
|
||||
if (!GameName.Contains("Beat Saber") && !dontget && !updatesnotified && !isworking && cloudVersionInt > 0)
|
||||
{
|
||||
string[] blacklist = File.ReadAllLines($"{Environment.CurrentDirectory}\\nouns\\blacklist.txt");
|
||||
|
||||
foreach (string blacklistpckg in blacklist)
|
||||
{
|
||||
if (packagename.Contains(blacklistpckg))
|
||||
{
|
||||
dontget = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!GameName.Contains("Beat Saber") && !dontget && !updatesnotified && cloudVersionInt > 0)
|
||||
{
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"It seems you have a newer version of:\n\n{GameName}\n\nAll apps on Rookie are from donors, please share the updated files with us.\nThis is the only way to keep the apps up to date for everyone.\n\nNOTE: Rookie will only extract the APK/OBB which contain NO personal information whatsoever.", "Share clean files?", MessageBoxButtons.YesNo);
|
||||
DialogResult dialogResult = FlexibleMessageBox.Show($"You have a newer version of:\n\n{GameName}\n\nRSL can AUTOMATICALLY UPLOAD the clean files to a shared drive in the background,\nthis is the only way to keep the apps up to date for everyone.\n\nNOTE: Rookie will only extract the APK/OBB which contain NO personal information whatsoever.", "CONTRIBUTE CLEAN FILES?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
Sideloader.getApk(GameName);
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(1000);
|
||||
ChangeTitle("Extracting obb if it exists....");
|
||||
Thread t2 = new Thread(() =>
|
||||
{
|
||||
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/obb/{packagename}\" \"{Properties.Settings.Default.MainDir}\\{packagename}\"");
|
||||
});
|
||||
t2.IsBackground = true;
|
||||
t2.Start();
|
||||
|
||||
while (t2.IsAlive)
|
||||
await Task.Delay(1000);
|
||||
ChangeTitle("Zipping extracted application...");
|
||||
string cmd = $"7z a {packagename}v{installedVersionInt}.zip .\\{packagename}\\*";
|
||||
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
|
||||
|
||||
Thread t3 = new Thread(() =>
|
||||
{
|
||||
string HWID = SideloaderUtilities.UUID();
|
||||
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\{packagename}\\HWID.txt", HWID);
|
||||
ADB.RunCommandToString(cmd, path);
|
||||
if (File.Exists($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{installedVersionInt}.zip"))
|
||||
File.Delete($"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{installedVersionInt}.zip");
|
||||
File.Move($"{Properties.Settings.Default.MainDir}\\{packagename}v{installedVersionInt}.zip", $"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\\{GameName} v{installedVersionInt}.zip");
|
||||
FlexibleMessageBox.Show($"The app has been zipped and placed on your desktop as\n\n{GameName} v{installedVersionInt}.zip\n\nPlease upload this file to a free file hosting service like\n https://1fichier.com or https://mega.nz \nThen share the link to the moderators listed in the\npinned message on Telegram.");
|
||||
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packagename}", true);
|
||||
});
|
||||
t3.IsBackground = true;
|
||||
t3.Start();
|
||||
|
||||
while (t3.IsAlive)
|
||||
await Task.Delay(100);
|
||||
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
ChangeTitle("");
|
||||
await uploadGameAsync(GameName, packagename, installedVersionInt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -1267,19 +1247,113 @@ namespace AndroidSideloader
|
||||
}
|
||||
}
|
||||
}
|
||||
File.WriteAllText("installedPackages.json", JsonConvert.SerializeObject(Sideloader.InstalledPackages));
|
||||
GameList.Add(Game);
|
||||
}
|
||||
|
||||
|
||||
ListViewItem[] arr = GameList.ToArray();
|
||||
gamesListView.BeginUpdate();
|
||||
gamesListView.Items.AddRange(arr);
|
||||
gamesListView.EndUpdate();
|
||||
// foreach (string newGamesToUpload in newGamesList)
|
||||
// {
|
||||
// string RlsName = Sideloader.PackageNametoGameName(newGamesToUpload);
|
||||
// string GameName = Sideloader.gameNameToSimpleName(RlsName);
|
||||
//Logger.Log(newGamesToUpload);
|
||||
// if (!updatesnotified)
|
||||
//{
|
||||
// DialogResult dialogResult = FlexibleMessageBox.Show($"You have a new game:\n\n{GameName}\n\nRSL can AUTOMATICALLY UPLOAD the clean files to a shared drive in the background,\nthis is the only way to keep the apps up to date for everyone.\n\nNOTE: Rookie will only extract the APK/OBB which contain NO personal information whatsoever.", "CONTRIBUTE CLEAN FILES?", MessageBoxButtons.YesNo);
|
||||
// if (dialogResult == DialogResult.Yes)
|
||||
// {
|
||||
// string InstalledVersionCode;
|
||||
// InstalledVersionCode = ADB.RunAdbCommandToString($"shell \"dumpsys package {newGamesToUpload} | grep versionCode -F\"").Output;
|
||||
//InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingBeforeFirst(InstalledVersionCode, "versionCode=");
|
||||
//InstalledVersionCode = Utilities.StringUtilities.RemoveEverythingAfterFirst(InstalledVersionCode, " ");
|
||||
//ulong installedVersionInt = UInt64.Parse(Utilities.StringUtilities.KeepOnlyNumbers(InstalledVersionCode));
|
||||
//await uploadGameAsync(GameName, newGamesToUpload, installedVersionInt);
|
||||
// }
|
||||
//}
|
||||
// }
|
||||
|
||||
newGamesList.Clear();
|
||||
updatesnotified = true;
|
||||
if (!isworking && gamesToUpload.Count > 0)
|
||||
{
|
||||
ChangeTitle("Uploading to shared drive, you can continue to use Rookie while it uploads in the background.");
|
||||
ULGif.Visible = true;
|
||||
ULLabel.Visible = true;
|
||||
ULGif.Enabled = true;
|
||||
isworking = true;
|
||||
|
||||
foreach (UploadGame game in gamesToUpload)
|
||||
{
|
||||
Thread t3 = new Thread(() =>
|
||||
{
|
||||
string packagename = Sideloader.gameNameToPackageName(game.Uploadgamename);
|
||||
if (File.Exists($"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion}.zip"))
|
||||
File.Delete($"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion}.zip");
|
||||
string path = $"{Properties.Settings.Default.MainDir}\\7z.exe";
|
||||
string cmd = $"7z a \"{game.Uploadgamename} v{game.Uploadversion}.zip\" .\\{game.Pckgcommand}\\*";
|
||||
ChangeTitle("Zipping extracted application...");
|
||||
ADB.RunCommandToString(cmd, path);
|
||||
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{game.Pckgcommand}", true);
|
||||
ChangeTitle("Uploading to drive, you may continue to use Rookie while it uploads.");
|
||||
RCLONE.runRcloneCommand(game.Uploadcommand);
|
||||
FlexibleMessageBox.Show($"Upload of {game.Uploadgamename} is complete! Thank you for your contribution!");
|
||||
File.Delete($"{Properties.Settings.Default.MainDir}\\{game.Uploadgamename} v{game.Uploadversion}.zip");
|
||||
|
||||
});
|
||||
t3.IsBackground = true;
|
||||
t3.Start();
|
||||
while (t3.IsAlive)
|
||||
{
|
||||
isuploading = true;
|
||||
await Task.Delay(100);
|
||||
}
|
||||
}
|
||||
gamesToUpload.Clear();
|
||||
isworking = false;
|
||||
isuploading = false;
|
||||
ULGif.Visible = false;
|
||||
ULLabel.Visible = false;
|
||||
ULGif.Enabled = false;
|
||||
ChangeTitle("");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task uploadGameAsync(string GameName, string packagename, ulong installedVersionInt)
|
||||
{
|
||||
progressBar.Style = ProgressBarStyle.Marquee;
|
||||
Thread t1 = new Thread(() =>
|
||||
{
|
||||
Sideloader.getApk(GameName);
|
||||
});
|
||||
t1.IsBackground = true;
|
||||
t1.Start();
|
||||
|
||||
while (t1.IsAlive)
|
||||
await Task.Delay(1000);
|
||||
ChangeTitle("Extracting obb if it exists....");
|
||||
Thread t2 = new Thread(() =>
|
||||
{
|
||||
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/obb/{packagename}\" \"{Properties.Settings.Default.MainDir}\\{packagename}\"");
|
||||
});
|
||||
t2.IsBackground = true;
|
||||
t2.Start();
|
||||
|
||||
while (t2.IsAlive)
|
||||
await Task.Delay(1000);
|
||||
string HWID = SideloaderUtilities.UUID();
|
||||
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\{packagename}\\HWID.txt", HWID);
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
UploadGame game = new UploadGame();
|
||||
game.Pckgcommand = packagename;
|
||||
game.Uploadcommand = $"copy \"{Properties.Settings.Default.MainDir}\\{GameName} v{installedVersionInt}.zip\" RSL-debuglogs:CleanGames";
|
||||
game.Uploadversion = installedVersionInt;
|
||||
game.Uploadgamename = GameName;
|
||||
gamesToUpload.Add(game);
|
||||
ChangeTitle("");
|
||||
}
|
||||
private void initMirrors(bool random)
|
||||
{
|
||||
int index = 0;
|
||||
@@ -1466,11 +1540,12 @@ without him none of this would be possible
|
||||
if (remotesList.Items.Count > remotesList.SelectedIndex && !reset)
|
||||
{
|
||||
remotesList.SelectedIndex++;
|
||||
SideloaderRCLONE.initGames(currentRemote);
|
||||
steps++;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public bool isinstalling = false;
|
||||
private async void downloadInstallGameButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
{
|
||||
@@ -1532,6 +1607,7 @@ without him none of this would be possible
|
||||
ChangeTitle("");
|
||||
return;
|
||||
}
|
||||
isinstalling = true;
|
||||
//Add games to the queue
|
||||
for (int i = 0; i < gamesToDownload.Length; i++)
|
||||
gamesQueueList.Add(gamesToDownload[i]);
|
||||
@@ -1660,7 +1736,7 @@ without him none of this would be possible
|
||||
progressBar.Style = ProgressBarStyle.Continuous;
|
||||
ChangeTitle("Installing game apk " + gameName, false);
|
||||
etaLabel.Text = "ETA: Wait for install...";
|
||||
speedLabel.Text = "DLS: Done downloading";
|
||||
speedLabel.Text = "DLS: Finished";
|
||||
if (File.Exists(Environment.CurrentDirectory + "\\" + gameName + "\\install.txt"))
|
||||
isinstalltxt = true;
|
||||
if (File.Exists(Environment.CurrentDirectory + "\\" + gameName + "\\Install.txt"))
|
||||
@@ -1704,6 +1780,7 @@ without him none of this would be possible
|
||||
Program.form.ChangeTitle($"Sideloading apk...");
|
||||
output += ADB.Sideload(file, packagename);
|
||||
});
|
||||
apkThread.IsBackground = true;
|
||||
apkThread.Start();
|
||||
while (apkThread.IsAlive)
|
||||
await Task.Delay(100);
|
||||
@@ -1726,7 +1803,9 @@ without him none of this would be possible
|
||||
while (obbThread.IsAlive)
|
||||
await Task.Delay(100);
|
||||
}
|
||||
|
||||
}
|
||||
ChangeTitle($"Installation of {gameName} completed....");
|
||||
}
|
||||
if (Properties.Settings.Default.deleteAllAfterInstall)
|
||||
{
|
||||
@@ -1750,6 +1829,7 @@ without him none of this would be possible
|
||||
ChangeTitlebarToDevice();
|
||||
gamesAreDownloading = false;
|
||||
ShowPrcOutput(output);
|
||||
isinstalling = false;
|
||||
listappsbtn();
|
||||
initListView();
|
||||
}
|
||||
@@ -1813,8 +1893,36 @@ without him none of this would be possible
|
||||
|
||||
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
RCLONE.killRclone();
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
if (isinstalling)
|
||||
{
|
||||
var res1 = FlexibleMessageBox.Show(this, "There are downloads and/or installations in progress,\nif you exit now you'll have to start the entire process over again.\nAre you sure you want to exit?", "Still downloading/installing.",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
|
||||
if (res1 != DialogResult.Yes)
|
||||
{
|
||||
e.Cancel = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (isuploading)
|
||||
{
|
||||
var res = FlexibleMessageBox.Show(this, "There is an upload still in progress, if you exit now\nyou'll have to start the entire process over again.\nAre you sure you want to exit?", "Still uploading.",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
|
||||
if (res != DialogResult.Yes)
|
||||
{
|
||||
e.Cancel = true;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
RCLONE.killRclone();
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RCLONE.killRclone();
|
||||
ADB.RunAdbCommandToString("kill-server");
|
||||
}
|
||||
}
|
||||
|
||||
private void ADBWirelessDisable_Click(object sender, EventArgs e)
|
||||
@@ -1847,6 +1955,14 @@ without him none of this would be possible
|
||||
|
||||
}
|
||||
|
||||
private void EnablePassthroughAPI_Click(object sender, EventArgs e)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
ADB.RunAdbCommandToString("shell setprop debug.oculus.experimentalEnabled 1");
|
||||
FlexibleMessageBox.Show("Passthrough API enabled.");
|
||||
|
||||
}
|
||||
|
||||
private async void killRcloneButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (isLoading)
|
||||
|
||||
10
Properties/Resources.Designer.cs
generated
10
Properties/Resources.Designer.cs
generated
@@ -60,6 +60,16 @@ namespace AndroidSideloader.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
public static System.Drawing.Bitmap ajax_loader {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("ajax-loader", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
||||
@@ -130,6 +130,9 @@
|
||||
<data name="battery" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\battery.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="battery11" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\battery1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="SearchGlass" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\SearchGlass.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
@@ -139,7 +142,7 @@
|
||||
<data name="redkey" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\redkey.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="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 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>
|
||||
</root>
|
||||
12
Properties/Settings.Designer.cs
generated
12
Properties/Settings.Designer.cs
generated
@@ -610,5 +610,17 @@ namespace AndroidSideloader.Properties {
|
||||
this["BMBFchecked"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string GamesList {
|
||||
get {
|
||||
return ((string)(this["GamesList"]));
|
||||
}
|
||||
set {
|
||||
this["GamesList"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,5 +149,8 @@
|
||||
<Setting Name="BMBFchecked" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="GamesList" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
@@ -38,9 +38,6 @@ namespace AndroidSideloader
|
||||
{
|
||||
if (!MainForm.HasInternet) return new ProcessOutput("", "No internet");
|
||||
|
||||
//Set the password for rclone configs
|
||||
Environment.SetEnvironmentVariable("RCLONE_CRYPT_REMOTE", rclonepw);
|
||||
Environment.SetEnvironmentVariable("RCLONE_CONFIG_PASS", rclonepw);
|
||||
ProcessOutput prcoutput = new ProcessOutput();
|
||||
//Rclone output is unicode, else it will show garbage instead of unicode characters
|
||||
rclone.StartInfo.StandardOutputEncoding = Encoding.UTF8;
|
||||
@@ -90,7 +87,7 @@ namespace AndroidSideloader
|
||||
rclone.WaitForExit();
|
||||
|
||||
//if there is one of these errors, we switch the mirrors
|
||||
if (error.Contains("cannot fetch token") || error.Contains("authError") || (error.Contains("quota") || error.Contains("exceeded") || error.Contains("directory not found")))
|
||||
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("couldn't list"))
|
||||
{
|
||||
string oldRemote = MainForm.currentRemote;
|
||||
try
|
||||
@@ -111,8 +108,10 @@ namespace AndroidSideloader
|
||||
if (!output.Contains("Game Name;Release Name;") && !output.Contains("package:"))
|
||||
Logger.Log($"Rclone error: {error}\nRclone Output: {output}");
|
||||
if (error.Contains("There is not enough space"))
|
||||
{
|
||||
FlexibleMessageBox.Show("There isn't enough space on your PC to properly install this game. Please have at least 2x the size of the game you are trying to download/install available on the drive where Rookie is installed.", "NOT ENOUGH SPACE");
|
||||
return prcoutput;
|
||||
}
|
||||
return prcoutput;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
BIN
Resources/ajax-loader.gif
Normal file
BIN
Resources/ajax-loader.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 723 B |
@@ -35,10 +35,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
|
||||
}
|
||||
|
||||
//List of all installed package names from connected device
|
||||
public static Dictionary<string, string> InstalledPackages = new Dictionary<string, string>(); //Packagename and Version
|
||||
//public static List<string> InstalledPackageNames = new List<string>();
|
||||
|
||||
//Remove folder from device
|
||||
//public static List<string> InstalledPackageNames = new List<string>(); //Remove folder from device
|
||||
public static ProcessOutput RemoveFolder(string path)
|
||||
{
|
||||
ADB.WakeDevice();
|
||||
|
||||
@@ -83,23 +83,32 @@ namespace AndroidSideloader
|
||||
|
||||
public static void initGames(string remote)
|
||||
{
|
||||
if (remote.Contains("08"))
|
||||
Program.form.SwitchMirrors();
|
||||
gameProperties.Clear();
|
||||
games.Clear();
|
||||
string tempGameList = RCLONE.runRcloneCommand($"cat \"{remote}:{RcloneGamesFolder}/GameList.txt\"").Output;
|
||||
if (MainForm.debugMode)
|
||||
{
|
||||
File.WriteAllText("GamesList.txt", tempGameList);
|
||||
}
|
||||
string gamePropertiesLine = Utilities.StringUtilities.RemoveEverythingAfterFirst(tempGameList, "\n");
|
||||
|
||||
foreach (string gameProperty in gamePropertiesLine.Split(';'))
|
||||
{
|
||||
gameProperties.Add(gameProperty);
|
||||
}
|
||||
gameProperties.Add("Upload Date");
|
||||
gameProperties.Add("Last Updated");
|
||||
|
||||
|
||||
tempGameList = Utilities.StringUtilities.RemoveEverythingBeforeFirst(tempGameList, "\n");
|
||||
|
||||
List<rcloneFolder> gameFolders = JsonConvert.DeserializeObject<List<rcloneFolder>>(RCLONE.runRcloneCommand($"lsjson \"{remote}:{RcloneGamesFolder}\"").Output);
|
||||
if (gameFolders == null || gameFolders.Count < 1)
|
||||
{
|
||||
Program.form.SwitchMirrors();
|
||||
gameFolders = JsonConvert.DeserializeObject<List<rcloneFolder>>(RCLONE.runRcloneCommand($"lsjson \"{remote}:{RcloneGamesFolder}\"").Output);
|
||||
}
|
||||
|
||||
|
||||
foreach (string game in tempGameList.Split('\n'))
|
||||
@@ -109,14 +118,18 @@ namespace AndroidSideloader
|
||||
string[] splitGame = game.Split(';');
|
||||
|
||||
//gameFolder.find();
|
||||
|
||||
var gameFolder = gameFolders.Find((predicate) => predicate.Path == splitGame[1]);
|
||||
//splitGame[6] = gameFolder.ModTime;
|
||||
Array.Resize(ref splitGame, splitGame.Length + 1);
|
||||
string gametime = Utilities.StringUtilities.RemoveEverythingAfterLast(gameFolder.ModTime, ":");
|
||||
gametime = gametime.Replace("T", " ");
|
||||
splitGame[splitGame.Length - 1] = gametime;
|
||||
games.Add(splitGame);
|
||||
|
||||
var gameSynced = gameFolders.Exists((predicate) => predicate.Path == splitGame[1]);
|
||||
if (gameSynced)
|
||||
{
|
||||
var gameFolder = gameFolders.Find((predicate) => predicate.Path == splitGame[1]);
|
||||
//splitGame[6] = gameFolder.ModTime;
|
||||
string gametime = Utilities.StringUtilities.RemoveEverythingAfterLast(gameFolder.ModTime, ":");
|
||||
gametime = gametime.Replace("T", " ");
|
||||
splitGame[splitGame.Length - 1] = gametime;
|
||||
games.Add(splitGame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace AndroidSideloader
|
||||
private static string RawGitHubUrl;
|
||||
private static string GitHubUrl;
|
||||
|
||||
static readonly public string LocalVersion = "2.8";
|
||||
static readonly public string LocalVersion = "2.8.2";
|
||||
public static string currentVersion = string.Empty;
|
||||
public static string changelog = string.Empty;
|
||||
|
||||
|
||||
36
Utilities/UploadGame.cs
Normal file
36
Utilities/UploadGame.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AndroidSideloader.Utilities
|
||||
{
|
||||
class UploadGame
|
||||
{
|
||||
private string uploadcommand;
|
||||
public string Uploadcommand
|
||||
{
|
||||
get => uploadcommand;
|
||||
set => uploadcommand = value;
|
||||
}
|
||||
private string pckgcommand;
|
||||
public string Pckgcommand
|
||||
{
|
||||
get => pckgcommand;
|
||||
set => pckgcommand = value;
|
||||
}
|
||||
private string uploadgamename;
|
||||
public string Uploadgamename
|
||||
{
|
||||
get => uploadgamename;
|
||||
set => uploadgamename = value;
|
||||
}
|
||||
private ulong uploadversion;
|
||||
public ulong Uploadversion
|
||||
{
|
||||
get => uploadversion;
|
||||
set => uploadversion = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,26 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
RSL 2.8.2
|
||||
|
||||
+ Added automatic upload to Google shared drive
|
||||
for clean game files donation.
|
||||
+ Added uploading GIF for duration of upload.
|
||||
+ Added warning messages when user attempts
|
||||
to close Rookie while games are download, installing,
|
||||
or uploading.
|
||||
= Threaded clean file zipping and uploading
|
||||
so user can continue to use Rookie while game
|
||||
is uploading.
|
||||
|
||||
|
||||
RSL 2.8
|
||||
P.S. We are looking for volunteers for the next
|
||||
beta which will automatically detect new games
|
||||
installed on user's headset and suggest them for
|
||||
donation. Message https://t.me/Harryeffinpotter or
|
||||
https://t.me/pmowpmow on Telegram to join the beta
|
||||
test!
|
||||
|
||||
+ Added "Upload Date" to games list columns.
|
||||
= Drag and drop install will now show current APK name.
|
||||
HFP
|
||||
|
||||
|
||||
HFP
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEYj1sACgkQx/Rql1Vo
|
||||
czfO+A/+MGfS+NCkcBwYuxLOkkaojyDetDqHSVZ+onuPW3QL2IRuc4CUxNFLi9br
|
||||
8mqLz/EHD5F4++Hmc1limdF+r4Xxwdz9E00u1sbJbR+QhXes4vzxGNkOJlxC1PNW
|
||||
L8mEfMQLwoSyo8d4aKYJY1LsUmYaIQP81ae5MKt/4l3i2RivrCcfJvDaEBi6DJ1H
|
||||
EjFlFWaPpIjNDm0m1klzcrG0RRVHXtR1xw3IKcMhPeT7VSDYuc2ySXVwVSiHAOXr
|
||||
OPaDSNvNwnIGceM5HOqyQYHq+T0t/3z5bcndAq1EaLJ5W/1f8QcjRlowmMXO4uWs
|
||||
a7YIsgB96i4Riy1xmINf0z2sxvFNIUwCHvTNe/kD/ppN+RFfozM3KJyGwaMxpkRw
|
||||
LcG5FYwGYJZu9QhL36lokERUwsuzBb3ZVABv77oFJ/nPaS4C6CE8g5x08nXiCfqf
|
||||
Lo+RbI+jPX12nLrlKXdleG/xcMAdGUaIxglfpqxi/EG9w5kzUaMXMtybdNj1/p7q
|
||||
UrHgO/V2No/fsrgu28EEguIyDwk78JFHCpebrZH1/RC9ALQiN6I7eq5W1k1S9Buf
|
||||
HGgYk4U2Igm2Ud2oPsqV3dtTPbxqZtM3KCP4cvbaNzoqagvPTHuLQ8LXoPj1XWAd
|
||||
RfC8bi2Rulyx7Yv8uolyRqQVgHvUaPm4nIYHFpw59UTujMMkkZ0=
|
||||
=kLxd
|
||||
-----END PGP SIGNATURE-----
|
||||
P.S MOVED PGP SIGNATURE TO CHANGELOGHISTORY.TXT @
|
||||
https://github.com/nerdunit/androidsideloader
|
||||
Reference in New Issue
Block a user