Skip to content

Commit 1df4e75

Browse files
author
ComputerElite
committed
why does everything have to be inconsistent + Add feature requests by TetianaVR
1 parent 480ab7a commit 1df4e75

6 files changed

Lines changed: 104 additions & 39 deletions

File tree

Assets/html/downgrade.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
hr {
3030
border-color: #2c2c2c;
3131
}
32+
33+
.onlyPc {
34+
visibility: hidden;
35+
}
3236
</style>
3337
</head>
3438
<body onmousemove="UpdateMousePos(event)">

Assets/html/index.html

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@
159159
<div class="contentHeader headerMargin">
160160
Step 1
161161
</div>
162-
<div><b>If you want to return to this version you <u>must</u> backup it first.<br>To do this abort the restore process and create a backup.</b></div>
162+
<div><b>Restoring a backup will overwrite your current installation. If you do not want to loose your current installtion you <u>must</u> backup it first.<br>To do this abort the restore process and create a backup.</b></div>
163163
<br>
164164
<b>Selected backup:</b> <div class="selectedBackupName inline"></div> of <div class="inline packageName">some game</div>
165165
<br>
@@ -183,6 +183,9 @@
183183
Step 1.1
184184
</div>
185185
After the uninstall completed please press the continue button
186+
<br>
187+
<br>
188+
<i>If you didn't get a prompt then press continue as well</i>
186189
<div class="buttonSelectionContainer">
187190
<div class="buttonContainer">
188191
<div class="button" id="confirm1">Continue</div>
@@ -243,12 +246,11 @@
243246
<script>
244247
UpdateUI()
245248
var config = {}
246-
var loadingBackups = false
247249
var selectedBackup = ""
248250

249251
var undefinedLoader = `<div class="lds-ellipsis"><div></div><div></div><div></div><div></div></div>`
250252

251-
function UpdateUI() {
253+
function UpdateUI(closeLists = false) {
252254
fetch("questappversionswitcher/config").then(res => res.json().then(res => {
253255
config = res
254256
Array.prototype.forEach.call(document.getElementsByClassName("packageName"), e => {
@@ -269,7 +271,6 @@
269271
UpdateUI()
270272
}
271273
})
272-
loadingBackups = false
273274
}))
274275
}))
275276
fetch("allbackups").then(res => {
@@ -284,16 +285,18 @@
284285
document.getElementById("ips").innerHTML = ""
285286
res.browserIPs.forEach(i =>
286287
{
287-
console.log(i)
288288
document.getElementById("ips").innerHTML += i + "<br>"
289289
})
290290
}))
291291
Array.prototype.forEach.call(document.getElementsByClassName("selectedBackupName"), i => {
292292
i.innerHTML = selectedBackup
293293
})
294+
if(closeLists) {
295+
document.getElementById("appList").className = "list hidden"
296+
document.getElementById("appListContainer").className = "listContainer hidden"
297+
document.getElementById("appList").innerHTML = ""
298+
}
294299

295-
document.getElementById("appList").className = "list hidden"
296-
document.getElementById("appListContainer").className = "listContainer hidden"
297300
}
298301

