Compare commits

...

4 Commits

Author SHA1 Message Date
nerdunit
2723dac64f Delete Tor.7z 2020-07-14 02:56:15 -07:00
nerdunit
df32d593f2 Update Changelog.txt 2020-07-13 01:13:38 -07:00
nerdunit
050697c2b3 Add files via upload 2020-07-12 10:40:19 -07:00
nerdunit
72efbc12ac Update version 2020-07-12 10:37:58 -07:00
13 changed files with 661 additions and 228 deletions

View File

@@ -64,6 +64,37 @@
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'x86|AnyCPU'">
<OutputPath>bin\x86\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'x86|x64'">
<OutputPath>bin\x64\x86\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'x86|x86'">
<OutputPath>bin\x86\x86\</OutputPath>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="Costura, Version=4.1.0.0, Culture=neutral, PublicKeyToken=9919ef960d84173d, processorArchitecture=MSIL">
<HintPath>packages\Costura.Fody.4.1.0\lib\net40\Costura.dll</HintPath>
@@ -108,17 +139,24 @@
<Compile Include="SettingsForm.Designer.cs">
<DependentUpon>SettingsForm.cs</DependentUpon>
</Compile>
<Compile Include="usernameForm.cs">
<Compile Include="TroubleshootForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="usernameForm.Designer.cs">
<DependentUpon>usernameForm.cs</DependentUpon>
<Compile Include="TroubleshootForm.Designer.cs">
<DependentUpon>TroubleshootForm.cs</DependentUpon>
</Compile>
<Compile Include="UsernameForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="UsernameForm.Designer.cs">
<DependentUpon>UsernameForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SelectFolder.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
@@ -133,8 +171,11 @@
<EmbeddedResource Include="SettingsForm.resx">
<DependentUpon>SettingsForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="usernameForm.resx">
<DependentUpon>usernameForm.cs</DependentUpon>
<EmbeddedResource Include="TroubleshootForm.resx">
<DependentUpon>TroubleshootForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UsernameForm.resx">
<DependentUpon>UsernameForm.cs</DependentUpon>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
@@ -151,6 +192,7 @@
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="changelog.txt" />
<Content Include="icon.ico" />
<Content Include="MetroFramework.txt" />
</ItemGroup>

View File

@@ -9,18 +9,33 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
x86|Any CPU = x86|Any CPU
x86|x64 = x86|x64
x86|x86 = x86|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|x64.ActiveCfg = Debug|x64
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|x64.Build.0 = Debug|x64
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|x86.ActiveCfg = Debug|x86
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Debug|x86.Build.0 = Debug|x86
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|Any CPU.Build.0 = Release|Any CPU
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|x64.ActiveCfg = Release|x64
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|x64.Build.0 = Release|x64
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|x86.ActiveCfg = Release|x86
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.Release|x86.Build.0 = Release|x86
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|Any CPU.ActiveCfg = x86|Any CPU
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|Any CPU.Build.0 = x86|Any CPU
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|x64.ActiveCfg = x86|x64
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|x64.Build.0 = x86|x64
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|x86.ActiveCfg = x86|x86
{CC8BE9F0-CE07-406A-A378-81D9CFE4CC1D}.x86|x86.Build.0 = x86|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -22,8 +22,8 @@
<setting name="firstRun" serializeAs="String">
<value>True</value>
</setting>
<setting name="useTor" serializeAs="String">
<value>False</value>
<setting name="deleteAllAfterInstall" serializeAs="String">
<value>True</value>
</setting>
</AndroidSideloader.Properties.Settings>
</userSettings>

View File

@@ -1,3 +1,47 @@
= Fixed infinite update message
1.0HF1
= Fixed a problem when deleting an app
1.0
+ Added games auto download
+ Added auto troubleshoot
+ Every app installed will have all perms granted
+ Displays apps for games instead of package names if you have rclone set up
+ Uninstall app now will also delete its obb folder
//For auto download you need an rclone config and rclone to be set up correctly, VRP:Quest Games
0.15HF1
+ Added list apps button back
= Fixed Uninstall apk and get apk
0.15
= MASSIVE UI REDESIGN
+ Added toggle for tor/clearnet
+ Added download games through tor but still waiting for someone to help me host the files
+ Added download with progress
= Changed adb sideload command to allow downgrades too
- Removed perms stuff, was too buggy
0.14HF1
+ Added donate button
= Fixed ui order
- Removed warning from bulk obb sideload button
0.14
+ Check file hash button
+ Added first run check (will maybe be used to create user.json files)
+ Added drag and drop for apk and obb files
+ Progress bar now works for every adb command
= Moved buttons
- Instructions button
- Removed run custom adb command button and form
0.13
+ Added vrmoo.cn.json
+ Added bulk obb copy
= Message Box now top most
0.12
+ Added settings form
+ Added progress bar (again)
@@ -76,4 +120,4 @@
+ Renamed buttons
0.1
+ Initial Release
+ Initial Release

82
Form1.Designer.cs generated
View File

