Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2723dac64f | ||
|
|
df32d593f2 | ||
|
|
050697c2b3 | ||
|
|
72efbc12ac |
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
82
Form1.Designer.cs
generated
@@ -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
525
Form1.cs
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
26
SettingsForm.Designer.cs
generated
26
SettingsForm.Designer.cs
generated
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
53
TroubleshootForm.cs
Normal file
53
TroubleshootForm.cs
Normal 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)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
63
documentation.txt
Normal 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
|
||||
Reference in New Issue
Block a user