299302
document.getElementById("saveToken").onclick = () => {
@@ -343,26 +346,26 @@
343346
document.getElementById("appList").innerHTML = undefinedLoader
344347
document.getElementById("appList").className = "list"
345348
document.getElementById("appListContainer").className = "listContainer"
346-
fetch("android/installedapps").then(res => res.json().then(res => {
349+
fetch("android/installedappsandbackups").then(res => res.json().then(res => {
347350
document.getElementById("appList").innerHTML = ""
348351
res.sort((a, b) => a.PackageName.localeCompare(b.PackageName))
349352
res.forEach(app => {
350-
document.getElementById("appList").innerHTML += `<div class="listItem${app.PackageName == config.currentApp ? " listItemSelected" : ""}" value="${app.PackageName}">${app.PackageName}</div>`
351-
})
352-
Array.prototype.forEach.call(document.getElementsByClassName("listItem"), i => {
353-
i.onclick = function() {
354-
loadingBackups = true
355-
fetch("questappversionswitcher/changeapp", {
356-
method: "POST",
357-
body: i.getAttribute("value")
358-
}).then(() => UpdateUI())
359-
UpdateUI()
360-
}
353+
document.getElementById("appList").innerHTML += `<div onclick="ChangeApp(this.getAttribute('value'))" class="listItem${app.PackageName == config.currentApp ? " listItemSelected" : ""}" value="${app.PackageName}">${app.PackageName}</div>`
361354
})
362355
}))
363356
}
364357

365-
document.getElementById("appListContainer").onclick = () => UpdateUI()
358+
function ChangeApp(package) {
359+
fetch("questappversionswitcher/changeapp", {
360+
method: "POST",
361+
body: package
362+
}).then(() => UpdateUI(true))
363+
UpdateUI(true)
364+
}
365+
366+
document.getElementById("appListContainer").onclick = (event) => {
367+
if(event.target.id == 'appListContainer') UpdateUI(true)
368+
}
366369

367370
Array.prototype.forEach.call(document.getElementsByClassName("menuItem"), i => {
368371
i.onclick = function() {
@@ -472,7 +475,19 @@
472475
method: "POST"
473476
}).then(res => {
474477
res.text().then(text => {
475-
if(res.status == 200) GotoStep(4)
478+
if(res.status == 200) {
479+
fetch("containsgamedata?package=" + config.currentApp + "&backupname=" + selectedBackup, {
480+
method: "POST"
481+
}).then(res => {
482+
res.text(text => {
483+
if(text == "False") {
484+
GotoStep(5)
485+
} else {
486+
GotoStep(4)
487+
}
488+
})
489+
})
490+
}
476491
else TextBoxError("step3box", text)
477492
})
478493

Properties/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.1.0" package="com.ComputerElite.questappversionswitcher" android:installLocation="preferExternal" android:versionCode="4">
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.1.1" package="com.ComputerElite.questappversionswitcher" android:installLocation="preferExternal" android:versionCode="5">
33
<uses-sdk android:minSdkVersion="29" android:targetSdkVersion="29" />
44
<uses-permission android:name="oculus.permission.handtracking" />
55
<uses-permission android:name="com.oculus.permission.HAND_TRACKING" />

Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@
2222
// Minor Version
2323
// Build Number
2424
// Revision
25-
[assembly: AssemblyVersion("1.1.0.0")]
26-
[assembly: AssemblyFileVersion("1.1.0.0")]
25+
[assembly: AssemblyVersion("1.1.1.0")]
26+
[assembly: AssemblyFileVersion("1.1.1.0")]

QuestAppVersionSwitcher.csproj.user

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<PropertyGroup>
4-
<SelectedDevice>Oculus Quest</SelectedDevice>
5-
<ActiveDebugProfile>Oculus Quest</ActiveDebugProfile>
4+
<SelectedDevice>Samsung SM-A202F</SelectedDevice>
5+
<ActiveDebugProfile>Samsung SM-A202F</ActiveDebugProfile>
66
<DefaultDevice>pixel_3a_xl_r_11_0_-_api_30</DefaultDevice>
77
<AndroidDesignerPreferredTheme>AppTheme</AndroidDesignerPreferredTheme>
88
<AndroidDesignerPreferredDevice>Nexus 4</AndroidDesignerPreferredDevice>

WebServer.cs

Lines changed: 59 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System.IO.Compression;
1717
using System.Security.Cryptography;
1818
using System.Text;
19+
using System.Linq;
1920

2021
namespace QuestAppVersionSwitcher
2122
{
@@ -36,6 +37,20 @@ public void Start()
3637
serverRequest.SendString(JsonSerializer.Serialize(AndroidService.GetInstalledApps()), "application/json");
3738
return true;
3839
}));
40+
server.AddRoute("GET", "/android/installedappsandbackups", new Func<ServerRequest, bool>(serverRequest =>
41+
{
42+
List<App> apps = AndroidService.GetInstalledApps();
43+
44+
foreach(string f in Directory.GetDirectories(CoreService.coreVars.QAVSBackupDir))
45+
{
46+
if(apps.FirstOrDefault(x => x.PackageName == Path.GetFileName(f)) == null)
47+
{
48+
apps.Add(new App("unknown", Path.GetFileName(f)));
49+
}
50+
}
51+
serverRequest.SendString(JsonSerializer.Serialize(apps), "application/json");
52+
return true;
53+
}));
3954
server.AddRoute("GET", "/android/getpackagelocation", new Func<ServerRequest, bool>(serverRequest =>
4055
{
4156
if (serverRequest.queryString.Get("package") == null)
@@ -62,8 +77,11 @@ public void Start()
6277
return true;
6378
}
6479
string package = serverRequest.queryString.Get("package");
65-
AndroidService.InitiateUninstallPackage(package);
66-
serverRequest.SendString("Uninstall request sent");
80+
if (!AndroidService.IsPackageInstalled(package))
81+
{
82+
AndroidService.InitiateUninstallPackage(package);
83+
serverRequest.SendString("Uninstall request sent");
84+
}
6785
return true;
6886
}));
6987
server.AddRoute("GET", "/android/ispackageinstalled", new Func<ServerRequest, bool>(serverRequest =>
@@ -79,15 +97,9 @@ public void Start()
7997
}));
8098
server.AddRoute("POST", "/questappversionswitcher/changeapp", new Func<ServerRequest, bool>(serverRequest =>
8199
{
82-
if(AndroidService.IsPackageInstalled(serverRequest.bodyString))
83-
{
84-
CoreService.coreVars.currentApp = serverRequest.bodyString;
85-
CoreService.coreVars.Save();
86-
serverRequest.SendString("App changed to " + serverRequest.bodyString);
87-
} else
88-
{
89-
serverRequest.SendString("The package " + serverRequest.bodyString + " isn't installed", "text/plain", 400);
90-
}
100+
CoreService.coreVars.currentApp = serverRequest.bodyString;
101+
CoreService.coreVars.Save();
102+
serverRequest.SendString("App changed to " + serverRequest.bodyString);
91103
return true;
92104
}));
93105
server.AddRoute("GET", "/questappversionswitcher/config", new Func<ServerRequest, bool>(serverRequest =>
@@ -102,10 +114,10 @@ public void Start()
102114
}));
103115
server.AddRoute("POST", "/android/installapk", new Func<ServerRequest, bool>(serverRequest =>
104116
{
105-
serverRequest.SendString("This Endpoint has been deactivated", "text/plain", 503);
117+
serverRequest.SendString("This Endpoint has been deactivated because of security concerns", "text/plain", 503);
106118
return true;
107119

108-
// Deactivated
120+
// Deactivated cause of security resons
109121
if (serverRequest.queryString.Get("path") == null)
110122
{
111123
serverRequest.SendString("path key needed", "text/plain", 400);
@@ -283,6 +295,40 @@ public void Start()
283295
serverRequest.SendString("Started apk install", "text/plain", 200);
284296
return true;
285297
}));
298+
server.AddRoute("POST", "/containsgamedata", new Func<ServerRequest, bool>(serverRequest =>
299+
{
300+
if (serverRequest.queryString.Get("package") == null)
301+
{
302+
serverRequest.SendString("package key needed", "text/plain", 400);
303+
return true;
304+
}
305+
if (serverRequest.queryString.Get("backupname") == null)
306+
{
307+
serverRequest.SendString("backupname key needed", "text/plain", 400);
308+
return true;
309+
}
310+
string package = serverRequest.queryString.Get("package");
311+
string backupname = serverRequest.queryString.Get("backupname");
312+
if (!IsNameFileNameSafe(backupname))
313+
{
314+
serverRequest.SendString("You Backup name contains a forbidden character. Please remove them. Forbidden characters are: " + String.Join(' ', ReservedChars) + "and space. Tip: replace spaces with _", "text/plain", 400);
315+
return true;
316+
}
317+
if (!IsNameFileNameSafe(package))
318+
{
319+
serverRequest.SendString("You package contains a forbidden character. You can not backup it. Forbidden characters are: " + String.Join(' ', ReservedChars) + "and space. Tip: replace spaces with _", "text/plain", 400);
320+
return true;
321+
}
322+
string backupDir = CoreService.coreVars.QAVSBackupDir + package + "/" + backupname + "/";
323+
if (!Directory.Exists(backupDir))
324+
{
325+
serverRequest.SendString("This backup doesn't exist", "text/plain", 400);
326+
return true;
327+
}
328+
string gameDataDir = CoreService.coreVars.AndroidAppLocation + package;
329+
serverRequest.SendString(Directory.Exists(backupDir + package).ToString(), "text/plain", 200);
330+
return true;
331+
}));
286332
server.AddRoute("POST", "/restoregamedata", new Func<ServerRequest, bool>(serverRequest =>
287333
{
288334
if (serverRequest.queryString.Get("package") == null)

0 commit comments

Comments
 (0)