@@ -43,12 +43,13 @@
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.copyBulkObbButton = new System.Windows.Forms.Button();
this.DragDropLbl = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.downloadInstallGameButton = new System.Windows.Forms.Button();
this.gamesComboBox = new SergeUtils.EasyCompletionComboBox();
this.panel1 = new System.Windows.Forms.Panel();
this.donateButton = new System.Windows.Forms.Button();
this.aboutBtn = new System.Windows.Forms.Button();
this.settingsButton = new System.Windows.Forms.Button();
this.troubleshootButton = new System.Windows.Forms.Button();
this.checkHashButton = new System.Windows.Forms.Button();
this.userjsonButton = new System.Windows.Forms.Button();
this.backupContainer = new System.Windows.Forms.Panel();
@@ -71,6 +72,7 @@
this.m_combo.Name = "m_combo";
this.m_combo.Size = new System.Drawing.Size(568, 24);
this.m_combo.TabIndex = 16;
this.m_combo.Text = "Select an app from here...";
//
// startsideloadbutton
//
@@ -183,7 +185,7 @@
//
this.launchPackageTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.launchPackageTextBox.ForeColor = System.Drawing.Color.White;
this.launchPackageTextBox.Location = new System.Drawing.Point(597, 113);
this.launchPackageTextBox.Location = new System.Drawing.Point(597, 148);
this.launchPackageTextBox.Margin = new System.Windows.Forms.Padding(4);
this.launchPackageTextBox.Name = "launchPackageTextBox";
this.launchPackageTextBox.Size = new System.Drawing.Size(255, 22);
@@ -192,7 +194,7 @@
//
// launchApkButton
//
this.launchApkButton.Location = new System.Drawing.Point(597, 140);
this.launchApkButton.Location = new System.Drawing.Point(597, 175);
this.launchApkButton.Margin = new System.Windows.Forms.Padding(4);
this.launchApkButton.Name = "launchApkButton";
this.launchApkButton.Size = new System.Drawing.Size(255, 25);
@@ -241,10 +243,10 @@
//
this.progressBar1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.progressBar1.ForeColor = System.Drawing.Color.Purple;
this.progressBar1.Location = new System.Drawing.Point(286, 45);
this.progressBar1.Location = new System.Drawing.Point(284, 45);
this.progressBar1.Margin = new System.Windows.Forms.Padding(4);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(565, 25);
this.progressBar1.Size = new System.Drawing.Size(568, 25);
this.progressBar1.TabIndex = 23;
//
// copyBulkObbButton
@@ -268,27 +270,26 @@
// DragDropLbl
//
this.DragDropLbl.AutoSize = true;
this.DragDropLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 48F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.DragDropLbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 36F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.DragDropLbl.ForeColor = System.Drawing.Color.White;
this.DragDropLbl.Location = new System.Drawing.Point(275, 486);
this.DragDropLbl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.DragDropLbl.Name = "DragDropLbl";
this.DragDropLbl.Size = new System.Drawing.Size(526, 91);
this.DragDropLbl.Size = new System.Drawing.Size(394, 69);
this.DragDropLbl.TabIndex = 27;
this.DragDropLbl.Text = "DragDropLBL";
this.DragDropLbl.Visible = false;
//
// button1
// downloadInstallGameButton
//
this.button1.Location = new System.Drawing.Point(284, 113);
this.button1.Margin = new System.Windows.Forms.Padding(4);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(256, 28);
this.button1.TabIndex = 71;
this.button1.Text = "Download Game";
this.button1.UseVisualStyleBackColor = true;
this.button1.Visible = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
this.downloadInstallGameButton.Location = new System.Drawing.Point(284, 113);
this.downloadInstallGameButton.Margin = new System.Windows.Forms.Padding(4);
this.downloadInstallGameButton.Name = "downloadInstallGameButton";
this.downloadInstallGameButton.Size = new System.Drawing.Size(568, 28);
this.downloadInstallGameButton.TabIndex = 71;
this.downloadInstallGameButton.Text = "Download and Install Game";
this.downloadInstallGameButton.UseVisualStyleBackColor = true;
this.downloadInstallGameButton.Click += new System.EventHandler(this.downloadInstallGameButton_Click);
//
// gamesComboBox
//
@@ -300,7 +301,7 @@
this.gamesComboBox.Name = "gamesComboBox";
this.gamesComboBox.Size = new System.Drawing.Size(568, 24);
this.gamesComboBox.TabIndex = 72;
this.gamesComboBox.Visible = false;
this.gamesComboBox.Text = "Select a game from here...";
//
// panel1
//
@@ -309,6 +310,7 @@
this.panel1.Controls.Add(this.donateButton);
this.panel1.Controls.Add(this.aboutBtn);
this.panel1.Controls.Add(this.settingsButton);
this.panel1.Controls.Add(this.troubleshootButton);
this.panel1.Controls.Add(this.checkHashButton);
this.panel1.Controls.Add(this.userjsonButton);
this.panel1.Controls.Add(this.backupContainer);
@@ -330,11 +332,11 @@
this.donateButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.donateButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.donateButton.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.donateButton.Location = new System.Drawing.Point(0, 573);
this.donateButton.Location = new System.Drawing.Point(0, 608);
this.donateButton.Margin = new System.Windows.Forms.Padding(4);
this.donateButton.Name = "donateButton";
this.donateButton.Size = new System.Drawing.Size(267, 58);
this.donateButton.TabIndex = 85;
this.donateButton.TabIndex = 89;
this.donateButton.Text = "DONATE";
this.donateButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.donateButton.UseVisualStyleBackColor = true;
@@ -347,11 +349,11 @@
this.aboutBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.aboutBtn.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.aboutBtn.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.aboutBtn.Location = new System.Drawing.Point(0, 538);
this.aboutBtn.Location = new System.Drawing.Point(0, 573);
this.aboutBtn.Margin = new System.Windows.Forms.Padding(4);
this.aboutBtn.Name = "aboutBtn";
this.aboutBtn.Size = new System.Drawing.Size(267, 35);
this.aboutBtn.TabIndex = 84;
this.aboutBtn.TabIndex = 88;
this.aboutBtn.Text = "ABOUT";
this.aboutBtn.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.aboutBtn.UseVisualStyleBackColor = true;
@@ -364,16 +366,33 @@
this.settingsButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.settingsButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.settingsButton.ForeColor = System.Drawing.SystemColors.MenuBar;
this.settingsButton.Location = new System.Drawing.Point(0, 503);
this.settingsButton.Location = new System.Drawing.Point(0, 538);
this.settingsButton.Margin = new System.Windows.Forms.Padding(4);
this.settingsButton.Name = "settingsButton";
this.settingsButton.Size = new System.Drawing.Size(267, 35);
this.settingsButton.TabIndex = 83;
this.settingsButton.TabIndex = 87;
this.settingsButton.Text = "SETTINGS";
this.settingsButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.settingsButton.UseVisualStyleBackColor = true;
this.settingsButton.Click += new System.EventHandler(this.settingsButton_Click);
//
// troubleshootButton
//
this.troubleshootButton.Dock = System.Windows.Forms.DockStyle.Top;
this.troubleshootButton.FlatAppearance.BorderSize = 0;
this.troubleshootButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.troubleshootButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.troubleshootButton.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.troubleshootButton.Location = new System.Drawing.Point(0, 503);
this.troubleshootButton.Margin = new System.Windows.Forms.Padding(4);
this.troubleshootButton.Name = "troubleshootButton";
this.troubleshootButton.Size = new System.Drawing.Size(267, 35);
this.troubleshootButton.TabIndex = 86;
this.troubleshootButton.Text = "TROUBLESHOOT";
this.troubleshootButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.troubleshootButton.UseVisualStyleBackColor = true;
this.troubleshootButton.Click += new System.EventHandler(this.troubleshootButton_Click);
//
// checkHashButton
//
this.checkHashButton.Dock = System.Windows.Forms.DockStyle.Top;
@@ -468,7 +487,7 @@
this.listApkButton.Padding = new System.Windows.Forms.Padding(31, 0, 0, 0);
this.listApkButton.Size = new System.Drawing.Size(267, 35);
this.listApkButton.TabIndex = 15;
this.listApkButton.Text = "Refresh Apk List";
this.listApkButton.Text = "Refresh Apk, Games";
this.listApkButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.listApkButton.UseVisualStyleBackColor = true;
this.listApkButton.Click += new System.EventHandler(this.listApkButton_Click);
@@ -500,7 +519,7 @@
this.ClientSize = new System.Drawing.Size(862, 786);
this.Controls.Add(this.panel1);
this.Controls.Add(this.gamesComboBox);
this.Controls.Add(this.button1);
this.Controls.Add(this.downloadInstallGameButton);
this.Controls.Add(this.DragDropLbl);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.launchApkButton);
@@ -541,19 +560,20 @@
private System.Windows.Forms.ProgressBar progressBar1;
private System.Windows.Forms.Button copyBulkObbButton;
private System.Windows.Forms.Label DragDropLbl;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button downloadInstallGameButton;
private SergeUtils.EasyCompletionComboBox gamesComboBox;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button donateButton;
private System.Windows.Forms.Button aboutBtn;
private System.Windows.Forms.Button settingsButton;
private System.Windows.Forms.Button checkHashButton;
private System.Windows.Forms.Button userjsonButton;
private System.Windows.Forms.Panel backupContainer;
private System.Windows.Forms.Button backupDrop;
private System.Windows.Forms.Panel sideloadContainer;
private System.Windows.Forms.Button sideloadDrop;
private System.Windows.Forms.Button listApkButton;
private System.Windows.Forms.Button checkHashButton;
private System.Windows.Forms.Button troubleshootButton;
private System.Windows.Forms.Button donateButton;
private System.Windows.Forms.Button aboutBtn;
private System.Windows.Forms.Button settingsButton;
}
}

525
Form1.cs
View File

@@ -3,7 +3,6 @@ using System.Diagnostics;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Windows;
using System.ComponentModel;
using System.Threading.Tasks;
using System.Net.Http;
@@ -11,12 +10,8 @@ using System.Timers;
using System.Security.Cryptography;
using System.Windows.Threading;
using System.Net;
using System.Runtime.InteropServices;
using SergeUtils;
using System.Drawing.Text;
using JR.Utils.GUI.Forms;
using System.Drawing;
/* <a target="_blank" href="https://icons8.com/icons/set/van">Van icon</a> icon by <a target="_blank" href="https://icons8.com">Icons8</a>
* The icon of the app contains an icon made by icon8.com
@@ -71,11 +66,11 @@ namespace AndroidSideloader
private void hideSubMenu()
{
if(sideloadContainer.Visible == true)
if (sideloadContainer.Visible == true)
{
sideloadContainer.Visible = false;
}
if(backupContainer.Visible == true)
if (backupContainer.Visible == true)
{
backupContainer.Visible = false;
}
@@ -118,7 +113,7 @@ namespace AndroidSideloader
changeStyle(1);
oldTitle = this.Text;
changeTitle("Rookie's Sideloader | Running command " + command);
Process cmd = new Process();
cmd.StartInfo.FileName = Environment.CurrentDirectory + "\\adb\\adb.exe";
cmd.StartInfo.Arguments = command;
@@ -133,7 +128,7 @@ namespace AndroidSideloader
cmd.StandardInput.Close();
allText = cmd.StandardOutput.ReadToEnd();
cmd.WaitForExit();
StreamWriter sw = File.AppendText(debugPath);
sw.Write("Action name = " + command + '\n');
sw.Write(allText);
@@ -150,7 +145,7 @@ namespace AndroidSideloader
{
Thread t1 = new Thread(() =>
{
runAdbCommand("install -d -r " + '"' + path + '"');
runAdbCommand("install -g -d -r " + '"' + path + '"');
});
t1.IsBackground = true;
t1.Start();
@@ -202,14 +197,14 @@ namespace AndroidSideloader
{
changeStyle(1);
oldTitle = this.Text;
changeTitle("Rookie Sideloader | Extracting archive " + sourceArchive);
changeTitle("Rookie's Sideloader | Extracting archive " + sourceArchive);
string zPath = "7z.exe"; //add to proj and set CopyToOuputDir
ProcessStartInfo pro = new ProcessStartInfo();
pro.WindowStyle = ProcessWindowStyle.Hidden;
pro.FileName = zPath;
pro.Arguments = string.Format("x \"{0}\" -y -o\"{1}\"", sourceArchive, destination);
Process x = Process.Start(pro);
x.WaitForExit();
ProcessStartInfo pro = new ProcessStartInfo();
pro.WindowStyle = ProcessWindowStyle.Hidden;
pro.FileName = zPath;
pro.Arguments = string.Format("x \"{0}\" -y -o\"{1}\"", sourceArchive, destination);
Process x = Process.Start(pro);
x.WaitForExit();
changeStyle(0);
changeTitle(oldTitle);
}
@@ -247,9 +242,71 @@ namespace AndroidSideloader
private void changeTitlebarToDevice()
{
if (line[1].Length > 1)
this.Text = "Rookie Sideloader | Device Connected with ID | " + line[1].Replace("device", "");
this.Text = "Rookie's Sideloader | Device Connected with ID | " + line[1].Replace("device", "");
else
this.Text = "Rookie Sideloader | No Device Connected";
this.Text = "Rookie's Sideloader | No Device Connected";
}
void downloadFiles()
{
using (var client = new WebClient())
{
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
if (!File.Exists(Environment.CurrentDirectory + "\\7z.exe"))
{
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/7z.exe", "7z.exe");
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/7z.dll", "7z.dll");
}
if (!Directory.Exists(adbPath)) //if there is no adb folder, download and extract
{
try
{
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/adb.7z", "adb.7z");
ExtractFile(Environment.CurrentDirectory + "\\adb.7z", Environment.CurrentDirectory);
File.Delete("adb.7z");
}
catch (Exception ex)
{
FlexibleMessageBox.Show("Cannot download adb because you are not connected to the internet! You can manually download the zip here https://github.com/nerdunit/androidsideloader/raw/master/adb.7z after downloading move it to " + Environment.CurrentDirectory + " and unarchive it");
StreamWriter sw = File.AppendText(debugPath);
sw.Write("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
sw.Write(ex.ToString() + "\n");
sw.Flush();
sw.Close();
Environment.Exit(600);
}
}
if (!Directory.Exists(Environment.CurrentDirectory + "\\rclone"))
{
string url;
if (Environment.Is64BitOperatingSystem)
url = "https://downloads.rclone.org/v1.52.2/rclone-v1.52.2-windows-amd64.zip";
else
url = "https://downloads.rclone.org/v1.52.2/rclone-v1.52.2-windows-386.zip";
client.DownloadFile(url, "rclone.zip");
ExtractFile(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;
}
}
}
}
}
//A lot of stuff to do when the form loads, centers the program,
@@ -259,55 +316,13 @@ namespace AndroidSideloader
if (File.Exists(debugPath))
File.Delete(debugPath); //clear debug.log each start
if (File.Exists(Environment.CurrentDirectory + "\\7z.exe") == false)
{
using (var client = new WebClient())
{
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/7z.exe", "7z.exe");
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/7z.dll", "7z.dll");
}
}
if (Directory.Exists(adbPath)==false) //if there is no adb folder, download and extract
{
FlexibleMessageBox.Show("Please wait for the software to download and install the adb");
try
{
using (var client = new WebClient())
{
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/7z.exe", "7z.exe");
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/7z.dll", "7z.dll");
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/adb.7z", "adb.7z");
}
ExtractFile(Environment.CurrentDirectory + "\\adb.7z", Environment.CurrentDirectory);
File.Delete("adb.7z");
}
catch (Exception ex)
{
FlexibleMessageBox.Show("Cannot download adb because you are not connected to the internet! You can manually download the zip here https://github.com/nerdunit/androidsideloader/raw/master/adb.7z after downloading move it to " + Environment.CurrentDirectory + " and unarchive it");
StreamWriter sw = File.AppendText(debugPath);
sw.Write("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
sw.Write(ex.ToString() + "\n");
sw.Flush();
sw.Close();
Environment.Exit(600);
}
}
if (debugMode==false)
if (Properties.Settings.Default.checkForUpdates==true)
try { downloadFiles(); } catch { notify("You must have internet access for initial downloads, you can try:\n1. Disabling the firewall and antivirus\n2. Delete every file from the sideloader besides the .exe\n3. Try a vpn\n"); }
if (debugMode == false)
if (Properties.Settings.Default.checkForUpdates == true)
checkForUpdate();
if (debugMode == true)
{
button1.Visible = true;
gamesComboBox.Visible = true;
}
runAdbCommand("devices"); //check if there is any device connected
changeTitlebarToDevice();
@@ -315,6 +330,7 @@ namespace AndroidSideloader
if (Properties.Settings.Default.firstRun == true)
{
MessageBox.Show("YOU CAN NOW DRAG AND DROP TO INSTALL APK'S AND OBB FOLDERS!");
FlexibleMessageBox.Show("For one click download and install games you need an rclone config");
Properties.Settings.Default.firstRun = false;
Properties.Settings.Default.Save();
}
@@ -344,13 +360,12 @@ namespace AndroidSideloader
uninstallAppToolTip.SetToolTip(this.uninstallAppButton, "Uninstalls selected app");
ToolTip userjsonToolTip = new ToolTip();
userjsonToolTip.SetToolTip(this.userjsonButton, "After you enter your username it will create an user.json file needed for some games");
}
void checkForUpdate()
{
try
try
{
string localVersion = "0.15HF1";
string localVersion = "1.0";
HttpClient client = new HttpClient();
string currentVersion = client.GetStringAsync("https://raw.githubusercontent.com/nerdunit/androidsideloader/master/version").Result;
currentVersion = currentVersion.Remove(currentVersion.Length - 1);
@@ -384,7 +399,7 @@ namespace AndroidSideloader
Environment.Exit(0);
}
}
catch
catch
{
}
@@ -444,7 +459,7 @@ namespace AndroidSideloader
}
else return;
}
await Task.Run(() => restore());
await Task.Run(() => restore());
notify(allText);
}
@@ -460,18 +475,54 @@ namespace AndroidSideloader
t1.Join();
}
public string[] getGames()
{
string command = "cat \"VRP:Quest Games/APK_packagenames.txt\" --config .\\a";
Process cmd = new Process();
cmd.StartInfo.FileName = Environment.CurrentDirectory + "\\rclone\\rclone.exe";
cmd.StartInfo.Arguments = command;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.WorkingDirectory = Environment.CurrentDirectory + "\\rclone";
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine(command);
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
var games = cmd.StandardOutput.ReadToEnd().Split('\n');
cmd.WaitForExit();
return games;
}
private async void listappsBtn()
{
var games = getGames();
allText = "";
m_combo.Items.Clear();
await Task.Run(() => listapps());
foreach (string obj in line)
{
if (obj.Length>9)
m_combo.Items.Add(obj.Remove(0, 8));
if (obj.Length > 9)
{
string packageName = obj.Remove(0, 8);
packageName = packageName.Remove(packageName.Length - 1);
foreach (string game in games)
{
if (packageName.Length > 0 && game.Contains(packageName))
{
var foo = game.Split(';');
packageName = foo[0];
}
}
m_combo.Items.Add(packageName);
}
}
m_combo.MatchingMethod = StringMatchingMethod.NoWildcards;
}
@@ -500,15 +551,28 @@ namespace AndroidSideloader
private async void getApkButton_Click(object sender, EventArgs e)
{
if (m_combo.Items.Count == 0 || m_combo.SelectedItem.ToString().Length == 0)
if (m_combo.SelectedIndex == -1)
{
notify("Please select an app first");
return;
}
string package = m_combo.SelectedItem.ToString().Remove(m_combo.SelectedItem.ToString().Length - 1);
string[] games = getGames();
await Task.Run(() => getapk(package));
string packageName = m_combo.SelectedItem.ToString();
foreach (string game in games)
{
if (packageName.Length > 0 && game.Contains(packageName))
{
var foo = game.Split(';');
packageName = foo[2];
}
}
await Task.Run(() => getapk(packageName));
allText = allText.Remove(allText.Length - 1);
//MessageBox.Show(allText);
@@ -522,11 +586,11 @@ namespace AndroidSideloader
while (currApkPath.Contains("/"))
currApkPath = currApkPath.Substring(currApkPath.IndexOf("/") + 1);
if (File.Exists(Environment.CurrentDirectory + "\\" + package + ".apk"))
File.Delete(Environment.CurrentDirectory + "\\" + package + ".apk");
if (File.Exists(Environment.CurrentDirectory + "\\" + packageName + ".apk"))
File.Delete(Environment.CurrentDirectory + "\\" + packageName + ".apk");
File.Move(Environment.CurrentDirectory + "\\adb\\" + currApkPath, Environment.CurrentDirectory + "\\" + package + ".apk");
File.Move(Environment.CurrentDirectory + "\\adb\\" + currApkPath, Environment.CurrentDirectory + "\\" + packageName + ".apk");
notify(allText);
}
@@ -541,24 +605,61 @@ namespace AndroidSideloader
t1.Start();
}
async Task<string> getpackagename()
{
string[] games = getGames();
string packageName = m_combo.SelectedItem.ToString();
foreach (string game in games)
{
if (packageName.Length > 0 && game.Contains(packageName))
{
packageName = game;
break;
}
}
return packageName;
}
private async void uninstallAppButton_Click(object sender, EventArgs e)
{
if (m_combo.Items.Count == 0 || m_combo.SelectedItem.ToString().Length == 0)
if (m_combo.SelectedIndex == -1)
{
MessageBox.Show("Please select an app first");
return;
}
allText = "";
string package = m_combo.SelectedItem.ToString().Remove(m_combo.SelectedItem.ToString().Length - 1);
string packageName = await getpackagename();
DialogResult dialogResult = MessageBox.Show("Are you sure you want to uninstall " + package + " this CANNOT be undone!", "WARNING!", MessageBoxButtons.YesNo);
packageName = packageName.Split(';')[2];
DialogResult dialogResult = MessageBox.Show("Are you sure you want to uninstall " + packageName + " this CANNOT be undone!", "WARNING!", MessageBoxButtons.YesNo);
if (dialogResult != DialogResult.Yes)
return;
await Task.Run(() => uninstallPackage(package));
await Task.Run(() => uninstallPackage(packageName));
notify(allText);
var uninstallText = allText;
await Task.Run(() => removeFolder("/sdcard/Android/obb/" + packageName));
await Task.Run(() => removeFolder("/sdcard/Android/obb/" + packageName + "/"));
notify(uninstallText);
}
void removeFolder(string path)
{
Thread t1 = new Thread(() =>
{
runAdbCommand("shell rm -r " + path);
});
t1.IsBackground = true;
t1.Start();
t1.Join();
}
private void uninstallPackage(string package)
@@ -662,9 +763,13 @@ namespace AndroidSideloader
{
using (FileStream stream = File.OpenRead(file))
{
SHA256Managed sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
result = BitConverter.ToString(checksum).Replace("-", String.Empty);
using (var md5 = MD5.Create())
{
using (var hashStream = File.OpenRead(file))
{
result = BitConverter.ToString(md5.ComputeHash(hashStream)).Replace("-", "").ToLowerInvariant();
}
}
}
}
@@ -710,88 +815,44 @@ namespace AndroidSideloader
private void Form1_Shown(object sender, EventArgs e)
{
Timer99.Start();
initGames();
}
private void downloadOverTor(string url, string path)
void initGames()
{
WebProxy oWebProxy = new WebProxy(IPAddress.Loopback.ToString(), 4711);
WebClient oWebClient = new WebClient();
oWebClient.Proxy = oWebProxy;
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
oWebClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
oWebClient.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
oWebClient.DownloadFileAsync(new Uri(url), path);
}
bool isInDownload = false;
private async void button1_Click(object sender, EventArgs e)
{
string gameName = "game.zip"; //get selected game name instead
string url = "";
string path = Environment.CurrentDirectory + "\\game.zip";
string gamePath = Environment.CurrentDirectory + "\\" + gameName;
gamesComboBox.Invoke(() => { gamesComboBox.Items.Clear(); });
isInDownload = true;
changeStyle(1);
if (Properties.Settings.Default.useTor == true)
string command = "lsf --config .\\a --dirs-only \"VRP:Quest Games\" --drive-acknowledge-abuse";
Console.WriteLine(command);
Process cmd = new Process();
cmd.StartInfo.FileName = Environment.CurrentDirectory + "\\rclone\\rclone.exe";
cmd.StartInfo.Arguments = command;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.WorkingDirectory = Environment.CurrentDirectory + "\\rclone";
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine(command);
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
var games = cmd.StandardOutput.ReadToEnd().Split('\n');
cmd.WaitForExit();
foreach (string game in games)
{
if (Directory.Exists(Environment.CurrentDirectory + "\\Tor") == false)
if (!game.StartsWith("."))
{
DialogResult dialogResult = FlexibleMessageBox.Show(new Form { TopMost = true }, "You have download over tor enabled in settings, do you want to download tor?", "Download", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.No)
return;
using (var client = new WebClient())
{
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/Tor.7z", "Tor.7z");
}
ExtractFile(Environment.CurrentDirectory + "\\Tor.7z", Environment.CurrentDirectory);
File.Delete(Environment.CurrentDirectory + "\\Tor.7z");
string currGame = game;
if (currGame.Length > 0)
currGame = currGame.Remove(currGame.Length - 1);
gamesComboBox.Invoke(() => { gamesComboBox.Items.Add(currGame); });
}
string filename = Path.Combine(Environment.CurrentDirectory + "\\Tor", "tor.exe");
var proc = System.Diagnostics.Process.Start(filename, "--HTTPTunnelPort 4711");
downloadOverTor(url, path);
}
else
startDownload(url, path);
while (isInDownload == true)
{
await Task.Delay(25);
}
changeStyle(0);
//Extract the game
await Task.Run(() => ExtractFile(gamePath, Environment.CurrentDirectory));
recursiveSideload(gamePath); //in case there are multiple apk's
string[] filesindirectory = Directory.GetDirectories(gamePath + "\\obb"); //in case there are multiple obb's
foreach (string dir in filesindirectory)
await Task.Run(() => obbcopy(dir));
notify("Game installed");
}
private void startDownload(string url, string path)
{
WebClient client = new WebClient();
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadFileAsync(new Uri(url), path);
}
void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
changeTitle("Rookie's Sideloader | Downloaded " + e.BytesReceived + " of " + e.TotalBytesToReceive);
}
void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
changeStyle(0);
isInDownload = false;
}
private void sideloadContainer_Click(object sender, EventArgs e)
@@ -812,15 +873,23 @@ namespace AndroidSideloader
private void aboutBtn_Click(object sender, EventArgs e)
{
string about = @" - The icon of the app contains an icon made by icon8.com
- Software orignally coded by rookie.lol#7897
- Thanks to badcoder5000#4598 for redesigning the UI
string about = @"Finally 1.0
- Software orignally coded by rookie.lol
- Thanks to pmow for all of his work, including rclone, wonka and other projects
- Thanks to flow for being friendly and helping every one
- Thanks to succ for creating and maintaining the server
- Thanks to badcoder5000 for redesigning the UI
- Thanks to 7zip team for 7zip :)
- Thanks to rclone team for rclone :D
- Thanks to https://stackoverflow.com/users/57611/erike for the folder browser dialog code
- Thanks to Serge Weinstock for developing SergeUtils, which is used to search the combo box
- Thanks to Mike Gold https://www.c-sharpcorner.com/members/mike-gold2 for the scrollable message box";
- Thanks to Mike Gold https://www.c-sharpcorner.com/members/mike-gold2 for the scrollable message box
- The icon of the app contains an icon made by icon8.com";
FlexibleMessageBox.Show(about);
}
bool wait = false;
private async void checkHashButton_Click(object sender, EventArgs e)
{
string file;
@@ -849,20 +918,136 @@ namespace AndroidSideloader
private void userjsonButton_Click(object sender, EventArgs e)
{
usernameForm usernameForm1 = new usernameForm();
UsernameForm usernameForm1 = new UsernameForm();
usernameForm1.Show();
}
private void donateButton_Click(object sender, EventArgs e)
{
Clipboard.SetText("https://steamcommunity.com/tradeoffer/new/?partner=189719028&token=qCee3jwp");
notify("Donate steam stuff to me if you want, my trade link has been copied to your clipboard also here's the link https://steamcommunity.com/tradeoffer/new/?partner=189719028&token=qCee3jwp");
Clipboard.SetText("rookie.lol#0001");
notify("Ask rookie.lol#0001 or pmow#1706 where you can donate");
}
private void listApkButton_Click(object sender, EventArgs e)
private async void listApkButton_Click(object sender, EventArgs e)
{
changeStyle(1);
await Task.Run(() => initGames());
changeStyle(0);
listappsBtn();
}
private void troubleshootButton_Click(object sender, EventArgs e)
{
TroubleshootForm form = new TroubleshootForm();
form.Show();
}
private async void downloadInstallGameButton_Click(object sender, EventArgs e)
{
int apkNumber = 0;
int obbNumber = 0;
string gameName = gamesComboBox.SelectedItem.ToString();
changeTitle("Rookie's Sideloader | Downloading game " + gameName);
Directory.CreateDirectory(Environment.CurrentDirectory + "\\" + gameName);
string command = "copy --config .\\a \"VRP:Quest Games/" + gamesComboBox.SelectedItem.ToString() + "\" \"" + Environment.CurrentDirectory + "\\" + gameName + "\" --progress --drive-acknowledge-abuse";
Thread t1 = new Thread(() =>
{
changeStyle(1);
wait = true;
Process cmd = new Process();
cmd.StartInfo.FileName = Environment.CurrentDirectory + "\\rclone\\rclone.exe";
cmd.StartInfo.Arguments = command;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.WorkingDirectory = Environment.CurrentDirectory + "\\rclone";
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine(command);
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
var games = cmd.StandardOutput.ReadToEnd().Split('\n');
cmd.WaitForExit();
wait = false;
changeStyle(0);
});
t1.IsBackground = true;
t1.Start();
await Task.Delay(500);
while (wait)
{
await Task.Delay(25);
}
string[] files = Directory.GetFiles(Environment.CurrentDirectory + "\\" + gameName);
foreach (string file in files)
{
string extension = Path.GetExtension(file);
if (extension == ".apk")
{
changeStyle(1);
apkNumber++;
await Task.Run(() => sideload(file));
changeStyle(0);
}
}
string[] folders = Directory.GetDirectories(Environment.CurrentDirectory + "\\" + gameName);
foreach (string folder in folders)
{
string[] obbs = Directory.GetFiles(folder);
bool isObb = false;
foreach (string currObb in obbs)
{
string extension = Path.GetExtension(currObb);
if (extension == ".obb")
{
isObb = true;
}
}
if (isObb == true)
{
changeStyle(1);
obbNumber++;
await Task.Run(() => obbcopy(folder));
changeStyle(0);
}
}
if (Properties.Settings.Default.deleteAllAfterInstall)
{
Directory.Delete(Environment.CurrentDirectory + "\\" + gameName, true);
}
notify("Game downloaded and installed " + apkNumber + " apks and " + obbNumber + " obb folders");
//Environment.CurrentDirectory + "\\" + gameName
}
}
public static class ControlExtensions
{
public static void Invoke(this Control control, Action action)
{
if (control.InvokeRequired)
{
control.Invoke(new MethodInvoker(action), null);
}
else
{
action.Invoke();
}
}
}
}

View File

@@ -33,7 +33,7 @@
this.enableMessageBoxesCheckBox = new System.Windows.Forms.CheckBox();
this.copyMessageToClipboardCheckBox = new System.Windows.Forms.CheckBox();
this.resetSettingsButton = new System.Windows.Forms.Button();
this.useTorCheckBox = new System.Windows.Forms.CheckBox();
this.deleteAfterInstallCheckBox = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
//
// checkForUpdatesCheckBox
@@ -98,17 +98,17 @@
this.resetSettingsButton.UseVisualStyleBackColor = false;
this.resetSettingsButton.Click += new System.EventHandler(this.resetSettingsButton_Click);
//
// useTorCheckBox
// deleteAfterInstallCheckBox
//
this.useTorCheckBox.AutoSize = true;
this.useTorCheckBox.Location = new System.Drawing.Point(17, 102);
this.useTorCheckBox.Margin = new System.Windows.Forms.Padding(4);
this.useTorCheckBox.Name = "useTorCheckBox";
this.useTorCheckBox.Size = new System.Drawing.Size(212, 21);
this.useTorCheckBox.TabIndex = 5;
this.useTorCheckBox.Text = "Download games through tor";
this.useTorCheckBox.UseVisualStyleBackColor = true;
this.useTorCheckBox.CheckedChanged += new System.EventHandler(this.useTorCheckBox_CheckedChanged);
this.deleteAfterInstallCheckBox.AutoSize = true;
this.deleteAfterInstallCheckBox.Location = new System.Drawing.Point(17, 102);
this.deleteAfterInstallCheckBox.Margin = new System.Windows.Forms.Padding(4);
this.deleteAfterInstallCheckBox.Name = "deleteAfterInstallCheckBox";
this.deleteAfterInstallCheckBox.Size = new System.Drawing.Size(282, 21);
this.deleteAfterInstallCheckBox.TabIndex = 6;
this.deleteAfterInstallCheckBox.Text = "Delete games after download and install";
this.deleteAfterInstallCheckBox.UseVisualStyleBackColor = true;
this.deleteAfterInstallCheckBox.CheckedChanged += new System.EventHandler(this.deleteAfterInstallCheckBox_CheckedChanged);
//
// SettingsForm
//
@@ -116,7 +116,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
this.ClientSize = new System.Drawing.Size(592, 268);
this.Controls.Add(this.useTorCheckBox);
this.Controls.Add(this.deleteAfterInstallCheckBox);
this.Controls.Add(this.resetSettingsButton);
this.Controls.Add(this.copyMessageToClipboardCheckBox);
this.Controls.Add(this.enableMessageBoxesCheckBox);
@@ -141,6 +141,6 @@
private System.Windows.Forms.CheckBox enableMessageBoxesCheckBox;
private System.Windows.Forms.CheckBox copyMessageToClipboardCheckBox;
private System.Windows.Forms.Button resetSettingsButton;
private System.Windows.Forms.CheckBox useTorCheckBox;
private System.Windows.Forms.CheckBox deleteAfterInstallCheckBox;
}
}

View File

@@ -31,7 +31,7 @@ namespace AndroidSideloader
checkForUpdatesCheckBox.Checked = Properties.Settings.Default.checkForUpdates;
enableMessageBoxesCheckBox.Checked = Properties.Settings.Default.enableMessageBoxes;
copyMessageToClipboardCheckBox.Checked = Properties.Settings.Default.copyMessageToClipboard;
useTorCheckBox.Checked = Properties.Settings.Default.useTor;
deleteAfterInstallCheckBox.Checked = Properties.Settings.Default.deleteAllAfterInstall;
}
void intToolTips()
@@ -42,8 +42,8 @@ namespace AndroidSideloader
enableMessageBoxesToolTip.SetToolTip(this.enableMessageBoxesCheckBox, "If this is checked, the software will display message boxes after every completed task");
ToolTip copyMessageToClipboardToolTip = new ToolTip();
copyMessageToClipboardToolTip.SetToolTip(this.copyMessageToClipboardCheckBox, "If this is checked, after each task the software will set the result message to your clipboard");
ToolTip useTorToolTip = new ToolTip();
useTorToolTip.SetToolTip(this.useTorCheckBox, "If this is checked, the software will use tor to download the games");
ToolTip deleteAfterInstallToolTip = new ToolTip();
deleteAfterInstallToolTip.SetToolTip(this.deleteAfterInstallCheckBox, "If this is checked, the software will delete all game files after downloading and installing a game from a remote server");
}
private void applyButton_Click(object sender, EventArgs e)
@@ -77,9 +77,9 @@ namespace AndroidSideloader
intSettings();
}
private void useTorCheckBox_CheckedChanged(object sender, EventArgs e)
private void deleteAfterInstallCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.useTor = useTorCheckBox.Checked;
Properties.Settings.Default.deleteAllAfterInstall = deleteAfterInstallCheckBox.Checked;
}
}
}

BIN
Tor.7z

Binary file not shown.

53
TroubleshootForm.cs Normal file
View File

@@ -0,0 +1,53 @@
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 TroubleshootForm : Form
{
public TroubleshootForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string question = askTextBox.Text.ToLower();
if ((question.Contains("beat saber") || question.Contains("beatsaber")) && question.Contains("dlc"))
Form1.notify("You can install beatsaber DLC with BMBF, it will work on cracked versions too, just make sure you have latest beat saber and bmbf");
else if ((question.Contains("load") && question.Contains("not")) || ((question.Contains("black") && question.Contains("screen")) || question.Contains("blackscreen")) && (question.Contains("boot") || question.Contains("launch") || question.Contains("start")))
Form1.notify("Make sure you have made the user.json files, copied the obb folder and allowed app permissions");
else if (question.Contains("pass") || question.Contains("pw"))
Form1.notify(@"cs.rin.ru
https://t.me/questgameclub
https://t.me/QuestGameClub
oculusquestpiracy
OculusQuestPiracy
Telegram's passwords until 5/17/2020
https://t.me/questgameclub/thx
t.me/questgameclub/thxdonate
https://t.me/questgameclub/thxdonate
https://t.me/questgameclub/play
https://t.me/questgameclub/love
https://t.me/questgameclub/vip
https://t.me/questgameclub/thxdonatetome");
else
Form1.notify("Sorry I'm too dumb to answer that right now, please ask flow, if flow can't figure it out nobody can");
}
private void TroubleshootForm_Load(object sender, EventArgs e)
{
}
}
}

View File

@@ -1,3 +1,14 @@
1.0HF1
+ Fixed a problem when deleting an app
1.0
+ Added games auto download
+ Added auto troubleshoot
+ Every app installed will have all perms granted
+ Displays apps for games instead of package names if you have rclone set up
+ Uninstall app now will also delete its obb folder
//For auto download you need an rclone config and rclone to be set up correctly, VRP:Quest Games
0.15HF1
+ Added list apps button back
= Fixed Uninstall apk and get apk

63
documentation.txt Normal file
View File

@@ -0,0 +1,63 @@
Main Form
=========
- Adb Devices Button
Notifies the user every device returned by adb
Changes Form1 Titlebar to "Rookie Sideloader | Device Connected with ID | {DEVICEID}"
- Sideload Drop Button
Shows/Hides the rest of sideload buttons
- Copy Obb Button
Opens a new folder select dialog where the user selects an folder, that folder will be copied to Android/Obb
- Copy Bulk Obb Button
Opens a new folder select dialog where the user selects an folder, that folder will be searched and every obb folder will be copied to Android/Obb
- Get Apk Button
After the user selects an package from m_combo (first combobox) the apk will be pulled to the current directory
- Uninstall App Button
After the user selects an package from m_combo (first combobox) and he accepts the warning given, the apk selected will be uninstalled from the device
- Sideload Folder Button
Opens a new folder select dialog where the user selects an folder, that folder will be searched and every apk from it will be sideloaded
- Sideload Apk Button
Opens a new file select dialog where the user selects a file, that file will be sideloaded
- Refresh Apk List Button
Refreshes the apks/packages listed in m_combo
- Backup Drop Button
Shows/Hides the rest of backup buttons
- Backup Gamedata Button
Saves every folder from Android/data to a folder in the current directory
- Restore Gamedata Button
Pushes every folder form current dirctory/data to Android/data
- User.Json button
Opens a new UsernameForm
- Sideload Apk Button
Opens a new file select dialog where the user selects a file, that file's sha256 hash will be copied to clipboard and the user will be notified
- Troublshoot Button
Opens a new TroubleshootForm
- Settings Button
Opens a new SettingsForm
- About Button
Shows the credits
- Donate Button
Sets clipboard text to rookie's steam inventory trade link and sends the user a message
Settings Form
=============
- Check for Updates checkbox
If enabled the software checks for updates every startup (default:enabled)
- Enable Message Boxes on task completed checkbox
If enabled the software will notify the user on every completed task via a Flexible MessageBox (default:enabled)
- Copy message to clipboard checkbox
If enabled the software copy every message called by the notify function to clipboard (default:disabled)
- Delete games after download and install checkbox
If enabled the software will delete every file downloaded by the Download and Install Game Button
- Json TextBox
Here should be the link to custom games json
- Reset Settings Button
Restores settings to default values, you still need to press apply
- Apply Button
Applies settings
Troubleshoot Form
=================
- Ask the software button
Depending on the input from the textbox, the software might respond with a good answer, still WIP
User.Json Form
==============
- Creat User.Json
Creates all 3 user.json (at the moment) with the username from the textbox then pushes them to the root folder on the quest

View File

@@ -1 +1 @@
1.0
1.0HF1