Compare commits

...

276 Commits

Author SHA1 Message Date
pmow
22ecbee791 Merge pull request #124 from SytheZN/master
RSL 2.15
2022-10-28 08:33:40 -10:00
Chax
e07ffa54ee RSL 2.15
- Massive UI Changes:
- Rounded buttons
- Added version Number at Bottom Left
- Changed fonts to some extend
- Added background pattern to category buttons and MainForm background
- Added an animation when opening/closing category
- Overall darker theme
- New splash

~Chax
2022-10-23 21:07:43 +02:00
pmow
be560875da Merge pull request #123 from SytheZN/master
RSL 2.14
2022-10-11 11:51:47 -10:00
SytheZN
fdf7e409bf RSL 2.14 2022-10-11 23:42:34 +02:00
pmow
d9255bf02d Merge pull request #122 from SytheZN/master
Add public-config
2022-10-03 21:34:51 -10:00
SytheZN
40b88a2d4c RSL 2.13
- Added new config mode for use with http mirror
- Removed previous http mirror workarounds
- Added Offline Mode launcher to package fetch.
- Add splash screen on startup
2022-10-01 12:59:12 +02:00
pmow
c966066c67 Merge pull request #119 from Fenopy/master
2.12 update
2022-09-13 10:16:56 -10:00
pmow
5a1209f77d Merge pull request #121 from nerdunit/revert-120-master
Revert "Titlebar Changes and Icon Fixes"
2022-09-13 10:16:25 -10:00
pmow
fdd1732331 Revert "Titlebar Changes and Icon Fixes" 2022-09-13 10:15:56 -10:00
pmow
e46af16db5 Merge pull request #120 from Chax1/master
Titlebar Changes and Icon Fixes
2022-09-13 10:04:30 -10:00
Chax
9f6a7044a9 fix 2022-09-13 18:07:41 +02:00
Chax
f4c46184bd Merge branch 'master' of https://github.com/Chax1/androidsideloader 2022-09-13 17:37:26 +02:00
Chax
e7bf9ce9a7 Fixed Icons 2022-09-13 17:37:09 +02:00
Chax
5bf13dc655 Update MainForm.cs 2022-09-13 17:28:20 +02:00
Chax
f4cbeec974 Removed normal titlebar and switched it with a cleaner more custom one, should still keep all the status messages! 2022-09-13 17:24:10 +02:00
Fenopy
eecaefff6a 2.12 update 2022-09-13 10:18:38 -05:00
Fenopy
cd0feb4fd5 Add offline mode prompt 2022-09-13 09:32:40 -05:00
Fenopy
42aba1e8e3 gui updates to game donation screen 2022-09-13 08:39:39 -05:00
Fenopy
7d03fce760 - Fix tooltips; add additional tooltips
- add additional logging
2022-09-13 08:39:21 -05:00
Fenopy
177133041e Restore "Auto Update Config" checkbox 2022-09-13 08:07:42 -05:00
Fenopy
b563a1a859 Updater- fix download url 2022-09-13 07:51:15 -05:00
Fenopy
c81081c2cd Fixed github version vs app version comparison 2022-09-13 07:37:27 -05:00
Fenopy
910c62530e - fixed issue with configuration always updating 2022-09-13 07:37:05 -05:00
Fenopy
f20a4e3954 Remove TopMost to prevent "always on top" 2022-09-09 15:45:16 -05:00
pmow
9254d9d2bb Update version 2022-09-08 10:54:43 -10:00
pmow
e8c0c8928e Merge pull request #118 from Fenopy/master
more rclone command changes
2022-09-08 10:52:48 -10:00
Fenopy
3ad5b584d6 Merge branch 'nerdunit:master' into master 2022-09-07 15:41:08 -05:00
Fenopy
84a2132f9c - more changes to rclone commands to fix ETA 2022-09-07 15:40:35 -05:00
pmow
a70fa29891 Update README.md 2022-09-07 09:25:10 -10:00
pmow
79230e1faa Merge pull request #117 from Fenopy/master
multiple fixes for 2.11 release
2022-09-07 09:22:54 -10:00
Fenopy
d1c6ac4bf6 - additional logging
- syntax fixes
- global rclone args
- about updates
2022-09-07 10:14:57 -05:00
Fenopy
1c0fa27d6a - another rclone limit
- better exit routine on quota error
2022-09-06 16:40:14 -05:00
Fenopy
1f41421c56 - update status text
- change server tasks to synchronous
- spelling fixes
- changed threading for sync commands
2022-09-06 15:00:54 -05:00
pmow
1e5c55429c revert version for now 2022-09-06 08:39:14 -10:00
Fenopy
acf7040ba5 Merge pull request #1 from nerdunit/master
Merge pull request #116 from Fenopy/master
2022-09-06 13:33:53 -05:00
pmow
6a60145bd8 Merge pull request #116 from Fenopy/master
Updates for new server
2022-09-03 14:59:28 -10:00
pmow
e74cd11bd0 Merge branch 'master' into master 2022-09-03 14:59:17 -10:00
pmow
6aa70de7ac Merge pull request #115 from Chax1/master
Removed auto updating configs, and fixed one spelling mistake.
2022-09-03 14:31:47 -10:00
Fenopy
1719cdf2e3 - Restore auto-update config
- Changed update config to point to new source

~f
2022-09-01 15:46:06 -05:00
Fenopy
8c528b2093 - Updated rclone commands
- Minor code cleanup/syntax fixes
2022-08-29 15:08:26 -05:00
Fenopy
8270a3d138 - Disabled Auto-Config update
- Rate limit on downloads
2022-08-29 15:02:39 -05:00
Chax
361bec9060 Removed auto updating configs, and fixed one spelling mistake. 2022-07-19 14:24:17 +02:00
pmow
731d5c6f5f Merge pull request #108 from SytheZN/master
update quota exceeded error message
2022-05-26 16:54:49 -04:00
SytheZN
85ce7971fc update quota exceeded error message 2022-03-06 22:24:04 +02:00
nerdunit
43054c2965 Update README.md 2021-11-05 14:34:39 +02:00
nerdunit
8693c42331 Create LICENSE 2021-11-05 14:33:57 +02:00
pmow
bfe6c15a4f 2.10.4 Start at mirror 02 2021-11-05 00:37:58 -04:00
pmow
fb1a16b861 changelog update 2021-10-28 00:24:15 -04:00
pmow
311b9bd4da changelog 2021-10-28 00:21:23 -04:00
pmow
58e1b1d5d2 2.10.3 2021-10-28 00:19:47 -04:00
pmow
9d6eef85f1 Merge pull request #93 from asphalt123/master
Add offline mode to install games locally when no mirrors with the --offline switch
2021-10-26 20:49:09 -04:00
=
275344d421 Add offline mode to install games locally when no mirrors 2021-10-24 15:13:28 +02:00
nerdunit
e911970c8d Update README.md 2021-10-07 12:35:22 -07:00
William Swartwood
eb5df74dc5 RSL 2.10.2
= Fixed issue where same new apps were being
asked for before 72 hr window if not marked as
free.
= Changed 7zip compression level to Store for
faster zipping for donations (since apks are
already compressed the file size only changes
1-2MB at most, so upload time will be virtually
the same).

HFP
2021-10-05 03:30:25 -04:00
William Swartwood
95d4623e6c RSL 2.10.1
= Fixed sort by Size (MB).
= Fixed issue where game list column headers
were appearing as a game in the games list.

HFP
2021-10-02 01:37:02 -04:00
William Swartwood
8c8e97c610 Last minute touch-ups. Changed version number to 2.10.0 2021-09-29 23:01:58 -04:00
William Swartwood
b68903bc92 Fixed Themeing Issues. Ready for Release! 2021-09-29 22:40:27 -04:00
William Swartwood
bff901dd69 2.10 Finalized 2021-09-29 20:57:14 -04:00
William Swartwood
5dc4273d96 + Added code to allow removing downloading game from queue as long as it's the only queue item.
= Fixed code for column headers.
2021-09-29 03:52:42 -04:00
William Swartwood
a7622a8c5e RSL 2.10.0 beta
+ Added code to store wireless ADB connect command in StoredIP.txt so RSL updates will no longer wipe Wireless ADB settings.
+ Added code to prefer wired if wireless ADB is setup but user plugs device in via USB.
+ Added new Updater form for RSL updates.
+ Added new Donor form with listview so all detected donatable apps will appear in a list.
+ Added NewApps list so users can select free/non-VR apps. This will then upload to pre-determined debuglogs server (can be set in custom rclone config).
+ Threaded entire list population procedure so RSL will no longer freeze when the list is being populated.
+ Added Pull to Desktop option if user wishes to just pull an app without uploading.
= Fixed OBB drag and drop and Copy OBB button.
- Removed gridlines for main updates list for cleaner look.
2021-09-28 23:17:33 -04:00
William Swartwood
8ecad85d3f donor form and update form 2021-09-15 03:34:22 -04:00
William Swartwood
4955178426 Started copying new updater form for asking for game updates, will work on it this weekend. 2021-09-10 04:56:36 -04:00
William Swartwood
e211546923 new forms WIP 2021-09-09 17:22:23 -04:00
nerdunit
055481f8a3 Update README.md 2021-09-08 07:04:38 -07:00
William Swartwood
b84727fcd8 mostly done 2.9.9 2021-09-03 16:51:50 -04:00
William Swartwood
59097dd8d7 test2 2021-09-03 08:32:58 -04:00
William Swartwood
cc9dc38eb4 test 2021-09-03 08:24:32 -04:00
William Swartwood
85b7200d25 2.9.9 2021-09-03 07:57:42 -04:00
harryeffinpotter
349c9941bf newest adb, without directory 2021-09-03 00:19:01 -04:00
William Swartwood
7646edcd23 ninjafix dragdrop 2021-09-02 06:35:05 -04:00
William Swartwood
d5976fb379 dragdrop ninjafix 2021-09-02 06:21:40 -04:00
William Swartwood
a93666b2af RSL 2.9.8
+ Added timer that detects if user has uploaded an
update to an app, if they have it will wait til the
set amount of time passes to ask again.

+ When new app is detected user is now asked if it
is a paid app.

= Fixed debuglog/crashlog upload.

= After sending debuglog to server RSL will now properly
copy Debug Log ID to clipboard.

HFP
2021-09-02 06:12:50 -04:00
William Swartwood
e715bed254 aded code to ask every 48 hours for any new app the user clicks NO on when asked if it is actually a paid VR app and code to ask for game updates every 72 hours after user clicks YES to upload an update. 2021-09-02 05:24:36 -04:00
harryeffinpotter
1af1acea40 2.9.7
2.9.7
2021-08-31 07:17:54 -04:00
harryeffinpotter
060cc07592 2.9.7 2021-08-31 07:16:25 -04:00
William Swartwood
d3c012cad2 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.9.7

= Fixed bug that caused error message to appear
when no device is connected to PC.
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEuDXUACgkQx/Rql1Vo
czfmuRAAmwwn2DE1Qu0sDcWFhFF91ApPkjKNbWS1m+Kqi5Zu+Yb1XB3R4U7CVb8n
SfzR3khr0CD9EodJJZkwTmZJYABgNNy1jCp2HsEYG1DhJUfcJ1uIjdwvPqQpqex5
unGiLusEr1WpNp1Vuk9rBvvZOcH1ci/mRWqWdj6W6CLzZ5R3TeN0fKIFJ4B7ea7m
zRNGBA6i3YkP9jbUy16w8J6mYGzvHLg+ZfASG4jCOSyo4p+RQNWhDJEugjw+YImb
vQWiGedfr2c945Bo8Noaul8Pjh61ds1uN4AkobTVWNJIY/IpREFFjY/hoc/fhx9s
H3JPdJi3iaKq0dqhyNp8nlm4sv3y6bX9hXc0YWQMXjkzLg5ug1hHEMIIVk+tS+uU
bf8h+dVshYovE+N+4fjSz+hG9kzE9I6nvtI+gLpTJdxCyCXjjxlldrmuVE6nMd83
bDkKMJvb7Eo9KdIHmxs97TSZcjdfJEazzVXbs+dDmEJ9rGJYFIqydTQ/Pol4afvw
/tr0AmYUxCnkLgufmKjeX3Z/UVAzAs02MuT/Z639YwNoOtvg1bUzwWAzUQLwMdqV
P+d0xJQSEEr65GiwgdSsQY1R/uaGnggTXwIQwmkZPjJuUyNDD6h0zRcEKplDt7nd
jgjJJbVGLafcGLE1OahLlPnbMB24lWvfQM9ST0GuYWaINHCrQcI=
=XacL
-----END PGP SIGNATURE-----
2021-08-31 07:13:49 -04:00
William Swartwood
20e74eade2 RookieList FIX 2021-08-31 06:34:57 -04:00
William Swartwood
d3f9499f03 RSL 2.9.6
=Fixed obb copy for similarly named titles.
=Added packagename to shared zips.
=Fixed laggy upload when sharing apps.
2021-08-30 22:28:19 -04:00
William Swartwood
f99c57eb60 obb install fix and packagename to zip title 2021-08-30 20:29:03 -04:00
pmow
d7074325f4 show version on titlebar 2021-08-30 13:35:13 -04:00
pmow
1ba6fe5260 complete hotfix 2.9.5 implementation 2021-08-30 13:01:19 -04:00
konqi
ee6d62950d down we go 2021-08-30 13:03:01 +02:00
konqi
f8fb2b5483 version++; 2.9.5 2021-08-30 12:27:49 +02:00
konqi
164dc070bd fix false error of dns on start up 2021-08-30 11:09:21 +02:00
William Swartwood
7539b5c507 fix the fix 2021-08-29 23:02:29 -04:00
William Swartwood
68be50b26e adb2 to fix update to new adb folder 2021-08-29 23:02:29 -04:00
harryeffinpotter
6cbe06f394 adb2 for new version 2021-08-29 22:45:51 -04:00
harryeffinpotter
a9f2db6380 old adb replaced due to issue 2021-08-29 22:43:16 -04:00
William Swartwood
4a492ffcd2 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.9.4

= Changed install.txt logic to search
for any .7z files and use Zip Extract
function from GeneralUtilities, should
fix version issues with users who have
a newer 7zip installed than the 7zip
exe included with install.txt games.

= Fully moved ADB folder to
C:\RSL\platform-rools and removed
adb folder from Rookie directory.
Rookie will do this automatically upon
first launch after updating. This will
make updating to future versions of ADB
much smoother. This should also fix issues
caused by having multiple version of
adb.exe clashing and fix AAPT issues as
well.

= Updated 7z.exe and 7z.dll on Github.

HFP
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEsQnoACgkQx/Rql1Vo
czeKPRAAi0l9Ti06d48p0vd6Rziw3mHLVXg5dDOZWyrNULu1Y8axnSCVnZOVduVD
ftY0fVjTNNv7aU+fyWtH2Gr33CtJ6DvaQpj5RIsFiZpiTeDN3cOq2Ina55jtVvEl
ZrBVlLdXtv/L/W3ltrMzc/sNnJhrEfBXq7lNDFMj7IT31miphRZ1X9pgIdqGIpdE
gwcVxxkOu/5PXMzR3+eclpVePeagtJQNBH8dYUBQ9OziKObpzAfVYvoYS94MTYUY
ZdoHP5tfXEsuW0tQ6G1dvGrIi+ty8EJWX3GS42mkPW6xlyKbSOdu/IQa4KFPmpkK
7QwCMDzU5FgxJhg4+j35z/4BxJUzUHeTnp2xQYw/HE+GWdiJklIpZoOeqFQ+QLy/
6jwyhqcPD7cni2HMrCi4HxT0GcuVV5jrqqBAtCHdecglH90EMBCS9DrvmZyw1JgA
b9bCPQwWvVRLFw8HfiybiqVM98C2kW3TUsprGJOcnT6l1SzKlHEwiSMJSTVWshuu
bG8Q19gfhKSLEjTdjKVYV9WDHp8it+lrF6ETdneP4kcSsLhigYSgz0AeETx62Ugh
D13MyxcS6K9XqoRGy5Dr3gL/qkT0I5T6dsWL6vj9o317uexIO9sPkmrGTktbGUn1
heW2jD324PwyuuPxxoqM1lVKVquUIS0Difx+cqlJHY0lWqIk/Ck=
=lZeM
-----END PGP SIGNATURE-----
2021-08-29 22:33:38 -04:00
harryeffinpotter
b5c66b50b9 adb changed to one universal dir 2021-08-29 21:21:03 -04:00
harryeffinpotter
ebfe5ace65 Updated 7z exe and dll 2021-08-29 21:17:16 -04:00
William Swartwood
c242dc6f6d -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.9.3

+ Added new background color for apps that are a newer
version than the version on the list. If you see this
darker background please agree to share when prompted
upon program launch or alternatively select the game
from top drop-down installed apps list and click Share
Selected App to help the community!

+ Added logic for file size column, clicking the column
header will now properly sort from biggest to smallest
or vice versa.

= Fixed issue where Rookie would ask for every single
app installed on user's device. It should now only ask
for apps not on Rookie and not on the Blacklist as
intended.

= Changed zip file naming for new game uploads to use
Release Name instead of package name.

HFP
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEpvs8ACgkQx/Rql1Vo
czc4kg//fgCG0ChVfIVl48I2dww4ZJmRI+sQm/S4Ry38M4NzM+SdKOQVnDFgZ68p
e/z2VqECc4wPlhqrxh+xHoMzlkfrz8LdpsU3cch6jo9uERpaWMj2X1E5jKFRc7iS
4/v6XvSBnp/ZSak3f7DUubNnsCcq6vDH4w1ugzv71AyW9STG7oUXQb+kNQNsQ1RO
WNJjO87RAlHivUuff7wRLlhVKLo21DvZ+MJRmMRzXH5tMxnEGxWeTOkAoWvsDjMa
1L6rmugC9K7X3Qqi09f1ZyUQG6F++fpoDf8u5QB96DegV+IZGjOsBcvL7wE9fdox
RxhFxZMsnQtO4kuo3c/iFg7ohxP+pQ5ayk0IzDRwdjfIYX+w+20LdkGpxsThxHvp
fWZBUCW0nwBFxBjxItXq8dIn7KHsDc3AkNcI2Ox+4eIUoKwuqzr0wCjPaB4dLLLZ
Ofa1tt25ugl7rSTI4doKEH1YmTlzdOuuSKaA2vIMH6L54gpy+h2DkdAQkSEl0PRJ
fApOwvUJqnat/Pipg2PTaJSiZd/lLoImWXdhOdlT2XA/9olD0oLGW/DmK+jjH2GK
Sxd+sLDHUDyujH263yemu1No7+3Zf+iyE+8LTikYj0mVG3SX8tfG/5cOXbQAp2pv
h9CmnbkKBVy8+RXMHKW8MJhsqCS2/wDIJSGYbxwAge3vSe70UWA=
=d6JO
-----END PGP SIGNATURE-----
2021-08-28 00:45:39 -04:00
konqi
bcfcc43956 sort by size 2021-08-28 04:10:57 +02:00
konqi
ab6507965b Now rookie fails if game list is empty. Also refactores some things to make it more eficient 2021-08-28 03:41:14 +02:00
William Swartwood
78b816c5e6 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.9.2

+ Added option in settings menu
to automatically reinstall apps
when installs fail due to previous
version clashing with update.

NOTE: If your USB or wireless ADB
connection is extremely slow this
setting can cause larger APK installs
to fail in rare cases.

= Fixed auto reinstall for signature
mismatch when if ADB reports error
properly (thanks to ADB update),
this will lead to faster reinstalls
in general when there are issues.

= Fixed crash that would occur when
closing Rookie.

= Added check to see if AAPT was
sucessful in retrieving mew game
name from APK, if not RSL will just
call the name by its package name
instead.

HFP
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEotsUACgkQx/Rql1Vo
czc2/w/8DkMuVYLb31J0WyqeIdo/12t+TO0oIbmTvGl8Oi1LttnfH1a+PUBYYXFF
VTEcBoEgGde/Jk7+AblKhzce+uQIzwzU9KC7HL+Ab/1AAj3tdczx2vE4uKTPfMUe
k8XuZz0Qe37IOVUgnHugQCac8jjaDCFXzwoIwADnBg7mW/4Ha+LqxJr/+dsMUnz/
WsenolRWWKyhTj3RHIulZu82yEV9Gw+KfIUpO/XJR71xNdCq1IyrAfBRT8KqgI3F
2IuX/pIqMSMvG1N62rWUzxD67BM5NbpjxiDZKg3LmBo39avqowSGclT7gOP+eiGY
eSvvl+zoI08ofL+8Vonhu/mwnQNUcGFQqqpwAvDIcgE/zVDM9uTVAOTRkrjW0ge2
xEUhpdKZVJ/UzbwnUEyR7zeAkt+sVkEbAD9My7NdQ58eD52F20+yYTAWC6CU8dB4
8QJbJBEzd0Pm23H7iY5F5/7UnPy+rxzfyezrJCKV5u+D65Fn4n13VY33CDxBJW4y
kmcpWwal81mbGgwhWpxK6+xy1V2oWL9PLN9YIkfv+n5/KlqJjUfj3wqah+aUG5qI
X/5mqLAWnsQcM/F0bZXzt3dVszInPHH7jjSjoyKOKQwfVxYrh6uuonVhG7NfHfij
LGs8d6O8osorkiB+2Aiziw8A+9o8fWLmfjeDhFcGc5YTb3eMxz0=
=XRAG
-----END PGP SIGNATURE-----
2021-08-27 05:58:45 -04:00
William Swartwood
ec32535419 RSL 2.9.1
+ Added blacklist implementation to request games
found on User's device that are not currently on
Rookie.

+ Added CTRL + L shortcut to copy list of game names
seperated by new lines to clipboard.

+ Added ALT + L shortcut to copy list of game names to
a paragraph copied by commas to clipboard.

+ Rookie will now maintain games list position when it
is refreshed. (e.g.: After finishing install queue,
when pressing refresh all/updates list buttons)

= Fixed issue where Rookie won't load game list properly
after updating, users won't notice the issue fixed until
the next update after this update.

HFP
2021-08-26 07:06:01 -04:00
William Swartwood
c607d1a2fd aapt badging added to get actual release name for new games, duplicate code put in to ask for whitelist first cuz im dumb. 2021-08-25 02:57:08 -04:00
harryeffinpotter
81c1e61d8b Merge pull request #83 from konqiDAM/master
I haven't tried to get an empty list, if rclone fails maybe it gives a null pointer
2021-08-24 18:09:31 -04:00
konqi
1dc0e38865 . 2021-08-24 23:55:16 +02:00
konqi
19dcacfbbe ask every 24h for game list 2021-08-24 23:52:11 +02:00
konqi
10d8498f1b add whitelist and ask for games 2021-08-24 23:21:53 +02:00
konqi
d3620bf033 happy pmow noises 2021-08-24 22:20:46 +02:00
konqi
467041825c not read header 2021-08-24 22:03:31 +02:00
William Swartwood
fa380c75f7 RSL 2.9.0 2021-08-24 04:17:15 -04:00
William Swartwood
2882737958 2.9 2021-08-24 03:35:54 -04:00
harryeffinpotter
aebc719f0b Added a text file that indicates ADB version. 2021-08-24 01:55:41 -04:00
harryeffinpotter
d21b72758b ADB Zip Update 2021-08-24 01:51:17 -04:00
harryeffinpotter
40cc97aedd AAPT.exe for drag+drop sig mismatch auto reinstall 2021-08-24 00:22:33 -04:00
William Swartwood
9a897954b4 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.8.7

= Added code made by Ivan that makes
RSL load up much faster.
= Added confirmation dialog when using
Upload App button in case of accidental
misclicks.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEhgj8ACgkQx/Rql1Vo
czc+TA/5ARiMcBdvxbKjB6jZKFDGZvEh0IpPyHRJzLpuZhHI+qR91P3UI9fXCrQ6
Vzi6Nc0I3YMhPIpNnp9uxWkNfeIUDTdBUi+wwIpMopupVxLCEJkR7ZGkjJHFWPYn
Hm19BLmmv9dctJwQlPLyaDgnb0+GKDRzZF8xHKBopbmModbhHwnt0UHTmodD4syc
DinfaVpM+RwGZOptUyzwqLR51aQb03JrbHS3gkB40EbsIr6brZd50lahSvVMW8W4
Btc3gf0rig+BrjXgUkNFlZ1PZ+jM1+12dWflYNvMYCoQ7bRc7Kds7IqCiPIweRF1
2YR5jBh52C2ChhY3sfbc8G6VkbXW7N6ktz/11mrIc7Mc7X4ibpsDzQCUyDiuXNwi
wm3ikq5liQYlM/I/awutD8yDcJPGEoUui8wYehwi23Pzujdh74bBYd9F6cQLg7Tb
AsRLvEDY/n7gsDzqdt/oqUkGtt0x4c0K5ZPEIe9pcQvfNln7j/Mf3BNC4HZRkeei
+FIyuhVf/w4dcz3xm1g5060N2eQLgXCk7690aak3l9ucghivUFlrKGe8vRk7qtE6
FebUemHtTgurKz1bm8XCZjfvq0IR7MY+iGgIfKtXbM8SqjxIDhE7P1QuGXeZD9y3
nkjY4+FHkT7BXSlOUpQ/6tR0wGYxtrxuNfwlXKGEqJlzPBbmCAY=
=Zdt7
-----END PGP SIGNATURE-----
2021-08-21 19:21:36 -04:00
William Swartwood
2e151c7137 Changes by Ivan and HFP added for newest update. 2021-08-21 18:44:02 -04:00
harryeffinpotter
84d6b14e36 Merge pull request #80 from konqiDAM/master
Rclone is async at start and refactored when asking for updates
2021-08-21 15:25:36 -04:00
konqi
97d25c8e9c Now rclone is async on start, so it should load a bit faster. Also refactored a bit the code when the user is asked to upload updated games, so it loads the list before 2021-08-21 19:44:32 +02:00
pmow
82cf72c677 typo correction 2021-08-19 18:09:17 -04:00
William Swartwood
3777b9237b RSL 2.8.6
+ Added Set username option to Quest
Options. This will work for all apps.

HFP
2021-08-21 02:54:39 -04:00
William Swartwood
2ed7034284 RSL 2.8.5
+ Added OPT-IN installed packages check,
this will be used to add common free apps
to a blacklist so a future version of RSL
can ask users to donate new apps.

= Fixed logic for apk signature mismatch
automatic reinstall.

= Increased timer for apk installation
failure to 3 minutes.

= Fixed blacklist implementation for
updates to apps already on RSL.

- - Removed 2nd confirmation dialog for
app uninstalls.

HFP
2021-08-20 03:56:48 -04:00
William Swartwood
98dc7f4738 2.8.4* 2021-08-19 20:24:08 -04:00
pmow
12efbac58a Update packagelist upload message, fixed debug exe from 2.8.3 2021-08-19 18:17:04 -04:00
pmow
00cfc35102 2.8.3 hotfix for blacklist not updating 2021-08-19 16:32:23 -04:00
pmow
31d352a79e Merge pull request #79 from konqiDAM/master
ask user to upload list of installed games
2021-08-19 15:51:14 -04:00
konqi
753e1620ed blacklist download enable 2021-08-19 21:48:13 +02:00
konqi
597caad073 Merge branch 'master' into master 2021-08-19 20:00:14 +02:00
konqi
5b04c0feeb adb 2021-08-19 19:58:44 +02:00
konqi
0d0ce30e65 asks user to upload logs when closing rsl 2021-08-19 19:43:07 +02:00
konqi
5117435c8a ask user to upload installed games 2021-08-19 11:17:26 +02:00
William Swartwood
383e721f4b ADB SDK Update 2021-08-19 05:01:53 -04:00
William Swartwood
1aaa19a969 HFP thanks update 2021-08-19 04:46:48 -04:00
William Swartwood
770df54403 Beta version with new game detection, added detected new packages to log file 2021-08-19 02:29:03 -04:00
William Swartwood
3e67b331ef Autoupload WITHOUT new game detection (for live release) 2021-08-19 02:23:43 -04:00
harryeffinpotter
26442e9516 Merge pull request #78 from konqiDAM/master
upload not listed games
2021-08-18 22:34:07 -04:00
konqi
3cd715afd9 upload not listed games 2021-08-19 04:23:33 +02:00
harryeffinpotter
0ecdaab240 Merge pull request #77 from konqiDAM/master
refactored codee to allow unlimited games upload in case user has multiple updated games
2021-08-18 19:07:15 -04:00
konqi
801ec1a874 fix or when checking null 2021-08-18 22:54:36 +02:00
konqi
ebf0f9372b refactored so upload uses a class and a list, now unlimited upload posible 2021-08-18 22:52:16 +02:00
konqi
06c534dc50 Merge branch 'master' of https://github.com/nerdunit/androidsideloader into nerdunit-master
# Conflicts:
#	MainForm.Designer.cs
2021-08-18 16:14:05 +02:00
Harry Fn Potter
04289885c2 Auto upload in progress 2021-08-18 10:05:18 -04:00
konqi
8e7b9490de Merge branch 'nerdunit:master' into master 2021-08-15 19:26:00 +02:00
konqi
cec1ff48fd added Enable Passthrough API 2021-08-15 19:21:34 +02:00
Harry Fn Potter
85fad7d3ad -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.8.1

= Fixed crash at startup related to Upload Date column.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEZPjAACgkQx/Rql1Vo
czdfUw/+PiQ03p3FFwuVIndiDHKvwcjcewDWASYiP2KJkDCsbaEj0U5+ntpu7mxo
ytIFuNZd47CwiYGFXi6IzEO1n9yj4LL3ONnVEogZgd3bP3Bb2b28KDdHtDX3IO5d
wWle/WMksKDywqRyjJnaP9dh+7YS0C/49H32cFokF8S69stPwPYh9LSaf4ctK0/f
y8pHN7tgOkmCR8NU6lOY9OLepBZlv+PcOAco0nIz1zHtwdRGz2vjwQqAa8NShfEy
E/rjBhM37YBULf7cOayt0FY/rDYvw6Bj8B9ht0Bn6dmWgJrhfAj01utREL8HcmPd
rNDXB7UxuR56OVy1f1gh1Fzb5f62xDydfELd/0dFYE0oDcdkHjaEkT5CnAukBmrO
y0ntjawsy40dVAwPwPSAPQ+qP9g7mDZdbjOfgP4JNFWwnxgYLlTASoUMis/hd5mg
FLaFAiMM3o72Gip+gjMl3AiuwyefKoCGfAPgNvRx0t8R3bdLfVJ0KIPpgvJ7ZuD8
n4LEHLPoldDmoshdxl/BiQyLhaEM3W3qkwANVic6/8eCqy/N23CM74L4xgUaQDoq
dvkS3PKuhLvcYh4HkZNhALj7Mavvs0x8/pIGx8bK8JCNOhKX7rGylF6erDFfZ8Ym
T2vN0PjVYS/pF//qKHPyV5yVc5piudCB895LBNIDcJK1b67nUUE=
=+e9J
-----END PGP SIGNATURE-----
2021-08-15 12:33:16 -04:00
Harry Fn Potter
028c44ba64 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.8.1

= Fixed crash at startup related to Upload Date column.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEZPjAACgkQx/Rql1Vo
czdfUw/+PiQ03p3FFwuVIndiDHKvwcjcewDWASYiP2KJkDCsbaEj0U5+ntpu7mxo
ytIFuNZd47CwiYGFXi6IzEO1n9yj4LL3ONnVEogZgd3bP3Bb2b28KDdHtDX3IO5d
wWle/WMksKDywqRyjJnaP9dh+7YS0C/49H32cFokF8S69stPwPYh9LSaf4ctK0/f
y8pHN7tgOkmCR8NU6lOY9OLepBZlv+PcOAco0nIz1zHtwdRGz2vjwQqAa8NShfEy
E/rjBhM37YBULf7cOayt0FY/rDYvw6Bj8B9ht0Bn6dmWgJrhfAj01utREL8HcmPd
rNDXB7UxuR56OVy1f1gh1Fzb5f62xDydfELd/0dFYE0oDcdkHjaEkT5CnAukBmrO
y0ntjawsy40dVAwPwPSAPQ+qP9g7mDZdbjOfgP4JNFWwnxgYLlTASoUMis/hd5mg
FLaFAiMM3o72Gip+gjMl3AiuwyefKoCGfAPgNvRx0t8R3bdLfVJ0KIPpgvJ7ZuD8
n4LEHLPoldDmoshdxl/BiQyLhaEM3W3qkwANVic6/8eCqy/N23CM74L4xgUaQDoq
dvkS3PKuhLvcYh4HkZNhALj7Mavvs0x8/pIGx8bK8JCNOhKX7rGylF6erDFfZ8Ym
T2vN0PjVYS/pF//qKHPyV5yVc5piudCB895LBNIDcJK1b67nUUE=
=+e9J
-----END PGP SIGNATURE-----
2021-08-15 12:20:03 -04:00
Harry Fn Potter
7923adb4fb -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.8

+ Added modified date to games list columns.
= Drag and drop install will now show current APK name.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEYjekACgkQx/Rql1Vo
czfNHA//duDNUGGUEaITUfCpqfVPkrd/S/EcPAztVw0AP4eq+f4Nn7tu5JEuhXf4
M2hg7kQhXFc6H3WadI/Code26AgL+qomLeR3nqSGwGt2jzBsTqXJo33KTAOP4/Br
GiyUh4ijPfDgjTOYuUApR/w/hNhYw/rWwiBrtyhnErGEQcge90U2fsJJdlO/zvdX
HfhbJnDCd6OKWlhAJDJyp6HZ4P0Nzoyo1stit+agLGa5YzT71ZYAVuKNVZtrrD68
ZZY3Atd+c1fuNRi1q7djC5v4KoikXAZ+xbfT9YN5WVQETKHIVtaEuw+LtCSIta8X
aU7bntHUkHghHgZagFp9eQ5442sHYQ8yXBhZ/nMM3prIllPHsCNSZ/Xun2FjkOVQ
cDPeSg5QH5eWH8huyxPGIahroiS99MJj67HqN+kWYwmKqL/FsP2fpq3KNFO4Myaj
vbT1QT2VFE86c34Pnvk2wFAZl0uh/h1gcH1ZLYHcibTsBlBCyVtAEu4P1d919P0T
8tWinS5F8as/VEsLp1gu82z/CyXPhJFgamZcN887C1HgtkyYQYqQnXNtrijjwR1x
07A+A1K6hFqE0v4k/IfT+rVlKRDo5PE2PGIcStTskheVeE9dNzpKoI/eKr3bFdLn
43MQdyJJJcc1Gm14zN6Oq5dIsMqSRyvmjy+ihIu+UDc777TIW2E=
=FKLT
-----END PGP SIGNATURE-----
2021-08-15 00:55:10 -04:00
harryeffinpotter
4b9d00a042 Merge pull request #72 from trainwrck/modified-date
Main table: modified date
2021-08-14 15:02:19 -04:00
Harry Fn Potter
0df0384f96 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.7.2

+ Fixed automated mirror switching to now try every
single mirror (instead of stoping at highest and failing).

+ Fixed BMBF automated drag and drop (zip/zips/folder of
zips) song install. Settings is also now OPT OUT instead
of OPT IN. It can be disabled in the settings menu.

+ Dead mirrors will no longer cause the gamelist to fail
to load, instead RSL will move on after 35 seconds of no
list loading.

+ Simplified Wireless ADB messages and also made it easier
to enable or disable wireless ADB.

+ Fixed bug where if mirror failed it said "No gamelist".

+ Fixed bug where if mirror failed to load RSL would ask
users to donate every app on their device whether it was
actually newer than the mirrors' version or not.

 HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEVXukACgkQx/Rql1Vo
czdLaA//ZBZ6ar5Qxlg5bZ409cSCRT+9JRBWkH7GRZZ4X2aejgesHXkcsF9L+NRo
cUjv/4s+lWCScY3EvzJg038Nr9zXUsZYdCfJuT1f3P3uBvEBP+XdtB0+1+bnSQnX
QhjtyP0WwJJqDhiDINB0DHycHu68sGmvaqZXoksWkdrtU5xDpoOw540nkBhIEHTb
anFNUBEdGsjafVj6ZhZ4dYOpewVsV+VJZbg5J7T7z/ZdYZunS6fTBjb7ho9CfnpF
GaTsGrwf03GcBBv13wYkl5UwO7TZiv6U+hUDOv0bkHGmaSQWbto+1Nt5GEo7SPMh
qOiVvLH0vr6RuLLeaKo2QGzKcOgr4sSSXfQFp70yiQGEP/UlIHGBXqRyJ0x/hAtV
yD7ynTpVpVw5bh939lpmjtw2VHNoOzOG9fky9tp61jQSIjDYWGP39Ntow9fkLWyC
Em4pHwHih1aWiHV91kzupWdSKIk8KKewcNIKXmxvV1A9zc6cxxyqnvYIcbOojg0i
d10UmyF+Tjm5bVH5U+AVwNeaFEZiI6d4QrLgTDFl3klyunCj2FWPdJmCvUPxFSzV
fRB5OWgRWnWB85tb63geNTJbbJURH1TJ88PWFn/3opgOEFTDu4UkRiuK6VviRQ8D
F95CsnuCrHRBwBozozv2YHJ8rCi61i+vmXi95jPAVMQd0OmsR0o=
=nH4m
-----END PGP SIGNATURE-----
2021-08-12 14:02:13 -04:00
nerdunit
418a5ebc33 Merge pull request #74 from PaulIRL/patch-1
Update README.md
2021-08-12 08:25:51 -07:00
PaulIRL
43e2343676 Update README.md 2021-08-12 08:22:29 -07:00
trainwrck
5402dadbd9 Main table: modified date
Added modfiied date to main table
2021-08-09 23:43:30 +02:00
harryeffinpotter
8e3faf4682 Merge pull request #69 from konqiDAM/master
Second column now is wider
2021-08-08 15:14:06 -04:00
Harry Fn Potter
26db46e844 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.7.1

= Fixed apk path for in-place reinstall. Should work correctly now.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEOGwkACgkQx/Rql1Vo
czfPHw//eXtKkM1g/mjz43/BLTjhT1PTrwvolCmds+LzMTHT1EfDyouJBZ2XxnXQ
NiZkk9SR3m/VmJSr0FO7p7F9Ab07xEUIv280C7Mbqyr0KEPiQTvrlnL/eX4sx/Px
1pmDCuPUL42u2zo4famGxDvduoVToyPrIzzv3QYt8qJGEAYRG4gtn26SB38+JslU
eU6hJkB2E7BNZXRtpiDM7rsejOtzsIROdLeIztSyIyTl/sY4Az9nfgRiJFyHsPsJ
ILRRkquCzkXbzzdjS8AqPPIzt+JZdp+ZZS2H3gSeld4We8rkm5CzBef7pzeP6ZKZ
WGYnw1Et9dtflSAmfDb6i4Rr5Y3mPLk2OzIeYebZ0fCGmyrpJ7QlRfYqJNJ7JMH9
DOmsSNVUvFRR+b0FnT414uSg4Q79cYXWsJ/Wi28PIOQF0nQwtPIKly2x1kB4NE7P
CItXy8VJ//q0/2ijHB3ZQIiMkj78TVePCAC6TQT4RnBgWS0HeItBKZJYCcyvhe72
6H9qzOVsIKHgxnfbRON9tZOWxpxIdnbFsaE5TsiXp+80SsaHhxcxuAyjh0M0CaKu
lh3z9FJmZW8CrxIA1G1sQePxqF3iObVhqJPqp8G7N6UC1wBnhJWmnBKTYm1iHs6P
pj8ggpyFTT55UxGeRklLUyoSxSnqSE7Oj2zluLvBFHPi1KAMlEg=
=HVQ5
-----END PGP SIGNATURE-----
2021-08-07 01:42:59 -04:00
konqi
88bbbb2ced Merge branch 'nerdunit:master' into master 2021-08-06 20:54:26 +02:00
Harry Fn Potter
d02505b172 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.7

+ Added BMBF drag and drop option for Quest users
in SETTINGS menu.If users drag and drop BMBF song
zip files onto rookie either one by one, an entire
folder, or many zips at once Rookie will automatically
extract the files to a folder then push the folder
to your device then delete the extraction folder.
+ Added automatic timeout during APK install that
will ask user if they'd like Rookie to automatically
uninstall and reinstall the app. Rookie will check
for save data and copy it to a folder temporarily
then put it back after reinstall.
= Cleaned up startup tasks so booting Rookie should
be faster.
= Added automatic deletion of previous crashlog to
decrease clutter in Rookie directory.
= Added automatic installed app refresh after drag
and drop.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmENfVMACgkQx/Rql1Vo
czcxaw//bTVxR5gt1F4c+gDT80dVfJa1Js3h5vSjGgCHjQdmsU6eaU5BQGoUorkw
6ewYF48jt84xDNj/VirkeqHV95mvsj9sksi+mxvELnAa0NdRVYj0DCqZWB/mNDfx
lYZGp2SwiGK3a6KfMpPcbi2IEWqc9ZWpdazIDy6l3oGSBAYaoVqfjl+CJQQpomIJ
x7f67Ei633dyhu8+0612LVu+tZ4ibN2pAAu1Dd5+uvlODUiYLPadhZkLwk+CYC6p
ifs/1qB/fsXJS6YJyPCmuZCbYN//jLCD9ECQ5cqZbTTU82Ub2lDE+TcdO/CsxSxU
pueIxZ+7C5TceiNzsDfKfeCWu65hZlBW1xKReDtLPFzZdZuyXYTI0v00kvapwJIO
C9Eq2qxZvdnp05tw8nY1V4Ae5Jl6oLN0BwWSZv50NhQ4Dpmbl8pemk1r5iZsRhGA
MWQCytBCaX/3EpJda8ifGJxj3kOno2ewbwXdZEMN7QqWt1scN9HxNXFWEJwO29HV
pT6ra3T0OrOBLmCQGt4w71HGFK2t+c7aPq0yI/sayguB9zjR/GpTyekg7nHXZh9g
c+WD5umN2xA0LuLjvvePKhhKTBT6ebmQJh1CRNIRtA150ULbnTAIpZJTDZyhcLXi
IUfWyWPA4G3GsRUqGWf97O2G2bIbbIzLeg3uEdxF7T9LOigYgpU=
=Rwj0
-----END PGP SIGNATURE-----
2021-08-06 14:41:09 -04:00
konqi
cbd54f7319 column width set to 270 2021-08-06 16:36:18 +02:00
Harry Fn Potter
258c251567 2.6 2021-08-03 17:57:33 -04:00
Harry Fn Potter
1f851470e0 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.6

+ Added No Device mode for those who wish to download games
overnight without interruption.
+ Added automatic config update at launch.
+ Added a unique HWID generator that will generate a unique
number based on your  PC's components and then encrypt it
with SHA256. This is so donors can be anonymously identified
for the purpose of future benefits/recognition. Once.the HWID
is generated RSL then creates  a text file named HWID to put
with the  clean files in the zip. Users can see their unique
HWID at any time by pressing CTRL+H  in Rookie. Your unique HWID
will always be the same.
= Added version code to any zip files created during clean files
prep.
= Added boolean to check if user has been asked to send clean
files, if they have it won't appear again for some time.
= Fixed OBB installation for Install+Download.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEJuZYACgkQx/Rql1Vo
cze1yg//Yyw+tRfA3hLxLQejXhj/LyFsGOoTCyqTVQDuUtxZxyMAFUN3SCd5sC3h
byVpcoDMaBMGoOgE3FnpEvObd3SHVaB3xqw902saHPAhzuujv4Ru25ou+xRDU8c6
+xXPQ3O4ocgHwlFP+nCVx3eXai8Dz/2OUc6JC2PfpjU/xj3B6cs/ExSrxoHqyCJL
g5lntpE0dFQboe6gu7uEQn2Qal1Gsn2+MqCqQZh1dBIpF/gEPD8/q40St/lN7cdY
jm1lVxW3By7muxlh9wcRYsxQk78cb49+Vsa+EcxS6GK0m8Hibp8nS7RoHFMBtC1i
hgIZW5lt1cCj5WlwI3/t+vLR4Ia/eh7Vi0EiyVGhiOIQvCR2+PpkWWrVDe3zoXUX
n68zFZlL2yoaCXg5AWPp3KiQff3uxlBD58fzNZRtKzjFPNmcYR6x7PcHfai76+JD
aE36aC8Q3aMCaIaH+gH+eAhl+mzyX1Vhdl9NLLHLUXZwBnSA9drMHJsVMh6SOQiC
VMiv1vMXJllKq/7W7EGr1fWFGuPJk6FFjT1g+3+2d71yVKyPL+99JQg7UJzp112w
7ZUAD6Wt8lpW66I2zpcOBPwpoAlxg2uJy2Nc38axfrBpHsscNrYIXFMHEprLG+Xk
PqnfDHPtP1sUxe2uiZTQj3JjlEnb4ES/xBdvSPacc53+fBPs0yM=
=BAUp
-----END PGP SIGNATURE-----
2021-08-03 17:53:27 -04:00
Harry Fn Potter
0070e44917 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.5.1

+ Added PARTIAL SEARCH compatibility to Quick Search. Quick
Search now works if users type one word or one part of a word
that matches a release. For example if an app was named
"Supercool Awesome Application", typing "Application",
"Awesome", or even "Cool" would work as it works with parts of
words as well.

NOTE:As a reminder you can open Quick Search with F2, CTRL+F
or by cllicking on the Quick Search magnifying glass icon.

+ Added a blocklist for apps that can't be updated for various
reasons. This will prevent users from being asked to send apps
that cannot be used.
+ Added .png support for gameslist thumbnails.
+ Added tip under Notes section at launch to remind users they
can press F1 to view all of the program shortcuts added in a
prior update.
= Some minor syntax updates.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEGqr8ACgkQx/Rql1Vo
czftJA//ePxg5+fuAoYNfl2D8yKpzhkvQldkdZia1GJiHBb4CJBwdhMDpDeNhKzO
ziJ5yBNLqx6wWSbHV70PF4fagASA81FeLbJxdJX4gFgtX9MpzoR2ppK+Gy1UYVGw
ij1fjQIIIHXyAVDgaS4DcRQrgxtc6R2G3iey3EBaxtaWDh2cR3sWdR6QMcZSJ/0S
/QLXROCCCIHc1mTsf37b2qQVQ/v2Yk/UAGSV6/VdN78QE7Z8dPqCLZvM+10mfXTE
AOJ6WkZBVA7HkpRgEGVtTLor+kwDROshkq+eM7yMREFv6GwHtd5H0hHGhRr/FoVW
E99TfabD9Rd5P7tvcYm2c6Diu7yz2ai7l7N6G77wr+lOfsmIniHeUYEWsPOcZHQH
P+0Xvx84cHj6Dd2+zfCWcI/jPamfgzgxrBS/pSXJ5ktdrCiJRnqeU9FhJxhGF002
7+iIZTumhAU4ab8LhSzkMg+hwhzTrhmgbeZE1jdwLiLQ3vyYszEB5zflubt86pLq
WXVvupQKtCGek1B3ETvU2YzNaQe6vVjqrh0sHkwgYgwfhLg9+gc+c3Rtq6ighqfc
KNDocmVcNOJMNkre/DOTmVU6ULg22pXlj0PgWkxph/vt1SegMbPMVGUJD0ncIqL8
eQbzNOltkzALWel4S2Itvv/JgoDU1YDupJmZNh66ihKBuIdcT0k=
=wU75
-----END PGP SIGNATURE-----
2021-08-01 10:27:04 -04:00
harryeffinpotter
596e126d2b v2.5 2021-07-31 11:52:12 -04:00
Harry Fn Potter
5a6ccf423a -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.5

+ Upgraded Extract APK from device to Extract APP to Desktop. RSL will now automatically extract the APK file, then extract the obb if there is any for the selected app, then it will compress both into a zip file and place it on the desktop so users can share their apps without issue.
+ Added automatic detection of apps that are more updated than the database user is connecting to, and if they are a pop up will ask if user wants to share the app.
= Fixed issue where copying a folder containing an obb folder via drag and drop would cause the containing folder to be copied to the obb folder as well.
= Changelog.txt now only contains the 3 most recent updates including the most current, the older changelogs can be found in the ChangelogHistory text file.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmEFcMEACgkQx/Rql1Vo
czdoWA//cbngmK/it4fy6Hy/5JMGubJvCb0Ar+KY0UCO5FR60Q+ADCrkhPDEaWif
xnM+h4CLqyHUD0NipUxsjZ4j25VRMA20eTy3jiLKSZKq6P6KD+oRv0Tx3vTEs61U
wJdQsWK81cC9+BnhCBDuWpDJ/nCqO9ZJBYdKX0+KuYTVZwaaZSfMXD1dgQsrCQCq
zU5kgrsl+LDUJknnpfda521pbACgHlZ/Cb3bztqgnSviF38jFuYsJe7hJVjsINYz
j6HtmT+vn3Rxhk6uRTtUNhM1YVvuKzsZtUNvqd7cjT3FJXWuuoP8mgdauSahVnpQ
jMLu/dMLx0PkRXox/D8/69tDA1dxNZozXvws0OQfmNlzLfLGPZdVSWVjfU+P0feA
hMZiVICyAAJPnzfNAfVq2yDpU5wJbAhj3qG+Lj9Ox4dpmn7AUrjoUCFZxhZIZJi1
KKKz+7Q9ZDkcFODCUzZAdrI0MP7MNrsfPl8jxSCLYFe6LUIOfTAakBkxOY9x02lF
x08jfbpAsJHU3Wm8bruk+nkB+65J5kqsLkJk2n4yrkW3QtIo9xul/z9vgZKo75S6
LkPCpNo2w5gtx7+8Jv65Z/BlueUVmVWUHhQ2gHRkXenkg3McEZpqwKInqQSZkHpZ
USckVtW+iteVVR0yf+hFPRGp+Shz6/GIn9YnwVQCT2DK+ih9zD4=
=0bPq
-----END PGP SIGNATURE-----
2021-07-31 11:50:15 -04:00
Harry Fn Potter
efadb70d72 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.4.8

= Fixed wake on wifi prompt after enabling Wireless ADB.
= Gave user an option to back out of automatic wireless
ADB connection restore after device is rebooted or has
gone idle.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmD+JLIACgkQx/Rql1Vo
czcd7Q//TbRjq1ePpP3PFUm+IDFt4HRnwFOyuS8/LVOh1FPUc66vXEh/BtzK5xgN
ZPe4QRojSnZPzizkqzMnsXxhiFlwu+3Y3uA+S5JmdisfE0A0DaU9JBNv0IPCsQBG
A3azgQrN/8waq+R1A/uK9mvcO1033cTV8SkTRIWqBSjcOBT+hdvL4UngAPgrYUvp
GqYMx4/qNq8SyoYkY3VCN4LtX3iswPQkHxjwT1LB08gltMP7Hoxpaz5B1QJiC0gZ
NRAWEOMSuhdZC1X87lo08hPMwUJrt12PDzHrrDjOz8eUSUtEqjqKHY0HTpyJ5wvK
i5t0hvVC6bwXIRKeI7I8RESqGYoQYAoQDOHWMZ2fgclYOwjevMaE/1qbBpOmwBgz
3g2UM7OH5DU2b+4Er+lrHEZSplVdC9fjifGEUjm8sD2Q+sW8PaJV0wtAMYy9mIzd
pTrQE7rYGYllPJ8XAhzzLtGYXCwlrBeMdYhGjxmVet4+dtMEXAksemIq24PNxp2M
1FEcM3+jLpi0GJ+PBF9qSR70ZrKwmQcgu2miVVxoYrRA5WADp3fI5VxbdAqxwOgl
3SrI4htTvu2mBQ5x6wiWVXsWbEsDvCnx2+46FWVutdEc0QKGsmcm2znb6VjBc+Ho
w3osj+rHbWYArCWjEYdezsP1aPRAs3Uly5tJrg4Q0wd9lxJHiaU=
=ljkJ
-----END PGP SIGNATURE-----
2021-07-25 23:00:26 -04:00
harryeffinpotter
b1595931c4 2.4.7 2021-07-25 06:13:39 -04:00
Harry Fn Potter
1e3a9a5a84 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.4.7

+ Added battery percentage to stats on bottom left.
= Fixed using ENTER key to install option.
= Fixed  using Enter to install from Quick Search.
= Fixed install feed message when using Enter to Install.
= All important message boxes will remain on top
until user selects an option..
= Settings form and Quest Options form will remain on top
until closed.
= Fixed changelog formatting so updater box isn't so wide.

HFP

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmD9N54ACgkQx/Rql1Vo
czfz2g/+OEMxQBKrmWaeXpe4CD1jXs92P/JMU6DPBepNNiKtE+ltX1iG/I1Ft/04
JzFLJqqQsVKP9HceZBkNie87C4YdTu5Z3LUEOS626IVlEx1t0cxXilsVeXWrFSSJ
IyAgRbXZKQRVF+nhR0yXLUSjAQqlxLTuu9kxCXOHBPSqw+MmDCukUat9SoJUFpRO
+bteP/Y+ihUHHaBcD9AizJJpTzuCgKrKUtyNDPcXPIcOoosx459+tsG+mOAilEay
UHMwQoe21//mJJSsaCPPNYOWkY/BV1JNA4dDE+eBoK02U+SXVyh50eO1LFlV1wDd
0XL0O2npdVKjhszpWk2LuyErhaRB6EDMJvNvA8RgWHMF8gR20NPPM183ui79XRr1
bPpAXWbNEVn1OOOcAD+wTwLB6BCc1ryuI4zTHejQufWLQdVMaWKxhREo7bqTWTh+
4WPLZEC3JOy4uODb2tTJLz0qCBaxXNdr0usVxbO5OaGSKOBsJ2GsBlfBTNCr6If6
tMMi2DXSTYAuIgESCqFo4cEz2YGEmOrIqQ7nx9tBhGV2bfnClBbbiYAmM15ifRHG
QHmGhak7h/NFTawOGrS4BV2HfViBR1ef7FJ9v3T4chVJN+ED9tLpfMNKuTLOZ3at
dwUOnA4jfDJL2g5YV8ebiAzPS75FSSrQ2wfcyYYyywTdlBc5K58=
=0eX4
-----END PGP SIGNATURE-----
2021-07-25 06:10:49 -04:00
harryeffinpotter
e0e9a68cb9 2.4.6
added colorblind mode.
2021-07-23 18:35:14 -04:00
Harry Fn Potter
19c90f0ad4 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.4.6

+ Added a colorblind mode for the update list. It can be found in the SETTINGS menu.

HFP
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmD7Q1UACgkQx/Rql1Vo
czeuyw/9Grjaeaz0fpM1eq4luU2sKUGReCEjRzZlWv++KqJoLY5BxUZ7rkrrb5jD
oZ5yK88er1lgsii1YBMBjr4ub7K7LEJ13KCagCUJX2wjG1FUGbGtiIdfFf+ryFky
2+OfA3thCxmVCbRRHKzYQ7fks0rd1D62S4qQO/xFE1QbckPSFInLz6wno++WP4iT
Ht7g4us8IKs51kGbjGx5EuA9suG5bDQrrx6QoUMORIEGMVJdoUX286KIUpS6iy1G
nMS/kQePg45+2Y6GDDgCtfRDjqie4J2U3UpXaBQnYAr0tcW116Q54VB9d6aArmKu
DfC/JnUCes3eN9Y/vxHXytoy7RLy+VRQiZw0C6deX4N+XrmPXSGsZboU/YMpFKsV
/6q5EXc0SPDK409HSiFCi5GinIp8mnuGJnIRcwWFFxU9kYBMOjTBA2wHSEcneoZa
8aDYd0fTLNyh/W/vwYnH989ihXWg+reHAyeGym+0u9TUqeWAwbGzyoYaLCri36pK
Pp0pQGOQgt/+s+9evKtMt7YcvnadvdoA2FowVp71HlR23fZb9yLctRPI/cJd6U57
3DBOiPJDb8U4pCo7xf3GZgluBRc/KMGqMysi4S3Hpez2yZ68gvGJh5F7f8OVyGHt
CwVhODnbDlX5W8hYMF23K4B8zSaZpnVJQXYQS5SCzPagg/Pbt8E=
=Glvg
-----END PGP SIGNATURE-----
2021-07-23 18:32:26 -04:00
harryeffinpotter
bcc7499807 2.4.5 2021-07-21 16:09:57 -04:00
Harry Fn Potter
0716ca27c4 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.5.5

= fixed issue where removing userfolder from adb command changes broke install.txt

HFP
-----BEGIN PGP SIGNATURE-----

iQIyBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmD4fh4ACgkQx/Rql1Vo
czdrvg/3ZzJNCs7+G7Nq4jGNWokm8xNPD8b8YY1zsZy5Vbort0OQVwL875E2UvpS
HDutQWKi9LgUsKRqgXm0T/O/11jTkYqGWowFa9lvuhmFYNiHo+GXirA0Mcsjoxbm
mNp8PI3TE9NjuDj55P4LXXv4v6qngzXsD1A+EqXq/43nKhuv/QWq2rrG52P24MLE
cCK8O1Ir2S0ZpZH5Q/WoeiBJRID+j/ydVuJaXpC95SoBN9TmbSEnAh65gZ5P4eiJ
oYSvgyNtG9y9I5vjTOR3P4khhWhA0NQBNiQPPdi3LuucYcTdKsQb3y3BOQ8ei3Yn
tHxA73Xdfk0mbSlk0GggSUKOLcD4Ij4QQsva4YwG786J2qGf/QvKC0ujf5B/ezzC
bPmWPVl9qJJ+2CVBZ1DuUP/G7+teEz4IGo9VTgiqiwUT61mRv8o7CIdG1RYCNobo
yMX+cHB08KgUb8NE26NrjEm6mqd4AWgvL4Zj/OdKTBdZ/R02WEvQkJgLRji2AZqn
f35TyYxSW64vhOCk1nMpcSJzGfRV0MwA3UU9WOko33ukikXp22dTXtT0LMY2qqZI
vDS7eXHHLI+ctb+gVNms7FagQbDYChSRKy0S5EX6e2EkBGz6jVxfg2lXNfkTHK2V
K8YZkfI5Rx/PKc3pNDIIrdx6h/ya8eEiBCJZ6scLbJvyzNYpfw==
=jTyb
-----END PGP SIGNATURE-----
2021-07-21 16:08:34 -04:00
harryeffinpotter
652d7cb290 2.4.4 2021-07-21 14:13:59 -04:00
harryeffinpotter
919286f85c v2.4.4
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.4.4

= Updated logs to remove all instances of windows user folder for privacy purposes.

HFP
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmD4Ym8ACgkQx/Rql1Vo
czfCuA//elSOQ1dUQactp0BZ7cdpDcgoW4YwpEzddc96PwVYULsRxNnREIWKTrjg
2IGDhR53M9kTpsQ51lFwn+IAanKSl7dTsMh+yJDuZenKJga6eECaxiDHPu6JWnQY
Hy/zA012f8qoMfK/w0Ti2X3ITMtHGDqhewU9KdNGQNuAp8bH8o6lyqV01QFvyts+
FTGVB/76I9/OpffDX3fTxTS8PYJvGNAArowAOvYFhf2JcjdjpULo/oH9BVAoCoGT
8XmTYU/rAukmpWy3ensq0FxtjdD/tJt2NKgJcEzJDpkuxMYdzWUW7Sum+mexyX7k
VErW/s3w3rUHM/xW7NZgmRcpAqSRwpvvrSFxAKmGXNxEYmWrJ1jM5Nt6zjxzgk8J
0W7v1M+e/qoUz1HB42Fk++lWENhvZcjJkdRIh8NfjufiA5jc0cZXyZMJClXvMA1K
kG2PP4OqPnUNZdSPUafSGGjKlkr35tRV8SY1mx9phnMGgMZaVk6V0TPKVjHTfSsV
FBlFBuUl4EoQUz5bKUNhVszz3Y70aTBRk2M31GjojaBpOrHIj2Z0YiWoFp5maD2o
cfQ4HjhHAQAqyoD4ID9phgP9UOa0T9eoc1otkzCfRMAkBPS2DysFPpqNCdKOuuJy
gtfsvQxhALWe1qdDohIOekb2exmKj4NREGI5UjtgT+7Uf13s0Jo=
=8ePT
-----END PGP SIGNATURE-----
2021-07-21 14:11:27 -04:00
Harry Fn Potter
3be98530b6 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.4.4

= Updated logs to remove all instances of windows user folder for privacy purposes.

HFP
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmD4Ym8ACgkQx/Rql1Vo
czfCuA//elSOQ1dUQactp0BZ7cdpDcgoW4YwpEzddc96PwVYULsRxNnREIWKTrjg
2IGDhR53M9kTpsQ51lFwn+IAanKSl7dTsMh+yJDuZenKJga6eECaxiDHPu6JWnQY
Hy/zA012f8qoMfK/w0Ti2X3ITMtHGDqhewU9KdNGQNuAp8bH8o6lyqV01QFvyts+
FTGVB/76I9/OpffDX3fTxTS8PYJvGNAArowAOvYFhf2JcjdjpULo/oH9BVAoCoGT
8XmTYU/rAukmpWy3ensq0FxtjdD/tJt2NKgJcEzJDpkuxMYdzWUW7Sum+mexyX7k
VErW/s3w3rUHM/xW7NZgmRcpAqSRwpvvrSFxAKmGXNxEYmWrJ1jM5Nt6zjxzgk8J
0W7v1M+e/qoUz1HB42Fk++lWENhvZcjJkdRIh8NfjufiA5jc0cZXyZMJClXvMA1K
kG2PP4OqPnUNZdSPUafSGGjKlkr35tRV8SY1mx9phnMGgMZaVk6V0TPKVjHTfSsV
FBlFBuUl4EoQUz5bKUNhVszz3Y70aTBRk2M31GjojaBpOrHIj2Z0YiWoFp5maD2o
cfQ4HjhHAQAqyoD4ID9phgP9UOa0T9eoc1otkzCfRMAkBPS2DysFPpqNCdKOuuJy
gtfsvQxhALWe1qdDohIOekb2exmKj4NREGI5UjtgT+7Uf13s0Jo=
=8ePT
-----END PGP SIGNATURE-----
2021-07-21 14:09:58 -04:00
harryeffinpotter
b4e21a9d5b 2.4.3
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.4.3

= Moved nouns.txt library to a more suitable location.

HFP
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmD4T5kACgkQx/Rql1Vo
czd9Ew/+LvPnoSuNl3ynFRAjTs8Yo1r2FCY82UfWLLddYTc4waH4s2HZQkUyFBGo
emkvZUa/TZuYGzNLAB4JpPDYYONyF2LmOx8z0Pwtp1+RoEJbGe7WsZa3oF+PQ2AU
+1+hE0u8RW546uaGdzyToX3N5JnPAA2MctG0+3X5J+k8C+CHWgMJyoDnoz62b2Qb
gER2HZMBlrebJwSJto+tKeLRDk2FI4UmQDu2CQpvlwkQMwa98ORRrulaO4LOEH3I
z5S6WyxlcF0Cy4dwD5PVsx4YTHn7Rjy9HHniMYe+vv7LQOz6w+DZZQv6x1BZ2xSF
ZqS76T3x5XAVpcH2JX7gce7dTFVpft/P/C/vOVAa8E2pUp3stuUFoIyVoeWPwgvJ
3wkJFeoG4umlLQZY934Mb6Hb2tu38xlcQd/xsO3aZRPUOZBuYMcbpf8V7qv7f+p+
YDSXwI92ostB3RNkXlUy2onSWrXoLQF70lq3zaNcUeyQt6HILc80h1pXC6VWnITz
RRH9ojt6CWLyzIXKgqdKWKVJJQ5GIR0YITk4kMyGqM/CP3pUPCUKPAVbWK4ajoGA
1A2JBniQwYmCj+vkfQDpwkacK3zmYy/JRpTYdyj7BuOXjGnPpberjdd+jpgGBRCH
IeOpD/kmWaKm5lH1KmEOPGe86bhpQstOba7EsiBM4/x6QpoqVOU=
=yWnO
-----END PGP SIGNATURE-----
2021-07-21 12:51:17 -04:00
Harry Fn Potter
6d3885dc48 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.4.3

= Moved nouns.txt library to a more suitable location.

HFP
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmD4T5kACgkQx/Rql1Vo
czd9Ew/+LvPnoSuNl3ynFRAjTs8Yo1r2FCY82UfWLLddYTc4waH4s2HZQkUyFBGo
emkvZUa/TZuYGzNLAB4JpPDYYONyF2LmOx8z0Pwtp1+RoEJbGe7WsZa3oF+PQ2AU
+1+hE0u8RW546uaGdzyToX3N5JnPAA2MctG0+3X5J+k8C+CHWgMJyoDnoz62b2Qb
gER2HZMBlrebJwSJto+tKeLRDk2FI4UmQDu2CQpvlwkQMwa98ORRrulaO4LOEH3I
z5S6WyxlcF0Cy4dwD5PVsx4YTHn7Rjy9HHniMYe+vv7LQOz6w+DZZQv6x1BZ2xSF
ZqS76T3x5XAVpcH2JX7gce7dTFVpft/P/C/vOVAa8E2pUp3stuUFoIyVoeWPwgvJ
3wkJFeoG4umlLQZY934Mb6Hb2tu38xlcQd/xsO3aZRPUOZBuYMcbpf8V7qv7f+p+
YDSXwI92ostB3RNkXlUy2onSWrXoLQF70lq3zaNcUeyQt6HILc80h1pXC6VWnITz
RRH9ojt6CWLyzIXKgqdKWKVJJQ5GIR0YITk4kMyGqM/CP3pUPCUKPAVbWK4ajoGA
1A2JBniQwYmCj+vkfQDpwkacK3zmYy/JRpTYdyj7BuOXjGnPpberjdd+jpgGBRCH
IeOpD/kmWaKm5lH1KmEOPGe86bhpQstOba7EsiBM4/x6QpoqVOU=
=yWnO
-----END PGP SIGNATURE-----
2021-07-21 12:49:13 -04:00
pmow
8aff424ccc add nouns text file 2021-07-20 08:26:26 -04:00
Harry Fn Potter
f50ebdd28c Fixed QU Settings config installing when not set. 2021-07-20 04:00:31 -04:00
harryeffinpotter
5608565275 2.4.2
2.4.2
2021-07-20 02:18:56 -04:00
Harry Fn Potter
9f783b3b1a 2.4.2 2021-07-20 02:17:18 -04:00
harryeffinpotter
02156985aa 2.4.1 2021-07-20 01:26:34 -04:00
Harry Fn Potter
a81cb1e496 2.4.1 2021-07-20 01:25:09 -04:00
harryeffinpotter
688bf0a274 2.4hf 2021-07-20 01:23:00 -04:00
Harry Fn Potter
5d84133c3e Fixed issues with debuglog and crashlog upload. Both can now be shared with moderation staff without issue. 2021-07-20 01:16:46 -04:00
Harry Fn Potter
8e9e5cfb88 crashfix if no nouns.txt 2021-07-18 23:06:05 -04:00
Harry Fn Potter
3d19cab51c updater wont work with 3 digits or HF for some reason. 2021-07-18 20:18:54 -04:00
Harry Fn Potter
e8a3f5e34e 2.3HF1 2021-07-18 20:13:44 -04:00
Harry Fn Potter
e1ed9af1d7 Added check for nouns.txt 2021-07-18 20:09:00 -04:00
Harry Fn Potter
d154d67c57 BeugLog server support, MAJOR OBB BREAK FIX. 2021-07-18 19:42:10 -04:00
Harry Fn Potter
fb9d4ab0d3 Fixed debuglog code issues until server until debuglog server is live 2021-07-18 01:25:27 -04:00
harryeffinpotter
2f34ac8848 Merge pull request #67 from SamHoque/master
bugs/download-progress-bar-not-working-as-intended
2021-07-17 20:13:25 -04:00
Harry Fn Potter
9e352c3144 changelog to add 2.1.1 hotfix 2021-07-17 15:45:13 -04:00
Harry Fn Potter
b07e6bc12c 2.2.1 2021-07-17 15:43:10 -04:00
Harry Fn Potter
f8ee9b493a -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.2

+ Added custom naming scheme to Debug Log. Debug Log now uses 2 random nouns as its name when generated.
+ Added shortcut commands. Press F1 to see list of shortcuts.

  F1  = Shortcuts List
  F2  = Search
  F3  = Quest Options
  F4  = Rookie Settings
  F5  = Refresh Games List
  F11 = Copy Debug log to Desktop.
  F12 = Copy Crash Log to Desktop (if one exists).

  CTRL + R  = Run custom ADB command.
  CTRL + F  = Search
  CTRL + P  = Copy package name of selected game to Clipboard.
  CTRL + F4 = Restart program.

+ Added ability to upload debug logs to remote server (the server should be updated to reflect this sometime this week!)
= If Install.txt exists apk install and Obb copy will only be run from install.txt - this is to prevent double copy of obb files or double install of APKS.
= Fixed issue where if user started DL+install on one title then quickly selected a different title in the games list it would download the newly selected item instead of the originally intended item.
= Fixed issue that caused download progress bar to not work if multiple items were queued.
= Fixed other obb copying issues.
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDzKesACgkQx/Rql1Vo
czeiXQ/+OsH5CdnShheJR85/uIkVLGDf75Hkybj7k+5gV688imYwWbCRarudqa8k
aVC5g69mdKD8rD8DzWjccpFwxvOSq5MRQMWB/Nl/M2142Rnr1M4WdP6xEmMq1qmQ
X39T3tdpgxxKyDPIt4EX/iLT6qSHdB69qFtMeEoOsHmisqGDFDCHGs835VUUL9FU
PaZ218Dd07r9/W9cJKX5EI/ihWZ5lv+0defBofQu2A8GCOXzuWIudLtcG5uYIJwO
9frevYIKteuq+MmcXedgu3uWUb0CnQ+tEyShPYjTdrFdMJYgFrOzIIlogBWK5fm3
cp8YSzeHJpBnD8qQar/W92WTTzvWd7I9vk7YB/Pdn6MIzzTJX540R2fu2rwsYBCG
DciqA8+V5sDx5eRmrcUxrmxrsDMPlbpqos0R+yujCHyiLHzt1d/oEohZ/mNw24y4
3MrjGyzlJqRZZFnaMLGNooLBrT9EeGcTXk/MgJjSO1XQjCVAWmrrsEHCXqcKwi8i
IW5OMKld80wqWr79LRF6dPxjcuwRgVE8mNd6G6qedX5TXvqjHUEVymMLFFvhVQnQ
QnOHX0HzWXF/64ghD6r3OR4pQ8C5xb7Z6tEwXX7soQVo610m7nJT1zaHm2m9HSJN
AA1bdfK9SEKXl3KJT7SCEnQ/2ED6Qr/VBFXcJB/10Il/n8AdJ2o=
=DFRR
-----END PGP SIGNATURE-----v
2021-07-17 15:08:55 -04:00
Sam Hoque
d66e6f55d3 bugs/download-progress-bar-not-working-as-intended
- Fixed the progress bar being stuck in marquee mode.
2021-07-17 14:25:05 +06:00
harryeffinpotter
25358d3a6d Merge pull request #66 from SamHoque/bugs/fix-download-games-dialog
bugs/fix-download-games-dialog
2021-07-17 04:16:29 -04:00
Sam Hoque
8088c2cf11 bugs/fix-download-games-dialog
- Recreated branch https://github.com/nerdunit/androidsideloader/pull/61 created by @dkgitdev since the branch had some merge conflicts, that was too long to resolve.
2021-07-17 14:15:57 +06:00
Harry Fn Potter
3b684142e9 Log upload 2021-07-17 02:47:12 -04:00
harryeffinpotter
e0945a71ac Merge pull request #64 from SamHoque/master
Tidied up mirror drop down
2021-07-17 02:44:23 -04:00
harryeffinpotter
a63b8b2a5c Merge pull request #65 from SamHoque/bug/fix-crashes
bug/fix-crashes
2021-07-17 02:44:07 -04:00
Sam Hoque
69dfd9ca00 bug/fix-crashes
- Fixes two crashes that occurs when closing the application
2021-07-17 11:26:08 +06:00
Sam Hoque
ebacfc0e42 Tidied up mirror drop down
- Replaced the "VRP-mirror" text to be an empty string inside `remoteList.items`
- Changed `currentRemote` to concat ` "VRP-mirror" ` before the currently selected `remotelist` item
2021-07-17 11:05:57 +06:00
Harry Fn Potter
9a3e9617b5 F3 and F4 now open Rookie Settings and Quest Options, respectively. 2021-07-17 00:28:38 -04:00
Harry Fn Potter
20607bf3b4 Logger update. 2021-07-17 00:16:42 -04:00
Harry Fn Potter
063b0d05d5 Hotkeys update, fixed obb loading taking forever. 2021-07-17 00:15:25 -04:00
Harry Fn Potter
306e2eb19b 2.1.6
bug fix
2021-07-14 07:02:25 -04:00
Harry Fn Potter
119a95406e -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.1.5

+ Added Releasename to installing messages and download size message.
= Mulitple bugfixes.

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDums0ACgkQx/Rql1Vo
czc+PRAAmKSXHjNqO6JXpUKIQczrs3q15yZztgmOQMULNUImis3+/ykOxsMJit1A
W6ORtj3i2VH0TDBx/hhRghMPo+dNilyKnCWm928mXc3taMOEOKu+Dz8WfhnuNp0A
ENmV5fKfuChqrn/6jkUY8UG12NM0eu3A+7fH6LvRADxRxESVH81JUtcf4bSAlier
JuL/q67nv8mThFS3tRtjjvmu0nQMCUcvagfwRNFOUW0aob7NBAp6wxTsbxZo0yEq
oVOxyTAOR84IGHpWeDKDyMw+AySMnHQXl9Ty385zg4eHZr/l1uQcK61uNfiqVCK+
Pag6I1+vLs/3Z3v6qD84iUnis/RV2lqiZcenNeTHQgBKzSsxegB5t0WaID7qlnec
655QnEUbLbIxENS7HodMR1+CzWKgmmYpIH9jV+vH0+mTaKnAYmW56q/ae8OmjXqw
6NXSfog3Dv7U8Imq21Q8glxt/CXh1fY0I8JLxpMjbwEDm56fvvzdRAeE3TeXJR0y
CD9HbH/G8oH/OhLaj1UR5y9FR3PLIBhHmnl9VHtxcvv/nrHMQHbM9bAjPUpNdnSg
30yZxPw/eqv8KLhGxxc+cBnXv3p5bNf2j27gY1Q8XbgcL8PAM6NlVBN/9oaDQ5cL
r5Cc4d5r9F+Q+QrhpZlw3jshHdoVKqgc4ut6xBAWulztNWNvLok=
=tySN
-----END PGP SIGNATURE-----
2021-07-14 04:24:54 -04:00
Harry Fn Potter
2bd4bda513 2.1.5 many bugfixes added gamename to installation messaging. 2021-07-14 04:23:44 -04:00
Harry Fn Potter
4126c82f4d updater fix 2021-07-12 06:29:13 -04:00
Harry Fn Potter
d35fed0217 2.1.4
2.1.3.2 wouldnt work with updater.
2021-07-12 06:21:07 -04:00
Harry Fn Potter
111d3a7176 -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

RSL 2.1.3.2

+ Added checkbox to enable Enter to Download+Install.
= Fixed crash that occurred when user held down up arrow or down arrow on gamelist.
= Fixed all issues with Install.txt path.
= Clicking out of search box now closes it.
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDsFZ8ACgkQx/Rql1Vo
czcwJg/+PFiXfh6PPZNIRf2Zeht7WN8oxuUFV907KnD5+gKD0rzNd1NzgrcPOgAh
/oJakvY6ryLyaopJFZ8bm7++tQ3w6mbnzPaGweNoOF7/oLDb9NKVlK5/VjA3JPPN
QtOebRgBsigoRGGTq0s7ZRZV99vtSm2R1+1z9qlEu5Fm2hEiIggLvSBdGWDhbGnZ
jnvAZixeYgR+R6x4MZTsDao+qIYMio7heiVdN03gQ4hAaPbZ/I6s3cS+K33k02Nz
IEATqkwoLOevmN/D773A0cMzh/ZQWs557E3aKtwB+EHo/0ucCk0WaMSt4WdH8Qqe
WWF6+UT8FEEN2M76SQrg80xBj3QxzfIi92c231rVvtHMiVn5qUhTrDYb2wqx7J99
cJeMgANBmWSBZRBNW7jwhAxUVXE9vE8eqBza9MarXbJaLtq3Mf0ECLWvFPllA8dU
lnBcdSuTESvZkBAokkCwEJOb7sootBpEz5BZtE268mZEfsHUGWo3/VZDrJ7lLXJW
mEE2aCcHpNWysa9CsSee/QWNgLH2v+9PM3r/1SJyQ23C2hwyQI+F2lkch8Ar5Qfn
YxMWnhAcYXTRtcxY0s7xuhpUr/TGc6m9QY6NeVYMvb3g1gbmGOyyN/MELNOkEF/l
FXnrY4AfaNTs6EL6/id/viGcHc1MnnjgzlTNg5rgoxtFrHdVwP4=
=o0TQ
-----END PGP SIGNATURE-----
2021-07-12 06:17:21 -04:00
Harry Fn Potter
5e235c5125 Search will now select games at bottom of list too.
Added hidden shortcut CTRL+P which will turn on a property that copies the packagename of selected games to the clipboard.
2021-07-10 13:06:33 -04:00
Harry Fn Potter
9ccf7811e5 2.1.1H wouldnt work so, 2.1.3 2021-07-10 06:28:09 -04:00
harryeffinpotter
93d606bcac remove newline 2021-07-10 06:24:30 -04:00
Harry Fn Potter
8d0eb4a84d version code HF 2021-07-10 06:18:35 -04:00
Harry Fn Potter
6f20154599 Hotfix - adb kill server was running BEFORE adb was copied to correct directory. It's not an RSL update without one program breaking bug! 2021-07-10 06:18:19 -04:00
Harry Fn Potter
bbe84000b7 Fixed crash when clicking DragDrop label during load. 2021-07-10 05:34:29 -04:00
Harry Fn Potter
30ead79ed1 version # 2021-07-10 05:25:30 -04:00
Harry Fn Potter
97b6da3abe 2.1.2 ALL issues fixed. 2021-07-10 05:18:13 -04:00
Harry Fn Potter
6c2a7413b4 Fixed all merge/branch destruction. 2021-07-10 01:17:25 -04:00
Harry Fn Potter
744ce530dc + Added optional Wake on Wifi setting so Wireless ADB will still connect as long as device is not powered off or dead.
+ RSL will now automatically choose any Oculus device over devices made by other manufacturers if more than one ADB device is present.
= Fixed Download+Install QUSettings application if QUSettings are set.
= Fixed Pull APK from device.
2021-07-09 05:38:39 -04:00
Harry Fn Potter
8a299748aa Revert "Revert "Revert "jkvhguyghkijhijbklbkhjlhiulj"""
This reverts commit e76f619311.
2021-07-09 04:22:23 -04:00
Harry Fn Potter
e76f619311 Revert "Revert "jkvhguyghkijhijbklbkhjlhiulj""
This reverts commit b3ea6cacae.
2021-07-09 01:45:48 -04:00
Harry Fn Potter
b3ea6cacae Revert "jkvhguyghkijhijbklbkhjlhiulj"
This reverts commit 0acc36feed.
2021-07-09 01:40:01 -04:00
Harry Fn Potter
93a4629739 Revert "jbh"
This reverts commit bf41013add.
2021-07-09 01:40:01 -04:00
harryeffinpotter
93263a4afe Add files via upload 2021-07-09 01:04:16 -04:00
harryeffinpotter
23990935d1 2.1.1HF1 2021-07-09 01:01:12 -04:00
Harry Fn Potter
bf41013add jbh 2021-07-08 14:01:22 -04:00
Harry Fn Potter
0acc36feed jkvhguyghkijhijbklbkhjlhiulj 2021-07-08 13:57:03 -04:00
Harry Fn Potter
3301227163 Revert "Last minute patches/fixes. + changelog update."
This reverts commit aba08c9ec70941d0c9f1173bd50c00715c48dc43.
2021-07-08 13:57:03 -04:00
Harry Fn Potter
45d1981451 Last minute patches/fixes. + changelog update. 2021-07-08 13:57:03 -04:00
Harry Fn Potter
f22636d81f Updated version number to push update, added Not enough storage message boxes from both RCLONE (pc space too low) and ADB (android device space too low) 2021-07-08 13:57:03 -04:00
Harry Fn Potter
bd8e94c210 Cleaned up a ton of code, fixed 2x crash errors from last update. Added timestamp to crashlog and debuglog, removed wall of test (gameslist entire contents) from debuglog to make it easier to read. 2021-07-08 13:57:03 -04:00
Harry Fn Potter
cac88cae92 + Added optional Wake on Wifi setting so Wireless ADB will still connect as long as device is not powered off or dead.
+ RSL will now automatically choose any Oculus device over devices made by other manufacturers if more than one ADB device is present.
= Fixed Download+Install QUSettings application if QUSettings are set.
= Fixed Pull APK from device.
2021-07-08 13:57:03 -04:00
Harry Fn Potter
4370e922ef test 2021-07-08 13:57:03 -04:00
Harry Fn Potter
caa4f78943 Major rollup update 2021-07-08 13:52:28 -04:00
Harry Fn Potter
d3b988546f Revert "Forked RSL for quest settings standalone purposes then completely forgot what branch I was on. Here's like 10 updates in one."
This reverts commit cbdde48344.
2021-07-08 13:38:32 -04:00
Harry Fn Potter
cbdde48344 Forked RSL for quest settings standalone purposes then completely forgot what branch I was on. Here's like 10 updates in one. 2021-07-08 13:33:16 -04:00
harryeffinpotter
3b830d9f67 update 2021-07-07 14:36:16 -04:00
harryeffinpotter
7572ddb84e 2.1.1HF1 2021-07-07 14:34:55 -04:00
harryeffinpotter
7c6f05361e 2.1.1HF1 2021-07-07 14:32:43 -04:00
harryeffinpotter
5b54f195f1 2.1.1 2021-07-05 17:46:47 -04:00
harryeffinpotter
bd71e07b19 hf5
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Update RSL2.1HF5

Fixed ADB path for usernames containing spaces. ADB now located at c:\RSL\VersionNumber\ADB

- -HarryEffingPotter-
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmDdNvsACgkQx/Rql1Vo
czdIWQ/+OvvchZOuwMZJvd6d/N4WmBUPKm3TzyiF5JM/STLEbLIHB1p6LQg+6J3K
3d9x3mQmu/gMHMumsfmuOuHHI7OOs9CLOVY2UFm7CqTnDf7iCxl8+6/iQw48yfj9
63qwUKZdLueRX9IqtcV2MwZJP7eKdZmtv6ALyRbjWmo2fgbm/Fs1U+TfGnlY7qLg
wIascv5DuKRyHvRzlgdn6OqmewWTxHDOTwCTjodROIK9guCELNYhEWv/TtgMldv9
gz1Lr8KZOcxNltpvstJgdbeFy61LK67su0rKZHsGMu4x0hDe4YOyjyMDtXrVJ0VH
SJBqDgSKD3HE/MNYkCWusqs7np2XKXC8hP6nm2QO9zM44d+UWDfrJbwvvw6QUoez
Iqk/PskC3sF7kWAv4O+LRmLDlrHD2RG5TkkE4ohiIi4D4VaNEx4QyVf6INN+A9xd
IxcvXC9QkFwffUD93cThEdLNRnrnzZSsUFMRh3XrvPbq2wfvWjqZX1EGfD7ug0Mf
r9uPX4RdILvsXeybefiiwLiw3UNMJtUlaKDvqIit5S78BIP6DY+dGnMMRIQJa1vd
XBPnIHyifzvl1nyYd6TWCFRuOzZLYirv4Ug6xS1/KzyURXIz2P0EEhDURJAR/q+M
ZmqSO2eQo64B7Dfa9oRLKkZRfhWFgtYA9QKm9ei7tOPbnJ+2718=
=o5Nr
-----END PGP SIGNATURE-----
2021-06-30 23:34:43 -04:00
Harry Fn Potter
5b5ce78471 changelog hf5 with sig 2021-06-30 23:31:46 -04:00
Harry Fn Potter
c96a98b38a Merge branch 'master' of https://github.com/nerdunit/androidsideloader 2021-06-30 23:29:16 -04:00
Harry Fn Potter
b0bb41732d ADB path fix once and for all. 2021-06-30 23:29:04 -04:00
harryeffinpotter
c6ef62c6ca 2.1HF4 2021-06-29 06:37:48 -04:00
Harry Fn Potter
0b04783962 Changelog update. 2021-06-29 06:33:21 -04:00
Harry Fn Potter
5fab216798 Updated version # in updater. 2021-06-29 06:28:08 -04:00
Harry Fn Potter
a37c843a99 Update RSL2.1HF4 - RSL now copies ADB files to AppData\Roaming\RSL\Version\ADB 2021-06-29 06:24:46 -04:00
harryeffinpotter
222edcd6a8 2.1 hf3 2021-06-20 17:49:13 -04:00
harryeffinpotter
130140727b testing something 2021-06-20 17:47:00 -04:00
harryeffinpotter
5ec2f260fc hf3 2021-06-20 17:41:37 -04:00
Harry Fn Potter
a7ad7c0a83 Fixed install.txt AGAIN. The spaghetti code is spaghetti code. 2021-06-20 17:31:15 -04:00
Harry Fn Potter
bd511d28a8 FINALLY back to normal. JFC. 2021-06-20 12:29:26 -04:00
Harry Fn Potter
75a75bd627 Missing bracket in mainform. 2021-06-19 23:05:09 -04:00
Harry Fn Potter
0bc0f6668a fixed obb install.txt. Fixed adb errors. Should be all good meow. Also fixed wireless causing program freeze if IP changed. 2021-06-19 23:03:18 -04:00
Harry Fn Potter
f72c6b8d95 updater 2021-06-19 20:03:50 -04:00
Harry Fn Potter
3952931831 Merge fixes 2021-06-19 20:02:39 -04:00
Harry Fn Potter
9346b75916 Fixes 2021-06-19 20:01:12 -04:00
Harry Fn Potter
b9e98894e9 Fixed all issues. 2021-06-19 20:00:18 -04:00
Harry Fn Potter
c2b4fb499c Merge branch 'master' of https://github.com/nerdunit/androidsideloader 2021-06-19 04:09:08 -04:00
Harry Fn Potter
e040e36564 Install.txt was using cmd exe , made it use adb exe and added another function for cmd only purposes for 7zip extracts during install.txt 2021-06-19 04:08:56 -04:00
harryeffinpotter
459a496bbb 2.1.2HF 2021-06-17 04:24:54 -04:00
harryeffinpotter
e8fcae997b 2.2 2021-06-17 04:22:20 -04:00
Harry Fn Potter
9912af4acc Updater revert 2021-06-17 04:17:37 -04:00
harryeffinpotter
f243853fca HF 2021-06-17 04:14:52 -04:00
harryeffinpotter
fc98d61304 removed v 2021-06-17 04:12:14 -04:00
Harry Fn Potter
d38af14ed4 Merge branch 'master' of https://github.com/nerdunit/androidsideloader 2021-06-17 04:09:49 -04:00
Harry Fn Potter
17165c35a9 changelog 2021-06-17 04:09:42 -04:00
harryeffinpotter
5e30e3a22c 2.1.2 2021-06-17 04:08:28 -04:00
Harry Fn Potter
bba48c5dc5 ADB Debugging warning reimplemented. Unauthorized code section was not proccing response. 2021-06-17 04:01:15 -04:00
Harry Fn Potter
5d75edaf63 Anchor points + max/min window size for Quest options. 2021-06-16 05:58:29 -04:00
Harry Fn Potter
62d9187cfa Merge branch 'master' of https://github.com/nerdunit/androidsideloader 2021-06-16 05:38:11 -04:00
Harry Fn Potter
cf1dda5e5b 2.1.2 - in progress, still testing,
= Fixed apk drag and drop when install.txt present, apk now installs prior to following install.txt commands.
= Changed OBB procedure for drag and drop to check for com. in directory name prior to running copyObb command.
= Fixed freeze caused by having Wireless ADB enabled but device idle or rebooted.
2021-06-16 05:38:01 -04:00
harryeffinpotter
a5f6590019 v2.1.1
2.1.1
2021-06-01 12:34:02 -04:00
Harry Fn Potter
b7cd6c1cb4 Merge branch 'master' of https://github.com/nerdunit/androidsideloader 2021-06-01 12:32:04 -04:00
Harry Fn Potter
452e733b3a changed version name to 2.1.1 2021-06-01 12:31:45 -04:00
harryeffinpotter
146defaef3 update to hf2
update hf2
2021-06-01 12:17:30 -04:00
Harry Fn Potter
fb2b6c0a58 version change 2021-06-01 12:12:59 -04:00
Harry Fn Potter
cec0104b05 Merge branch 'master' of https://github.com/nerdunit/androidsideloader 2021-06-01 12:12:38 -04:00
Harry Fn Potter
7c78acb9bd HF2 Fixed QUSettings not working (due to 0's not being in unused fields), fixed backup and mount. 2021-06-01 12:12:24 -04:00
harryeffinpotter
7cad9565b2 HF 2021-05-29 10:28:06 -04:00
harryeffinpotter
a47918841f test 2021-05-29 10:07:21 -04:00
harryeffinpotter
b8e28b38ff Hotfix 2021-05-29 09:54:41 -04:00
78 changed files with 19261 additions and 3954 deletions

2
.gitignore vendored
View File

@@ -17,3 +17,5 @@ AndroidSideloader.csproj.user
AndroidSideloader.csproj.user
AndroidSideloader.csproj.user
/AndroidSideloader v2.1.exe
/crashlog.txt
/debuglog.txt

View File

@@ -1,6 +0,0 @@
{
"ExpandedNodes": [
""
],
"PreviewInSolutionExplorer": false
}

Binary file not shown.

BIN
7z.dll

Binary file not shown.

BIN
7z.exe

Binary file not shown.

343
ADB.cs
View File

@@ -2,7 +2,9 @@
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using JR.Utils.GUI.Forms;
using Newtonsoft.Json;
namespace AndroidSideloader
@@ -12,16 +14,28 @@ namespace AndroidSideloader
class ADB
{
static Process adb = new Process();
public static string adbFolderPath = Environment.CurrentDirectory + "\\adb";
public static string adbFolderPath = "C:\\RSL\\platform-tools";
public static string adbFilePath = adbFolderPath + "\\adb.exe";
public static string DeviceID = "";
public static string package = "";
public static ProcessOutput RunAdbCommandToString(string command)
{
Properties.Settings.Default.ADBFolder = adbFolderPath;
Properties.Settings.Default.ADBPath = adbFilePath;
Properties.Settings.Default.Save();
if (DeviceID.Length > 1)
{
command = $" -s {DeviceID} {command}";
}
if (!command.Contains("dumpsys") && !command.Contains("shell pm list packages") && !command.Contains("KEYCODE_WAKEUP"))
{
Logger.Log($"Running command {command}");
string logcmd = command;
if (logcmd.Contains(Environment.CurrentDirectory))
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
Logger.Log($"Running command: {logcmd}");
}
adb.StartInfo.FileName = adbFilePath;
adb.StartInfo.Arguments = command;
adb.StartInfo.RedirectStandardError = true;
@@ -30,7 +44,6 @@ namespace AndroidSideloader
adb.StartInfo.CreateNoWindow = true;
adb.StartInfo.UseShellExecute = false;
adb.StartInfo.WorkingDirectory = adbFolderPath;
adb.Start();
adb.StandardInput.WriteLine(command);
adb.StandardInput.Flush();
@@ -40,23 +53,49 @@ namespace AndroidSideloader
string error = "";
try
{
{
output = adb.StandardOutput.ReadToEnd();
error = adb.StandardError.ReadToEnd();
}
catch { }
adb.WaitForExit();
Logger.Log(output);
if (command.Contains("connect"))
{
bool graceful = adb.WaitForExit(3000); //Wait 3 secs.
if (!graceful)
{
adb.Kill();
}
}
else
adb.WaitForExit();
if (error.Contains("ADB_VENDOR_KEYS") && !Properties.Settings.Default.adbdebugwarned)
{
DialogResult dialogResult = FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.\nPlease note that even if you have done this\nbefore it will reset itself from time to time.\n\nPress CANCEL if you want to disable this prompt (FOR DEBUGGING ONLY, NOT RECOMMENDED).", "ADB Debugging not enabled.", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.Cancel)
{
Properties.Settings.Default.adbdebugwarned = true;
Properties.Settings.Default.Save();
}
else
ADB.WakeDevice();
}
if (error.Contains("not enough storage space"))
{
FlexibleMessageBox.Show("There is not enough room on your device to install this package. Please clear AT LEAST 2x the amount of the app you are trying to install.");
}
if (!output.Contains("version") && !output.Contains("KEYCODE_WAKEUP") && !output.Contains("Filesystem") && !output.Contains("package:") && !output.Equals(null))
Logger.Log(output);
Logger.Log(error);
return new ProcessOutput(output, error);
}
public static ProcessOutput RunAdbCommandToStringWOADB(string result, string path)
{
string command = result;
string logcmd = command;
if (logcmd.Contains(Environment.CurrentDirectory))
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
Logger.Log($"Running command: {logcmd}");
Logger.Log($"Running command {command}");
adb.StartInfo.FileName = "cmd.exe";
adb.StartInfo.RedirectStandardError = true;
adb.StartInfo.RedirectStandardInput = true;
@@ -75,23 +114,108 @@ namespace AndroidSideloader
try
{
output += adb.StandardOutput.ReadToEnd();
error += adb.StandardError.ReadToEnd();
output += adb.StandardOutput.ReadToEnd();
error += adb.StandardError.ReadToEnd();
}
catch { }
if (command.Contains("connect"))
{
bool graceful = adb.WaitForExit(3000);
if (!graceful)
{
adb.Kill();
}
else
adb.WaitForExit();
}
else if (command.Contains("install"))
{
bool graceful = adb.WaitForExit(120000);
if (!graceful)
{
adb.Kill();
}
else
adb.WaitForExit();
}
if (error.Contains("ADB_VENDOR_KEYS") && Properties.Settings.Default.adbdebugwarned)
{
DialogResult dialogResult = FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.\nPlease note that even if you have done this\nbefore it will reset itself from time to time.\n\nPress CANCEL if you want to disable this prompt (FOR DEBUGGING ONLY, NOT RECOMMENDED).", "ADB Debugging not enabled.", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.Cancel)
{
Properties.Settings.Default.adbdebugwarned = true;
Properties.Settings.Default.Save();
}
else
ADB.WakeDevice();
}
Logger.Log(output);
Logger.Log(error);
return new ProcessOutput(output, error);
}
public static ProcessOutput RunCommandToString(string result, string path = "")
{
string command = result;
string logcmd = command;
if (logcmd.Contains(Environment.CurrentDirectory))
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
Logger.Log($"Running command: {logcmd}");
adb.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
adb.StartInfo.Arguments = command;
adb.StartInfo.RedirectStandardError = true;
adb.StartInfo.RedirectStandardInput = true;
adb.StartInfo.RedirectStandardOutput = true;
adb.StartInfo.CreateNoWindow = true;
adb.StartInfo.UseShellExecute = false;
adb.StartInfo.WorkingDirectory = Path.GetDirectoryName(path);
adb.Start();
adb.StandardInput.WriteLine(command);
adb.StandardInput.Flush();
adb.StandardInput.Close();
adb.WaitForExit();
string output = "";
string error = "";
try
{
output += adb.StandardOutput.ReadToEnd();
error += adb.StandardError.ReadToEnd();
}
catch { }
if (command.Contains("connect"))
{
bool graceful = adb.WaitForExit(3000);
if (!graceful)
{
adb.Kill();
}
}
else
adb.WaitForExit();
if (error.Contains("ADB_VENDOR_KEYS") && Properties.Settings.Default.adbdebugwarned)
{
DialogResult dialogResult = FlexibleMessageBox.Show("Please check inside your headset for ADB DEBUGGING prompt, check box to \"Always allow from this computer.\" and hit OK.\nPlease note that even if you have done this\nbefore it will reset itself from time to time.\n\nPress CANCEL if you want to disable this prompt (FOR DEBUGGING ONLY, NOT RECOMMENDED).", "ADB Debugging not enabled.", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.Cancel)
{
Properties.Settings.Default.adbdebugwarned = true;
Properties.Settings.Default.Save();
}
else
ADB.WakeDevice();
}
Logger.Log(output);
Logger.Log(error);
return new ProcessOutput(output, error);
}
public static ProcessOutput UninstallPackage(string package)
public static ProcessOutput UninstallPackage(string package)
{
WakeDevice();
ProcessOutput output = new ProcessOutput("", "");
output += RunAdbCommandToString($"shell pm uninstall -k --user 0 {package}");
output += RunAdbCommandToString($"shell pm uninstall {package}");
return output;
}
@@ -141,163 +265,112 @@ namespace AndroidSideloader
return $"Total space: {String.Format("{0:0.00}", (double)totalSize / 1000)}GB\nUsed space: {String.Format("{0:0.00}", (double)usedSize / 1000)}GB\nFree space: {String.Format("{0:0.00}", (double)freeSize / 1000)}GB";
}
public static bool wirelessadbON;
public static void WakeDevice()
{
if (!string.IsNullOrEmpty(Properties.Settings.Default.IPAddress))
{
ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress);
string response = ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress).Output;
if (response.Contains("refused"))
{
DialogResult dialogResult = MessageBox.Show("It seems you have rebooted your Quest, Rookie's wireless ADB will persist past PC reboot, but not for Quest reboot.\n\nHave you assigned your Quest a static IP in your router configuration? If you no longer want to use Wireless ADB just hit cancel!", "DEVICE WAS REBOOTED", MessageBoxButtons.YesNoCancel);
if (dialogResult == DialogResult.Cancel)
return;
if (dialogResult == DialogResult.Yes)
{
ADB.WakeDevice();
MessageBox.Show("Connect your Quest to USB so we can reconnect to your saved IP address!");
ADB.RunAdbCommandToString("devices");
Thread.Sleep(250);
ADB.RunAdbCommandToString("disconnect");
Thread.Sleep(50);
ADB.RunAdbCommandToString("connect");
Thread.Sleep(50);
ADB.RunAdbCommandToString("tcpip 5555");
Thread.Sleep(500);
ADB.RunAdbCommandToString(Properties.Settings.Default.IPAddress);
}
if (dialogResult == DialogResult.No)
{
ADB.WakeDevice();
MessageBox.Show("You must repeat the entire connection process, press OK to begin.", "Reconfigure Wireless ADB", MessageBoxButtons.OK);
ADB.RunAdbCommandToString("devices");
ADB.RunAdbCommandToString("tcpip 5555");
MessageBox.Show("Press OK to get your Quest's local IP address.", "Obtain local IP address", MessageBoxButtons.OK);
Thread.Sleep(1000);
string input = ADB.RunAdbCommandToString("shell ip route").Output;
string[] strArrayOne = new string[] { "" };
strArrayOne = input.Split(' ');
if (strArrayOne[0].Length > 7)
{
ADB.WakeDevice();
string IPaddr = strArrayOne[8];
string IPcmnd = "connect " + IPaddr + ":5555";
MessageBox.Show($"Your Quest's local IP address is: {IPaddr}\n\nPlease disconnect your Quest then wait 2 seconds.\nOnce it is disconnected hit OK", "", MessageBoxButtons.OK);
Thread.Sleep(2000);
ADB.RunAdbCommandToString(IPcmnd);
Properties.Settings.Default.IPAddress = IPcmnd;
Properties.Settings.Default.Save();
MessageBox.Show($"Connected!!", "", MessageBoxButtons.OK);
Program.form.ChangeTitlebarToDevice();
}
else
{
MessageBox.Show("No device connected!");
}
}
}
}
RunAdbCommandToString("shell input keyevent KEYCODE_WAKEUP");
if (!String.IsNullOrEmpty(Properties.Settings.Default.IPAddress) && !Properties.Settings.Default.Wired)
RunAdbCommandToString(Properties.Settings.Default.IPAddress);
}
public static ProcessOutput Sideload(string path, string packagename = "")
{
WakeDevice();
ProcessOutput ret = new ProcessOutput();
Program.form.ChangeTitle($"Sideloading {path}");
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
ret += RunAdbCommandToString($"install -g \"{path}\"");
string out2 = ret.Output + ret.Error;
if (out2.Contains("failed"))
{
string BackupFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups");
if (out2.Contains("offline"))
Logger.Log(out2);
if (out2.Contains("offline") && !Properties.Settings.Default.nodevicemode)
{
DialogResult dialogResult2 = MessageBox.Show("Device is offline. Press Yes to reconnect, or if you don't wish to connect and just want to download the game (we suggest unchecking delete games after install from settings menu) then press No.", "Device offline.", MessageBoxButtons.YesNoCancel);
DialogResult dialogResult2 = FlexibleMessageBox.Show("Device is offline. Press Yes to reconnect, or if you don't wish to connect and just want to download the game (requires unchecking \"Delete games after install\" from settings menu) then press No.", "Device offline.", MessageBoxButtons.YesNoCancel);
if (dialogResult2 == DialogResult.Yes)
ADB.WakeDevice();
}
if (out2.Contains($"INSTALL_FAILED_UPDATE_INCOMPATIBLE") || out2.Contains("INSTALL_FAILED_VERSION_DOWNGRADE"))
if (out2.Contains($"signatures do not match previously") || out2.Contains("INSTALL_FAILED_VERSION_DOWNGRADE") || out2.Contains("signatures do not match") || out2.Contains("failed to install"))
{
ret.Error = string.Empty;
ret.Output = string.Empty;
MessageBox.Show($"In-place upgrade for {packagename} failed. We will need to upgrade by uninstalling, and keeping savedata isn't guaranteed. Continue?", "UPGRADE FAILED!", MessageBoxButtons.OKCancel);
string date_str = DateTime.Today.ToString("yyyy.MM.dd");
string CurrBackups = Path.Combine(BackupFolder, date_str);
MessageBox.Show($"Searching for save files...", "Searching!", MessageBoxButtons.OK);
if (Directory.Exists($"/sdcard/Android/data/{packagename}"))
{
MessageBox.Show($"Trying to backup save to Documents\\Rookie Backups\\{date_str}(year.month.date)\\{packagename}\\data", "Save files found", MessageBoxButtons.OK);
Directory.CreateDirectory(CurrBackups);
String CurrbackupPaths = CurrBackups + "\\" + packagename + "\\data";
Directory.CreateDirectory(CurrbackupPaths);
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/data/{packagename}\" \"{CurrbackupPaths}\"");
}
else
{
DialogResult dialogResult = MessageBox.Show($"No savedata found! Continue with the uninstall!", "None Found", MessageBoxButtons.OK);
if (dialogResult == DialogResult.Cancel)
{
return ret;
}
}
ADB.WakeDevice();
ret += ADB.RunAdbCommandToString("shell pm uninstall " + packagename);
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
if (!Properties.Settings.Default.AutoReinstall)
{
DialogResult dialogResult1 = FlexibleMessageBox.Show("In place upgrade has failed. Rookie can attempt to backup your save data and\nreinstall the game automatically, however " +
"some games do not store their saves\nin an accessible location(less than 5%). Continue with reinstall?", "In place upgrade failed.", MessageBoxButtons.OKCancel);
if (dialogResult1 == DialogResult.Cancel)
return ret;
}
Program.form.ChangeTitle("Performing reinstall, please wait...");
ADB.RunAdbCommandToString("kill-server");
ADB.RunAdbCommandToString("devices");
ADB.RunAdbCommandToString($"pull /sdcard/Android/data/{MainForm.CurrPCKG} \"{Environment.CurrentDirectory}\"");
Program.form.ChangeTitle("Uninstalling game...");
Sideloader.UninstallGame(MainForm.CurrPCKG);
Program.form.ChangeTitle("Reinstalling Game");
ret += ADB.RunAdbCommandToString($"install -g \"{path}\"");
ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\{MainForm.CurrPCKG}\" /sdcard/Android/data/");
if (Directory.Exists($"{Environment.CurrentDirectory}\\{MainForm.CurrPCKG}"))
Directory.Delete($"{Environment.CurrentDirectory}\\{MainForm.CurrPCKG}", true);
Program.form.ChangeTitle(" \n\n");
return ret;
}
ret += RunAdbCommandToString($"install -g -r \"{path}\"");
}
if (File.Exists($"{Properties.Settings.Default.MainDir}\\Config.Json"))
string gamenameforQU = Sideloader.PackageNametoGameName(packagename);
if (Properties.Settings.Default.QUturnedon)
{
Program.form.ChangeTitle("Pushing Custom QU s3 Patch JSON.");
if (gamenameforQU.Contains("-QU") || path.Contains("-QU"))
{
string gameName = packagename;
packagename = Sideloader.gameNameToPackageName(gameName);
RunAdbCommandToString($"shell mkdir /sdcard/android/data/{packagename}");
RunAdbCommandToString($"shell mkdir /sdcard/android/data/{packagename}/private");
Program.form.ChangeTitle("Pushing Custom QU S3 Config.JSON.");
if (!Directory.Exists($"/sdcard/android/data/{packagename}"))
RunAdbCommandToString($"shell mkdir /sdcard/android/data/{packagename}");
if (!Directory.Exists($"/sdcard/android/data/{packagename}/private"))
RunAdbCommandToString($"shell mkdir /sdcard/android/data/{packagename}/private");
Random r = new Random();
int x = r.Next(999999999);
int y = r.Next(9999999);
Random r = new Random();
int x = r.Next(999999999);
int y = r.Next(9999999);
var sum = ((long)y * (long)1000000000) + (long)x;
var sum = ((long)y * (long)1000000000) + (long)x;
int x2 = r.Next(999999999);
int y2 = r.Next(9999999);
var sum2 = ((long)y2 * (long)1000000000) + (long)x2;
ADB.WakeDevice();
Properties.Settings.Default.QUStringF = $"{{\"user_id\":{sum},\"app_id\":\"{sum2}\",";
Properties.Settings.Default.Save();
string boff = Properties.Settings.Default.QUStringF + Properties.Settings.Default.QUString;
File.WriteAllText("config.json", boff);
string blank = "";
File.WriteAllText("delete_settings", blank);
ret += ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\delete_settings\" /sdcard/android/data/{packagename}/private/");
ret += ADB.RunAdbCommandToString($"push \"{Environment.CurrentDirectory}\\config.json\" /sdcard/android/data/{packagename}/private/");
int x2 = r.Next(999999999);
int y2 = r.Next(9999999);
var sum2 = ((long)y2 * (long)1000000000) + (long)x2;
ADB.WakeDevice();
Properties.Settings.Default.QUStringF = $"{{\"user_id\":{sum},\"app_id\":\"{sum2}\",";
Properties.Settings.Default.Save();
string boff = Properties.Settings.Default.QUStringF + Properties.Settings.Default.QUString;
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\config.json", boff);
string blank = "";
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\delete_settings", blank);
ret += ADB.RunAdbCommandToString($"push \"{Properties.Settings.Default.MainDir}\\delete_settings\" /sdcard/android/data/{packagename}/private/delete_settings");
ret += ADB.RunAdbCommandToString($"push \"{Properties.Settings.Default.MainDir}\\config.json\" /sdcard/android/data/{packagename}/private/config.json");
}
}
Program.form.ChangeTitle("Sideload done");
Program.form.ChangeTitle("");
return ret;
}
public static ProcessOutput CopyOBB(string path)
{
WakeDevice();
if (SideloaderUtilities.CheckFolderIsObb(path))
return RunAdbCommandToString($"push \"{path}\" /sdcard/Android/obb");
string folder = Path.GetFileName(path);
if (!folder.Contains("+") && !folder.Contains("_") && folder.Contains("."))
{
return RunAdbCommandToString($"push \"{path}\" \"/sdcard/Android/obb\"");
}
return new ProcessOutput();
}
}

BIN
Ad.7z Normal file

Binary file not shown.

View File

@@ -15,6 +15,7 @@
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@@ -27,9 +28,9 @@
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup>
<UseShortFileNames>True</UseShortFileNames>
@@ -146,6 +147,8 @@
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.DirectoryServices" />
<Reference Include="System.Management" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -159,8 +162,39 @@
</ItemGroup>
<ItemGroup>
<Compile Include="ADB.cs" />
<Compile Include="RoundButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ColumnSort.cs" />
<Compile Include="Donors.cs" />
<Compile Include="DonorsListView.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DonorsListView.Designer.cs">
<DependentUpon>DonorsListView.cs</DependentUpon>
</Compile>
<Compile Include="FlexibleMessageBox.cs" />
<Compile Include="RoundedRectangleF.cs" />
<Compile Include="Splash.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Splash.Designer.cs">
<DependentUpon>Splash.cs</DependentUpon>
</Compile>
<Compile Include="Models\PublicConfig.cs" />
<Compile Include="NewApps.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="NewApps.Designer.cs">
<DependentUpon>NewApps.cs</DependentUpon>
</Compile>
<Compile Include="Transparenter.cs" />
<Compile Include="UpdateForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="UpdateForm.Designer.cs">
<DependentUpon>UpdateForm.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
@@ -192,12 +226,6 @@
<Compile Include="SpoofForm.Designer.cs">
<DependentUpon>SpoofForm.cs</DependentUpon>
</Compile>
<Compile Include="ThemeForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ThemeForm.Designer.cs">
<DependentUpon>ThemeForm.cs</DependentUpon>
</Compile>
<Compile Include="Updater.cs" />
<Compile Include="UsernameForm.cs">
<SubType>Form</SubType>
@@ -210,6 +238,21 @@
<Compile Include="SelectFolder.cs" />
<Compile Include="Utilities\StringUtilities.cs" />
<Compile Include="Utilities\GeneralUtilities.cs" />
<Compile Include="Utilities\UpdateGameData.cs" />
<Compile Include="Utilities\UploadGame.cs" />
<Compile Include="Utilities\Zip.cs" />
<EmbeddedResource Include="DonorsListView.resx">
<DependentUpon>DonorsListView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Splash.resx">
<DependentUpon>Splash.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="NewApps.resx">
<DependentUpon>NewApps.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UpdateForm.resx">
<DependentUpon>UpdateForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
<SubType>Designer</SubType>
@@ -235,14 +278,13 @@
<EmbeddedResource Include="SpoofForm.resx">
<DependentUpon>SpoofForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ThemeForm.resx">
<DependentUpon>ThemeForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UsernameForm.resx">
<DependentUpon>UsernameForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\DataSources\AndroidSideloader.Properties.Resources.datasource" />
<None Include="Properties\DataSources\AndroidSideloader.Properties.Settings.datasource" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@@ -252,6 +294,10 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<None Include="Rookie Offline.cmd">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="version" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
@@ -259,6 +305,15 @@
<ItemGroup>
<Content Include="changelog.txt" />
<Content Include="icon.ico" />
<Content Include="ChangelogHistory.txt" />
<Content Include="Resources\pattern_cubes-1_1_1_0-0_0_1__000000_212121.png" />
<Content Include="Resources\pattern_herringbone-2_1_3_0-0_90_1__000000_1c1c1c.png" />
<Content Include="Resources\splash.jpg" />
<None Include="Resources\battery11.png" />
<None Include="Resources\battery.png" />
<None Include="Resources\battery1.png" />
<None Include="Resources\ajax-loader.gif" />
<None Include="Resources\SearchGlass.PNG" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">

View File

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectView>ShowAllFiles</ProjectView>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>en-US</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>

View File

@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="AndroidSideloader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="AndroidADB.Sideloader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="AndroidSideloader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
<section name="AndroidADB.Sideloader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
<userSettings>
<AndroidSideloader.Properties.Settings>
@@ -27,40 +27,22 @@
<value>True</value>
</setting>
<setting name="userJsonOnGameInstall" serializeAs="String">
<value>True</value>
<value>False</value>
</setting>
<setting name="CallUpgrade" serializeAs="String">
<value>True</value>
</setting>
<setting name="BackColor" serializeAs="String">
<value>45, 45, 45</value>
</setting>
<setting name="ButtonColor" serializeAs="String">
<value>ActiveCaptionText</value>
</setting>
<setting name="SubButtonColor" serializeAs="String">
<value>64, 64, 64</value>
</setting>
<setting name="TextBoxColor" serializeAs="String">
<value>45, 45, 45</value>
</setting>
<setting name="ComboBoxColor" serializeAs="String">
<value>45, 45, 45</value>
</setting>
<setting name="FontColor" serializeAs="String">
<value>White</value>
</setting>
<setting name="FontStyle" serializeAs="String">
<value>Microsoft Sans Serif, 9.5pt</value>
<value>Microsoft Sans Serif, 11.25pt</value>
</setting>
<setting name="BackPicturePath" serializeAs="String">
<value />
<value/>
</setting>
<setting name="SpoofGames" serializeAs="String">
<value>False</value>
</setting>
<setting name="BandwithLimit" serializeAs="String">
<value />
<value/>
</setting>
<setting name="BigFontStyle" serializeAs="String">
<value>Microsoft Sans Serif, 14pt</value>
@@ -69,47 +51,146 @@
<value>False</value>
</setting>
<setting name="IPAddress" serializeAs="String">
<value />
<value/>
</setting>
<setting name="InstalledApps" serializeAs="String">
<value />
<value/>
</setting>
<setting name="ADBPath" serializeAs="String">
<value />
<value/>
</setting>
<setting name="QUsett" serializeAs="String">
<value>False</value>
</setting>
<setting name="QuChecked" serializeAs="String">
<value />
<value/>
</setting>
<setting name="QUhz" serializeAs="String">
<value />
<value>0</value>
</setting>
<setting name="QUres" serializeAs="String">
<value />
<value>0</value>
</setting>
<setting name="QUy" serializeAs="String">
<value />
<value>0</value>
</setting>
<setting name="QUx" serializeAs="String">
<value />
<value>0</value>
</setting>
<setting name="QUname" serializeAs="String">
<value />
<value>Change Me</value>
</setting>
<setting name="QUString" serializeAs="String">
<value />
<value/>
</setting>
<setting name="MainDir" serializeAs="String">
<value />
<value/>
</setting>
<setting name="QUStringF" serializeAs="String">
<value />
<value/>
</setting>
<setting name="delsh" serializeAs="String">
<value>False</value>
</setting>
<setting name="CurrPckg" serializeAs="String">
<value/>
</setting>
<setting name="ADBFolder" serializeAs="String">
<value/>
</setting>
<setting name="WirelessADB" serializeAs="String">
<value>False</value>
</setting>
<setting name="CurrentGamename" serializeAs="String">
<value/>
</setting>
<setting name="PackageNameToCB" serializeAs="String">
<value>False</value>
</setting>
<setting name="EnterKeyInstall" serializeAs="String">
<value>False</value>
</setting>
<setting name="DownUpHeld" serializeAs="String">
<value>False</value>
</setting>
<setting name="CurrentLogPath" serializeAs="String">
<value/>
</setting>
<setting name="CurrentLogName" serializeAs="String">
<value/>
</setting>
<setting name="CurrentCrashPath" serializeAs="String">
<value/>
</setting>
<setting name="CurrentCrashName" serializeAs="String">
<value/>
</setting>
<setting name="QUturnedon" serializeAs="String">
<value>False</value>
</setting>
<setting name="adbdebugwarned" serializeAs="String">
<value>False</value>
</setting>
<setting name="nodevicemode" serializeAs="String">
<value>False</value>
</setting>
<setting name="BMBFchecked" serializeAs="String">
<value>True</value>
</setting>
<setting name="GamesList" serializeAs="String">
<value/>
</setting>
<setting name="UploadedGameList" serializeAs="String">
<value>False</value>
</setting>
<setting name="GlobalUsername" serializeAs="String">
<value/>
</setting>
<setting name="lastTimeShared" serializeAs="String">
<value/>
</setting>
<setting name="AutoReinstall" serializeAs="String">
<value>False</value>
</setting>
<setting name="NonAppPackages" serializeAs="String">
<value/>
</setting>
<setting name="LastLaunch" serializeAs="String">
<value>04/20/1969 16:20:00</value>
</setting>
<setting name="SubmittedUpdates" serializeAs="String">
<value/>
</setting>
<setting name="ListUpped" serializeAs="String">
<value>False</value>
</setting>
<setting name="LastLaunch2" serializeAs="String">
<value>04/20/1969 16:20:00</value>
</setting>
<setting name="Wired" serializeAs="String">
<value>False</value>
</setting>
<setting name="FontColor" serializeAs="String">
<value>White</value>
</setting>
<setting name="ComboBoxColor" serializeAs="String">
<value>50, 50, 50</value>
</setting>
<setting name="SubButtonColor" serializeAs="String">
<value>40, 40, 40</value>
</setting>
<setting name="TextBoxColor" serializeAs="String">
<value>29, 29, 29</value>
</setting>
<setting name="ButtonColor" serializeAs="String">
<value>50, 50, 50</value>
</setting>
<setting name="BackColor" serializeAs="String">
<value>50, 50, 50</value>
</setting>
<setting name="AppPackages" serializeAs="String">
<value/>
</setting>
</AndroidSideloader.Properties.Settings>
<AndroidADB.Sideloader.Properties.Settings>
<setting name="checkForUpdates" serializeAs="String">
@@ -161,11 +242,11 @@
<value>Microsoft Sans Serif, 11.25pt</value>
</setting>
<setting name="BackPicturePath" serializeAs="String">
<value />
<value/>
</setting>
<setting name="SpoofGames" serializeAs="String">
<value>False</value>
</setting>
</AndroidADB.Sideloader.Properties.Settings>
</userSettings>
</configuration>
</configuration>

2306
ChangelogHistory.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -30,7 +30,7 @@ public class ListViewColumnSorter : IComparer
ColumnToSort = 0;
// Initialize the sort order to 'none'
OrderOfSort = SortOrder.None;
OrderOfSort = SortOrder.Ascending;
// Initialize the CaseInsensitiveComparer object
ObjectCompare = new CaseInsensitiveComparer();
@@ -50,6 +50,25 @@ public class ListViewColumnSorter : IComparer
// Cast the objects to be compared to ListViewItem objects
listviewX = (ListViewItem)x;
listviewY = (ListViewItem)y;
if (ColumnToSort == 5 ) {
try
{
int yNum = int.Parse(cleanNumber(listviewY.SubItems[ColumnToSort].Text));
int xNum = int.Parse(cleanNumber(listviewX.SubItems[ColumnToSort].Text));
if (xNum == yNum )
{
return 0;
}
else if(xNum > yNum && OrderOfSort == SortOrder.Ascending)
{
return -1;
}
else
{
return 1;
}
} catch { }
}
// Compare the two items
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
@@ -102,4 +121,9 @@ public class ListViewColumnSorter : IComparer
}
}
private string cleanNumber(string number)
{
return number.Substring(0);
}
}

63
Donors.cs Normal file
View File

@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AndroidSideloader
{
class Donors
{
public static int GameNameIndex = 0;
public static int PackageNameIndex = 1;
public static int VersionCodeIndex = 2;
public static int UpdateOrNew = 3;
/* Game Name
* Package Name
* Version Code
* Update or New app
*/
public static List<string> newAppProperties = new List<string>();
public static List<string> donorGameProperties = new List<string>();
public static List<string[]> donorGames = new List<string[]>();
public static List<string[]> newApps = new List<string[]>();
public static void initDonorGames()
{
donorGameProperties.Clear();
donorGames.Clear();
if (!MainForm.DonorApps.Equals(""))
{
string[] gameListSplited = MainForm.DonorApps.Split(new[] { '\n' });
foreach (string game in gameListSplited)
{
if (game.Length > 1)
{
string[] splitGame = game.Split(';');
donorGames.Add(splitGame);
}
}
}
}
public static void initNewApps()
{
newApps.Clear();
if (!DonorsListViewForm.newAppsForList.Equals(""))
{
string[] newListSplited = DonorsListViewForm.newAppsForList.Split(new[] { '\n' });
foreach (string game in newListSplited)
{
if (game.Length > 1)
{
string[] splitGame = game.Split(';');
newApps.Add(splitGame);
}
}
}
}
}
}

293
DonorsListView.Designer.cs generated Normal file
View File

@@ -0,0 +1,293 @@

namespace AndroidSideloader
{
partial class DonorsListViewForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.DonorsListView = new System.Windows.Forms.ListView();
this.GameNameIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.PackageNameIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.VersionCodeIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.UpdateOrNew = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.panel1 = new System.Windows.Forms.Panel();
this.SkipButton = new System.Windows.Forms.Button();
this.panel2 = new System.Windows.Forms.Panel();
this.bothdet = new System.Windows.Forms.Label();
this.newdet = new System.Windows.Forms.Label();
this.upddet = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.TimerDesc = new System.Windows.Forms.Label();
this.DonateButton = new System.Windows.Forms.Button();
this.DonationTimer = new System.Windows.Forms.Timer(this.components);
this.panel1.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
// DonorsListView
//
this.DonorsListView.AccessibleRole = System.Windows.Forms.AccessibleRole.None;
this.DonorsListView.BackColor = global::AndroidSideloader.Properties.Settings.Default.ComboBoxColor;
this.DonorsListView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.DonorsListView.CausesValidation = false;
this.DonorsListView.CheckBoxes = true;
this.DonorsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.GameNameIndex,
this.PackageNameIndex,
this.VersionCodeIndex,
this.UpdateOrNew});
this.DonorsListView.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "ComboBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.DonorsListView.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.DonorsListView.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.DonorsListView.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.DonorsListView.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.DonorsListView.FullRowSelect = true;
this.DonorsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.DonorsListView.HideSelection = false;
this.DonorsListView.ImeMode = System.Windows.Forms.ImeMode.On;
this.DonorsListView.Location = new System.Drawing.Point(6, 6);
this.DonorsListView.MinimumSize = new System.Drawing.Size(100, 100);
this.DonorsListView.Name = "DonorsListView";
this.DonorsListView.RightToLeftLayout = true;
this.DonorsListView.Size = new System.Drawing.Size(419, 219);
this.DonorsListView.TabIndex = 0;
this.DonorsListView.TileSize = new System.Drawing.Size(100, 100);
this.DonorsListView.UseCompatibleStateImageBehavior = false;
this.DonorsListView.View = System.Windows.Forms.View.Details;
this.DonorsListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.DonorsListView_ItemChecked);
this.DonorsListView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseDown);
this.DonorsListView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseMove);
this.DonorsListView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseUp);
//
// GameNameIndex
//
this.GameNameIndex.Text = "Game Name";
this.GameNameIndex.Width = 219;
//
// PackageNameIndex
//
this.PackageNameIndex.DisplayIndex = 2;
this.PackageNameIndex.Text = "Packagename";
this.PackageNameIndex.Width = 0;
//
// VersionCodeIndex
//
this.VersionCodeIndex.DisplayIndex = 3;
this.VersionCodeIndex.Text = "Version";
this.VersionCodeIndex.Width = 113;
//
// UpdateOrNew
//
this.UpdateOrNew.DisplayIndex = 1;
this.UpdateOrNew.Text = "Donation Type";
this.UpdateOrNew.Width = 85;
//
// panel1
//
this.panel1.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.panel1.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.panel1.Controls.Add(this.SkipButton);
this.panel1.Controls.Add(this.panel2);
this.panel1.Controls.Add(this.bothdet);
this.panel1.Controls.Add(this.newdet);
this.panel1.Controls.Add(this.upddet);
this.panel1.Controls.Add(this.label2);
this.panel1.Controls.Add(this.TimerDesc);
this.panel1.Controls.Add(this.DonateButton);
this.panel1.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.panel1.Location = new System.Drawing.Point(-7, -7);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(463, 345);
this.panel1.TabIndex = 1;
this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseDown);
this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseMove);
this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseUp);
//
// SkipButton
//
this.SkipButton.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.SkipButton.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.SkipButton.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.SkipButton.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.SkipButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SkipButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.SkipButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.SkipButton.Location = new System.Drawing.Point(22, 277);
this.SkipButton.Name = "SkipButton";
this.SkipButton.Size = new System.Drawing.Size(102, 36);
this.SkipButton.TabIndex = 1;
this.SkipButton.Text = "Skip";
this.SkipButton.UseVisualStyleBackColor = true;
this.SkipButton.Click += new System.EventHandler(this.SkipButton_Click);
//
// panel2
//
this.panel2.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.panel2.Controls.Add(this.DonorsListView);
this.panel2.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.panel2.Location = new System.Drawing.Point(16, 43);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(430, 230);
this.panel2.TabIndex = 2;
//
// bothdet
//
this.bothdet.AutoSize = true;
this.bothdet.BackColor = System.Drawing.Color.Transparent;
this.bothdet.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.25F, System.Drawing.FontStyle.Bold);
this.bothdet.Location = new System.Drawing.Point(125, 7);
this.bothdet.Name = "bothdet";
this.bothdet.Size = new System.Drawing.Size(213, 17);
this.bothdet.TabIndex = 3;
this.bothdet.Text = "Updates/new apps detected!";
this.bothdet.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.bothdet.Visible = false;
this.bothdet.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseDown);
this.bothdet.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseMove);
this.bothdet.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseUp);
//
// newdet
//
this.newdet.AutoSize = true;
this.newdet.BackColor = System.Drawing.Color.Transparent;
this.newdet.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.25F, System.Drawing.FontStyle.Bold);
this.newdet.Location = new System.Drawing.Point(120, 7);
this.newdet.Name = "newdet";
this.newdet.Size = new System.Drawing.Size(150, 17);
this.newdet.TabIndex = 3;
this.newdet.Text = "New apps detected!";
this.newdet.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.newdet.Visible = false;
this.newdet.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseDown);
this.newdet.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseMove);
this.newdet.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseUp);
//
// upddet
//
this.upddet.AutoSize = true;
this.upddet.BackColor = System.Drawing.Color.Transparent;
this.upddet.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.25F, System.Drawing.FontStyle.Bold);
this.upddet.Location = new System.Drawing.Point(120, 7);
this.upddet.Name = "upddet";
this.upddet.Size = new System.Drawing.Size(185, 17);
this.upddet.TabIndex = 3;
this.upddet.Text = "Game Updates Detected";
this.upddet.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.upddet.Visible = false;
this.upddet.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseDown);
this.upddet.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseMove);
this.upddet.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseUp);
//
// label2
//
this.label2.AutoSize = true;
this.label2.BackColor = System.Drawing.Color.Transparent;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.Location = new System.Drawing.Point(23, 23);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(416, 15);
this.label2.TabIndex = 3;
this.label2.Text = "All Apps are donated by users! Without them none of this would be possible!";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.label2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseDown);
this.label2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseMove);
this.label2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseUp);
//
// TimerDesc
//
this.TimerDesc.AutoSize = true;
this.TimerDesc.BackColor = System.Drawing.Color.Transparent;
this.TimerDesc.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.TimerDesc.Location = new System.Drawing.Point(28, 321);
this.TimerDesc.Name = "TimerDesc";
this.TimerDesc.Size = new System.Drawing.Size(406, 13);
this.TimerDesc.TabIndex = 3;
this.TimerDesc.Text = "Don\'t share free apps. Rookie will extract/upload apps in background.";
this.TimerDesc.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.TimerDesc.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseDown);
this.TimerDesc.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseMove);
this.TimerDesc.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseUp);
//
// DonateButton
//
this.DonateButton.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.DonateButton.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.DonateButton.Enabled = false;
this.DonateButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.DonateButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.DonateButton.ForeColor = System.Drawing.Color.White;
this.DonateButton.Location = new System.Drawing.Point(130, 277);
this.DonateButton.Name = "DonateButton";
this.DonateButton.Size = new System.Drawing.Size(311, 36);
this.DonateButton.TabIndex = 1;
this.DonateButton.Text = "Automatically share selected apps";
this.DonateButton.UseVisualStyleBackColor = true;
this.DonateButton.Click += new System.EventHandler(this.DonateButton_Click);
//
// DonorsListViewForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Gainsboro;
this.ClientSize = new System.Drawing.Size(449, 336);
this.ControlBox = false;
this.Controls.Add(this.panel1);
this.ForeColor = System.Drawing.Color.White;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Name = "DonorsListViewForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Load += new System.EventHandler(this.DonorsListViewForm_Load);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseDown);
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseMove);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.DonorsListViewForm_MouseUp);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView DonorsListView;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button DonateButton;
private System.Windows.Forms.Label TimerDesc;
private System.Windows.Forms.ColumnHeader GameNameIndex;
private System.Windows.Forms.ColumnHeader PackageNameIndex;
private System.Windows.Forms.ColumnHeader VersionCodeIndex;
private System.Windows.Forms.ColumnHeader UpdateOrNew;
public System.Windows.Forms.Timer DonationTimer;
private System.Windows.Forms.Button SkipButton;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label bothdet;
private System.Windows.Forms.Label newdet;
private System.Windows.Forms.Label upddet;
private System.Windows.Forms.Panel panel2;
}
}

171
DonorsListView.cs Normal file
View File

@@ -0,0 +1,171 @@
using AndroidSideloader.Utilities;
using JR.Utils.GUI.Forms;
using Newtonsoft.Json;
using SergeUtils;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.NetworkInformation;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AndroidSideloader
{
public partial class DonorsListViewForm : Form
{
private bool mouseDown;
private Point lastLocation;
public DonorsListViewForm()
{
InitializeComponent();
Donors.initDonorGames();
List<ListViewItem> DGameList = new List<ListViewItem>();
foreach (string[] release in Donors.donorGames)
{
ListViewItem DGame = new ListViewItem(release);
DGameList.Add(DGame);
}
ListViewItem[] arr = DGameList.ToArray();
DonorsListView.BeginUpdate();
DonorsListView.Items.Clear();
DonorsListView.Items.AddRange(arr);
DonorsListView.EndUpdate();
}
public static string DonorsLocal = MainForm.DonorApps;
public static bool ifuploads = false;
public static string newAppsForList = "";
private void DonorsListViewForm_Load(object sender, EventArgs e)
{
MainForm.updatesnotified = true;
if (MainForm.updates && MainForm.newapps)
bothdet.Visible = true;
else if (MainForm.updates && !MainForm.newapps)
upddet.Visible = true;
else
newdet.Visible = true;
foreach (ListViewItem listItem in DonorsListView.Items)
{
if (listItem.SubItems[Donors.UpdateOrNew].Text.Contains("Update"))
listItem.BackColor = Color.FromArgb(0, 79, 97);
}
}
private async void DonateButton_Click(object sender, EventArgs e)
{
if (DonorsListView.CheckedItems.Count > 0)
{
bool uncheckednewapps = false;
foreach (ListViewItem listItem in DonorsListView.Items)
{
if (!listItem.Checked)
{
if (listItem.SubItems[Donors.UpdateOrNew].Text.Contains("New"))
{
uncheckednewapps = true;
newAppsForList += listItem.SubItems[Donors.GameNameIndex].Text + ";" + listItem.SubItems[Donors.PackageNameIndex].Text + "\n";
}
}
}
if (uncheckednewapps)
{
NewApps NewAppForm = new NewApps();
NewAppForm.ShowDialog();
this.Hide();
}
else
this.Hide();
int count = 0;
count = DonorsListView.CheckedItems.Count;
string[] gamesToUpload;
gamesToUpload = new string[count];
for (int i = 0; i < count; i++)
{
ulong vcode = Convert.ToUInt64(DonorsListView.CheckedItems[i].SubItems[Donors.VersionCodeIndex].Text);
if (DonorsListView.CheckedItems[i].SubItems[Donors.UpdateOrNew].Text.Contains("Update"))
await Program.form.extractAndPrepareGameToUploadAsync(DonorsListView.CheckedItems[i].SubItems[Donors.GameNameIndex].Text, DonorsListView.CheckedItems[i].SubItems[Donors.PackageNameIndex].Text, vcode, true);
else
await Program.form.extractAndPrepareGameToUploadAsync(DonorsListView.CheckedItems[i].SubItems[Donors.GameNameIndex].Text, DonorsListView.CheckedItems[i].SubItems[Donors.PackageNameIndex].Text, vcode, false);
ifuploads = true;
}
}
if (ifuploads)
{
MainForm.DoUpload();
}
this.Close();
}
private void DonorsListView_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if (DonorsListView.CheckedItems.Count == 0)
{
SkipButton.Enabled = true;
DonateButton.Enabled = false;
}
else
{
DonateButton.Enabled = true;
SkipButton.Enabled = false;
}
}
private void SkipButton_Click(object sender, EventArgs e)
{
bool uncheckednewapps = false;
foreach (ListViewItem listItem in DonorsListView.Items)
{
if (!listItem.Checked)
{
if (listItem.SubItems[Donors.UpdateOrNew].Text.Contains("New"))
{
uncheckednewapps = true;
newAppsForList += listItem.SubItems[Donors.GameNameIndex].Text + ";" + listItem.SubItems[Donors.PackageNameIndex].Text + "\n";
}
}
}
if (uncheckednewapps)
{
NewApps NewAppForm = new NewApps();
NewAppForm.ShowDialog();
}
this.Close();
}
private void DonorsListViewForm_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = true;
lastLocation = e.Location;
}
private void DonorsListViewForm_MouseMove(object sender, MouseEventArgs e)
{
if (mouseDown)
{
this.Location = new Point(
(this.Location.X - lastLocation.X) + e.X, (this.Location.Y - lastLocation.Y) + e.Y);
this.Update();
}
}
private void DonorsListViewForm_MouseUp(object sender, MouseEventArgs e)
{
mouseDown = false;
}
}
}

View File

@@ -1,132 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="colorDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>138, 17</value>
</metadata>
<metadata name="fontDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>278, 17</value>
</metadata>
<metadata name="openThemeDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>394, 17</value>
</metadata>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="DonationTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -402,6 +402,8 @@ namespace JR.Utils.GUI.Forms
((System.ComponentModel.ISupportInitialize)(this.pictureBoxForIcon)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
this.Activate();
}
private System.Windows.Forms.Button button1;

674
LICENSE Normal file
View File

@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

968
MainForm.Designer.cs generated

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

25
Models/PublicConfig.cs Normal file
View File

@@ -0,0 +1,25 @@
using Newtonsoft.Json;
using System;
using System.Text;
namespace AndroidSideloader.Models
{
[JsonObject(MemberSerialization.OptIn)]
public class PublicConfig
{
[JsonProperty("baseUri")]
public string BaseUri { get; set; }
private string password;
[JsonProperty("password")]
public string Password
{
get => password;
set
{
password = Encoding.UTF8.GetString(Convert.FromBase64String(value));
}
}
}
}

157
NewApps.Designer.cs generated Normal file
View File

@@ -0,0 +1,157 @@

namespace AndroidSideloader
{
partial class NewApps
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.NewAppsListView = new System.Windows.Forms.ListView();
this.GameNameIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.PackageNameIndex = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.panel2 = new System.Windows.Forms.Panel();
this.label2 = new System.Windows.Forms.Label();
this.NewAppsButton = new AndroidSideloader.RoundButton();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
// NewAppsListView
//
this.NewAppsListView.AccessibleRole = System.Windows.Forms.AccessibleRole.None;
this.NewAppsListView.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.NewAppsListView.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.NewAppsListView.CausesValidation = false;
this.NewAppsListView.CheckBoxes = true;
this.NewAppsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.GameNameIndex,
this.PackageNameIndex});
this.NewAppsListView.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.NewAppsListView.ForeColor = System.Drawing.Color.White;
this.NewAppsListView.FullRowSelect = true;
this.NewAppsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.NewAppsListView.HideSelection = false;
this.NewAppsListView.Location = new System.Drawing.Point(3, 5);
this.NewAppsListView.Name = "NewAppsListView";
this.NewAppsListView.RightToLeftLayout = true;
this.NewAppsListView.Size = new System.Drawing.Size(288, 167);
this.NewAppsListView.TabIndex = 1;
this.NewAppsListView.UseCompatibleStateImageBehavior = false;
this.NewAppsListView.View = System.Windows.Forms.View.Details;
this.NewAppsListView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label2_MouseDown);
this.NewAppsListView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.label2_MouseMove);
this.NewAppsListView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.label2_MouseUp);
//
// GameNameIndex
//
this.GameNameIndex.Text = "Game Name";
this.GameNameIndex.Width = 284;
//
// PackageNameIndex
//
this.PackageNameIndex.Width = 0;
//
// panel2
//
this.panel2.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.panel2.Controls.Add(this.NewAppsListView);
this.panel2.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.panel2.Location = new System.Drawing.Point(9, 31);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(295, 175);
this.panel2.TabIndex = 8;
//
// label2
//
this.label2.AutoSize = true;
this.label2.BackColor = System.Drawing.Color.Transparent;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.25F, System.Drawing.FontStyle.Bold);
this.label2.ForeColor = System.Drawing.SystemColors.ControlLightLight;
this.label2.Location = new System.Drawing.Point(28, 7);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(256, 17);
this.label2.TabIndex = 9;
this.label2.Text = "Check box of all free/non-VR apps";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.label2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label2_MouseDown);
this.label2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.label2_MouseMove);
this.label2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.label2_MouseUp);
//
// NewAppsButton
//
this.NewAppsButton.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.NewAppsButton.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.NewAppsButton.BackColor = System.Drawing.Color.Transparent;
this.NewAppsButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.NewAppsButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.NewAppsButton.ForeColor = System.Drawing.Color.White;
this.NewAppsButton.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.NewAppsButton.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.NewAppsButton.Location = new System.Drawing.Point(12, 212);
this.NewAppsButton.Name = "NewAppsButton";
this.NewAppsButton.Radius = 5;
this.NewAppsButton.Size = new System.Drawing.Size(288, 29);
this.NewAppsButton.Stroke = true;
this.NewAppsButton.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.NewAppsButton.TabIndex = 2;
this.NewAppsButton.Text = "Accept";
this.NewAppsButton.Transparency = false;
this.NewAppsButton.Click += new System.EventHandler(this.DonateButton_Click);
//
// NewApps
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.ClientSize = new System.Drawing.Size(313, 248);
this.ControlBox = false;
this.Controls.Add(this.NewAppsButton);
this.Controls.Add(this.label2);
this.Controls.Add(this.panel2);
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.Name = "NewApps";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Load += new System.EventHandler(this.NewApps_Load);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label2_MouseDown);
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.label2_MouseMove);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.label2_MouseUp);
this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ListView NewAppsListView;
private System.Windows.Forms.ColumnHeader GameNameIndex;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ColumnHeader PackageNameIndex;
private RoundButton NewAppsButton;
}
}

83
NewApps.cs Normal file
View File

@@ -0,0 +1,83 @@
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 NewApps : Form
{
private bool mouseDown;
private Point lastLocation;
public NewApps()
{
InitializeComponent();
}
private void label2_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = true;
lastLocation = e.Location;
}
private void label2_MouseMove(object sender, MouseEventArgs e)
{
if (mouseDown)
{
this.Location = new Point(
(this.Location.X - lastLocation.X) + e.X, (this.Location.Y - lastLocation.Y) + e.Y);
this.Update();
}
}
private void label2_MouseUp(object sender, MouseEventArgs e)
{
mouseDown = false;
}
private void DonateButton_Click(object sender, EventArgs e)
{
string HWID = SideloaderUtilities.UUID();
foreach (ListViewItem listItem in NewAppsListView.Items)
{
if (listItem.Checked)
{
Properties.Settings.Default.NonAppPackages += listItem.SubItems[Donors.PackageNameIndex].Text + ";" + HWID + "\n";
Properties.Settings.Default.Save();
}
else
{
Properties.Settings.Default.AppPackages += listItem.SubItems[Donors.PackageNameIndex].Text + "\n";
Properties.Settings.Default.Save();
}
}
MainForm.newpackageupload();
this.Close();
}
private void NewApps_Load(object sender, EventArgs e)
{
NewAppsListView.Items.Clear();
Donors.initNewApps();
List<ListViewItem> NewAppList = new List<ListViewItem>();
foreach (string[] release in Donors.newApps)
{
ListViewItem NGame = new ListViewItem(release);
if (!NewAppList.Contains(NGame))
NewAppList.Add(NGame);
}
ListViewItem[] arr = NewAppList.ToArray();
NewAppsListView.BeginUpdate();
NewAppsListView.Items.Clear();
NewAppsListView.Items.AddRange(arr);
NewAppsListView.EndUpdate();
}
}
}

120
NewApps.resx Normal file
View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -2,6 +2,7 @@
using System.Windows.Forms;
using System.Security.Permissions;
using System.IO;
using System.Drawing.Drawing2D;
namespace AndroidSideloader
{
@@ -14,12 +15,12 @@ namespace AndroidSideloader
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
static void Main()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
form = new MainForm();
Application.Run(form);
//form.Show();
@@ -28,7 +29,8 @@ namespace AndroidSideloader
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
File.WriteAllText(Sideloader.CrashLogPath, $"Message: {e.Message}\nData: {e.Data}\nSource: {e.Source}\nTargetSite: {e.TargetSite}");
string date_time = DateTime.Now.ToString("dddd, MMMM dd @ hh:mmtt (UTC)");
File.WriteAllText(Sideloader.CrashLogPath, $"Date/Time of crash: {date_time}\nMessage: {e.Message}\nData: {e.Data}\nSource: {e.Source}\nTargetSite: {e.TargetSite}");
}
}
}
}

View File

@@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
// associated with an assembly.
//[assembly: AssemblyKeyFileAttribute("keypair.snk")]
[assembly: AssemblyTitle("AndroidSideloader")]
[assembly: AssemblyDescription("Rookie's Sideloader")]
[assembly: AssemblyDescription("Rookie Sideloader")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Rookie.WTF")]
[assembly: AssemblyProduct("AndroidSideloader")]

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is automatically generated by Visual Studio .Net. It is
used to store generic object data source configuration information.
Renaming the file extension or editing the content of this file may
cause the file to be unrecognizable by the program.
-->
<GenericObjectDataSource DisplayName="Resources" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<TypeInfo>AndroidSideloader.Properties.Resources, Properties.Resources.Designer.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
</GenericObjectDataSource>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is automatically generated by Visual Studio .Net. It is
used to store generic object data source configuration information.
Renaming the file extension or editing the content of this file may
cause the file to be unrecognizable by the program.
-->
<GenericObjectDataSource DisplayName="Settings" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<TypeInfo>AndroidSideloader.Properties.Settings, Properties.Resources.Designer.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
</GenericObjectDataSource>

View File

@@ -19,7 +19,7 @@ namespace AndroidSideloader.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Resources {
@@ -59,5 +59,95 @@ namespace AndroidSideloader.Properties {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap ajax_loader {
get {
object obj = ResourceManager.GetObject("ajax-loader", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap battery {
get {
object obj = ResourceManager.GetObject("battery", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap battery1 {
get {
object obj = ResourceManager.GetObject("battery1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap battery11 {
get {
object obj = ResourceManager.GetObject("battery11", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap Pattern {
get {
object obj = ResourceManager.GetObject("Pattern", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap pattern_cubes_1_1_1_0_0_0_1__000000_212121 {
get {
object obj = ResourceManager.GetObject("pattern_cubes-1_1_1_0-0_0_1__000000_212121", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c {
get {
object obj = ResourceManager.GetObject("pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap SearchGlass {
get {
object obj = ResourceManager.GetObject("SearchGlass", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
public static System.Drawing.Bitmap splashimage {
get {
object obj = ResourceManager.GetObject("splashimage", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@@ -117,4 +117,32 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="battery" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\battery.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="battery1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\battery11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pattern_herringbone_2_1_3_0_0_90_1__000000_1c1c1c" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\resources\pattern_herringbone-2_1_3_0-0_90_1__000000_1c1c1c.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="splashimage" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\splashimage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="battery11" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\battery1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ajax-loader" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ajax-loader.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="SearchGlass" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SearchGlass.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Pattern" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Pattern.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="pattern_cubes-1_1_1_0-0_0_1__000000_212121" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pattern_cubes-1_1_1_0-0_0_1__000000_212121.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@@ -12,7 +12,7 @@ namespace AndroidSideloader.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -85,7 +85,7 @@ namespace AndroidSideloader.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool userJsonOnGameInstall {
get {
return ((bool)(this["userJsonOnGameInstall"]));
@@ -109,79 +109,7 @@ namespace AndroidSideloader.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("45, 45, 45")]
public global::System.Drawing.Color BackColor {
get {
return ((global::System.Drawing.Color)(this["BackColor"]));
}
set {
this["BackColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("ActiveCaptionText")]
public global::System.Drawing.Color ButtonColor {
get {
return ((global::System.Drawing.Color)(this["ButtonColor"]));
}
set {
this["ButtonColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("64, 64, 64")]
public global::System.Drawing.Color SubButtonColor {
get {
return ((global::System.Drawing.Color)(this["SubButtonColor"]));
}
set {
this["SubButtonColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("45, 45, 45")]
public global::System.Drawing.Color TextBoxColor {
get {
return ((global::System.Drawing.Color)(this["TextBoxColor"]));
}
set {
this["TextBoxColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("45, 45, 45")]
public global::System.Drawing.Color ComboBoxColor {
get {
return ((global::System.Drawing.Color)(this["ComboBoxColor"]));
}
set {
this["ComboBoxColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("White")]
public global::System.Drawing.Color FontColor {
get {
return ((global::System.Drawing.Color)(this["FontColor"]));
}
set {
this["FontColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Microsoft Sans Serif, 9.5pt")]
[global::System.Configuration.DefaultSettingValueAttribute("Microsoft Sans Serif, 11.25pt")]
public global::System.Drawing.Font FontStyle {
get {
return ((global::System.Drawing.Font)(this["FontStyle"]));
@@ -313,7 +241,7 @@ namespace AndroidSideloader.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
public string QUhz {
get {
return ((string)(this["QUhz"]));
@@ -325,7 +253,7 @@ namespace AndroidSideloader.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
public string QUres {
get {
return ((string)(this["QUres"]));
@@ -337,7 +265,7 @@ namespace AndroidSideloader.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
public string QUy {
get {
return ((string)(this["QUy"]));
@@ -349,7 +277,7 @@ namespace AndroidSideloader.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
public string QUx {
get {
return ((string)(this["QUx"]));
@@ -361,7 +289,7 @@ namespace AndroidSideloader.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
[global::System.Configuration.DefaultSettingValueAttribute("Change Me")]
public string QUname {
get {
return ((string)(this["QUname"]));
@@ -418,5 +346,400 @@ namespace AndroidSideloader.Properties {
this["delsh"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrPckg {
get {
return ((string)(this["CurrPckg"]));
}
set {
this["CurrPckg"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ADBFolder {
get {
return ((string)(this["ADBFolder"]));
}
set {
this["ADBFolder"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool WirelessADB {
get {
return ((bool)(this["WirelessADB"]));
}
set {
this["WirelessADB"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrentGamename {
get {
return ((string)(this["CurrentGamename"]));
}
set {
this["CurrentGamename"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool PackageNameToCB {
get {
return ((bool)(this["PackageNameToCB"]));
}
set {
this["PackageNameToCB"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool EnterKeyInstall {
get {
return ((bool)(this["EnterKeyInstall"]));
}
set {
this["EnterKeyInstall"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool DownUpHeld {
get {
return ((bool)(this["DownUpHeld"]));
}
set {
this["DownUpHeld"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrentLogPath {
get {
return ((string)(this["CurrentLogPath"]));
}
set {
this["CurrentLogPath"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrentLogName {
get {
return ((string)(this["CurrentLogName"]));
}
set {
this["CurrentLogName"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrentCrashPath {
get {
return ((string)(this["CurrentCrashPath"]));
}
set {
this["CurrentCrashPath"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string CurrentCrashName {
get {
return ((string)(this["CurrentCrashName"]));
}
set {
this["CurrentCrashName"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool QUturnedon {
get {
return ((bool)(this["QUturnedon"]));
}
set {
this["QUturnedon"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool adbdebugwarned {
get {
return ((bool)(this["adbdebugwarned"]));
}
set {
this["adbdebugwarned"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool nodevicemode {
get {
return ((bool)(this["nodevicemode"]));
}
set {
this["nodevicemode"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool BMBFchecked {
get {
return ((bool)(this["BMBFchecked"]));
}
set {
this["BMBFchecked"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string GamesList {
get {
return ((string)(this["GamesList"]));
}
set {
this["GamesList"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool UploadedGameList {
get {
return ((bool)(this["UploadedGameList"]));
}
set {
this["UploadedGameList"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string GlobalUsername {
get {
return ((string)(this["GlobalUsername"]));
}
set {
this["GlobalUsername"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.DateTime lastTimeShared {
get {
return ((global::System.DateTime)(this["lastTimeShared"]));
}
set {
this["lastTimeShared"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool AutoReinstall {
get {
return ((bool)(this["AutoReinstall"]));
}
set {
this["AutoReinstall"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string NonAppPackages {
get {
return ((string)(this["NonAppPackages"]));
}
set {
this["NonAppPackages"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("04/20/1969 16:20:00")]
public global::System.DateTime LastLaunch {
get {
return ((global::System.DateTime)(this["LastLaunch"]));
}
set {
this["LastLaunch"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string SubmittedUpdates {
get {
return ((string)(this["SubmittedUpdates"]));
}
set {
this["SubmittedUpdates"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool ListUpped {
get {
return ((bool)(this["ListUpped"]));
}
set {
this["ListUpped"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("04/20/1969 16:20:00")]
public global::System.DateTime LastLaunch2 {
get {
return ((global::System.DateTime)(this["LastLaunch2"]));
}
set {
this["LastLaunch2"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool Wired {
get {
return ((bool)(this["Wired"]));
}
set {
this["Wired"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("White")]
public global::System.Drawing.Color FontColor {
get {
return ((global::System.Drawing.Color)(this["FontColor"]));
}
set {
this["FontColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("25, 25, 25")]
public global::System.Drawing.Color ComboBoxColor {
get {
return ((global::System.Drawing.Color)(this["ComboBoxColor"]));
}
set {
this["ComboBoxColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("25, 25, 25")]
public global::System.Drawing.Color SubButtonColor {
get {
return ((global::System.Drawing.Color)(this["SubButtonColor"]));
}
set {
this["SubButtonColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("25, 25, 25")]
public global::System.Drawing.Color TextBoxColor {
get {
return ((global::System.Drawing.Color)(this["TextBoxColor"]));
}
set {
this["TextBoxColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Black")]
public global::System.Drawing.Color ButtonColor {
get {
return ((global::System.Drawing.Color)(this["ButtonColor"]));
}
set {
this["ButtonColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("1, 1, 1")]
public global::System.Drawing.Color BackColor {
get {
return ((global::System.Drawing.Color)(this["BackColor"]));
}
set {
this["BackColor"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string AppPackages {
get {
return ((string)(this["AppPackages"]));
}
set {
this["AppPackages"] = value;
}
}
}
}

View File

@@ -18,31 +18,13 @@
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="userJsonOnGameInstall" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="CallUpgrade" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="BackColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">45, 45, 45</Value>
</Setting>
<Setting Name="ButtonColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">ActiveCaptionText</Value>
</Setting>
<Setting Name="SubButtonColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">64, 64, 64</Value>
</Setting>
<Setting Name="TextBoxColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">45, 45, 45</Value>
</Setting>
<Setting Name="ComboBoxColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">45, 45, 45</Value>
</Setting>
<Setting Name="FontColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">White</Value>
</Setting>
<Setting Name="FontStyle" Type="System.Drawing.Font" Scope="User">
<Value Profile="(Default)">Microsoft Sans Serif, 9.5pt</Value>
<Value Profile="(Default)">Microsoft Sans Serif, 11.25pt</Value>
</Setting>
<Setting Name="BackPicturePath" Type="System.String" Scope="User">
<Value Profile="(Default)" />
@@ -75,19 +57,19 @@
<Value Profile="(Default)" />
</Setting>
<Setting Name="QUhz" Type="System.String" Scope="User">
<Value Profile="(Default)" />
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="QUres" Type="System.String" Scope="User">
<Value Profile="(Default)" />
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="QUy" Type="System.String" Scope="User">
<Value Profile="(Default)" />
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="QUx" Type="System.String" Scope="User">
<Value Profile="(Default)" />
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="QUname" Type="System.String" Scope="User">
<Value Profile="(Default)" />
<Value Profile="(Default)">Change Me</Value>
</Setting>
<Setting Name="QUString" Type="System.String" Scope="User">
<Value Profile="(Default)" />
@@ -101,5 +83,104 @@
<Setting Name="delsh" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="CurrPckg" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="ADBFolder" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="WirelessADB" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="CurrentGamename" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="PackageNameToCB" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="EnterKeyInstall" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="DownUpHeld" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="CurrentLogPath" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="CurrentLogName" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="CurrentCrashPath" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="CurrentCrashName" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="QUturnedon" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="adbdebugwarned" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="nodevicemode" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="BMBFchecked" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="GamesList" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="UploadedGameList" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="GlobalUsername" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="lastTimeShared" Type="System.DateTime" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="AutoReinstall" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="NonAppPackages" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="LastLaunch" Type="System.DateTime" Scope="User">
<Value Profile="(Default)">04/20/1969 16:20:00</Value>
</Setting>
<Setting Name="SubmittedUpdates" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="ListUpped" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="LastLaunch2" Type="System.DateTime" Scope="User">
<Value Profile="(Default)">04/20/1969 16:20:00</Value>
</Setting>
<Setting Name="Wired" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="FontColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">White</Value>
</Setting>
<Setting Name="ComboBoxColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">25, 25, 25</Value>
</Setting>
<Setting Name="SubButtonColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">25, 25, 25</Value>
</Setting>
<Setting Name="TextBoxColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">25, 25, 25</Value>
</Setting>
<Setting Name="ButtonColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">Black</Value>
</Setting>
<Setting Name="BackColor" Type="System.Drawing.Color" Scope="User">
<Value Profile="(Default)">1, 1, 1</Value>
</Setting>
<Setting Name="AppPackages" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>

460
QuestForm.Designer.cs generated
View File

@@ -36,13 +36,8 @@ namespace AndroidSideloader
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.ResetQU = new System.Windows.Forms.Button();
this.deleteButton = new System.Windows.Forms.Button();
this.questPics = new System.Windows.Forms.Button();
this.questVids = new System.Windows.Forms.Button();
this.label11 = new System.Windows.Forms.Label();
this.QUon = new System.Windows.Forms.CheckBox();
this.button3 = new System.Windows.Forms.Button();
this.label12 = new System.Windows.Forms.Label();
this.label13 = new System.Windows.Forms.Label();
this.DeleteShots = new System.Windows.Forms.CheckBox();
@@ -59,20 +54,28 @@ namespace AndroidSideloader
this.label6 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.ResolutionLabel = new System.Windows.Forms.Label();
this.GlobalUsername = new System.Windows.Forms.TextBox();
this.FOVy = new System.Windows.Forms.TextBox();
this.FOVx = new System.Windows.Forms.TextBox();
this.UsrBox = new System.Windows.Forms.TextBox();
this.ResBox = new System.Windows.Forms.TextBox();
this.TextureResTextBox = new System.Windows.Forms.TextBox();
this.QUEnable = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.QURfrRt = new System.Windows.Forms.ComboBox();
this.RefreshRateComboBox = new System.Windows.Forms.ComboBox();
this.button1 = new AndroidSideloader.RoundButton();
this.WifiWake = new AndroidSideloader.RoundButton();
this.questVids = new AndroidSideloader.RoundButton();
this.questPics = new AndroidSideloader.RoundButton();
this.QUEnable = new AndroidSideloader.RoundButton();
this.deleteButton = new AndroidSideloader.RoundButton();
this.ResetQU = new AndroidSideloader.RoundButton();
this.button3 = new AndroidSideloader.RoundButton();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.Transparent;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.ForeColor = System.Drawing.Color.LightCyan;
this.label1.Location = new System.Drawing.Point(31, 5);
@@ -85,12 +88,13 @@ namespace AndroidSideloader
// label2
//
this.label2.AutoSize = true;
this.label2.BackColor = System.Drawing.Color.Transparent;
this.label2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label2.ForeColor = System.Drawing.Color.LightSteelBlue;
this.label2.Location = new System.Drawing.Point(70, 28);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(231, 32);
this.label2.Size = new System.Drawing.Size(230, 32);
this.label2.TabIndex = 6;
this.label2.Text = "Reboot to reset. - Turn screen off, \r\nthen back on with hold button to apply.";
this.label2.TextAlign = System.Drawing.ContentAlignment.TopCenter;
@@ -98,6 +102,7 @@ namespace AndroidSideloader
// label3
//
this.label3.AutoSize = true;
this.label3.BackColor = System.Drawing.Color.Transparent;
this.label3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label3.ForeColor = System.Drawing.Color.LightCyan;
@@ -111,77 +116,21 @@ namespace AndroidSideloader
// label4
//
this.label4.AutoSize = true;
this.label4.BackColor = System.Drawing.Color.Transparent;
this.label4.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label4.ForeColor = System.Drawing.Color.LightSteelBlue;
this.label4.Location = new System.Drawing.Point(16, 363);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(338, 16);
this.label4.Size = new System.Drawing.Size(337, 16);
this.label4.TabIndex = 6;
this.label4.Text = "Persists on device reboot. Enter 0 to reset any category.\r\n";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// ResetQU
//
this.ResetQU.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.ResetQU.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.ResetQU.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.5F);
this.ResetQU.ForeColor = System.Drawing.SystemColors.ControlLight;
this.ResetQU.Location = new System.Drawing.Point(191, 555);
this.ResetQU.Name = "ResetQU";
this.ResetQU.Size = new System.Drawing.Size(167, 23);
this.ResetQU.TabIndex = 14;
this.ResetQU.Text = "RESET ALL FIELDS";
this.ResetQU.UseVisualStyleBackColor = false;
this.ResetQU.Visible = false;
this.ResetQU.Click += new System.EventHandler(this.Clear_click);
//
// deleteButton
//
this.deleteButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.deleteButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.deleteButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.5F);
this.deleteButton.ForeColor = System.Drawing.SystemColors.ButtonHighlight;
this.deleteButton.Location = new System.Drawing.Point(13, 606);
this.deleteButton.Name = "deleteButton";
this.deleteButton.Size = new System.Drawing.Size(169, 25);
this.deleteButton.TabIndex = 15;
this.deleteButton.Text = "DELETE SAVED SETTINGS";
this.deleteButton.UseVisualStyleBackColor = false;
this.deleteButton.Visible = false;
this.deleteButton.Click += new System.EventHandler(this.DeleteButton_Click);
//
// questPics
//
this.questPics.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.questPics.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.questPics.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.5F);
this.questPics.ForeColor = System.Drawing.SystemColors.ButtonHighlight;
this.questPics.Location = new System.Drawing.Point(17, 265);
this.questPics.Name = "questPics";
this.questPics.Size = new System.Drawing.Size(165, 25);
this.questPics.TabIndex = 5;
this.questPics.Text = "SCREENSHOTS";
this.questPics.UseVisualStyleBackColor = false;
this.questPics.Click += new System.EventHandler(this.questPics_Click);
//
// questVids
//
this.questVids.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.questVids.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.questVids.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.5F);
this.questVids.ForeColor = System.Drawing.SystemColors.ButtonHighlight;
this.questVids.Location = new System.Drawing.Point(191, 265);
this.questVids.Name = "questVids";
this.questVids.Size = new System.Drawing.Size(167, 25);
this.questVids.TabIndex = 6;
this.questVids.Text = "VIDEOSHOTS";
this.questVids.UseVisualStyleBackColor = false;
this.questVids.Click += new System.EventHandler(this.questVids_Click);
//
// label11
//
this.label11.AutoSize = true;
this.label11.BackColor = System.Drawing.Color.Transparent;
this.label11.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label11.ForeColor = System.Drawing.Color.LightCyan;
@@ -195,6 +144,7 @@ namespace AndroidSideloader
// QUon
//
this.QUon.AutoSize = true;
this.QUon.BackColor = System.Drawing.Color.Transparent;
this.QUon.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.QUon.Cursor = System.Windows.Forms.Cursors.Default;
this.QUon.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
@@ -206,52 +156,41 @@ namespace AndroidSideloader
this.QUon.TabIndex = 8;
this.QUon.Text = "Enable QU Settings";
this.QUon.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.QUon.UseVisualStyleBackColor = true;
this.QUon.UseVisualStyleBackColor = false;
this.QUon.CheckedChanged += new System.EventHandler(this.QUon_CheckedChanged);
//
// button3
//
this.button3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.5F);
this.button3.ForeColor = System.Drawing.SystemColors.ButtonHighlight;
this.button3.Location = new System.Drawing.Point(101, 702);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(169, 25);
this.button3.TabIndex = 17;
this.button3.Text = "CUSTOM USER.JSON";
this.button3.UseVisualStyleBackColor = false;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// label12
//
this.label12.AutoSize = true;
this.label12.BackColor = System.Drawing.Color.Transparent;
this.label12.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label12.ForeColor = System.Drawing.Color.LightCyan;
this.label12.Location = new System.Drawing.Point(93, 656);
this.label12.Location = new System.Drawing.Point(121, 656);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(185, 20);
this.label12.Size = new System.Drawing.Size(128, 20);
this.label12.TabIndex = 6;
this.label12.Text = "Set custom user.json*";
this.label12.Text = "Set username*";
this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label13
//
this.label13.AutoSize = true;
this.label13.BackColor = System.Drawing.Color.Transparent;
this.label13.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label13.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label13.ForeColor = System.Drawing.Color.LightSteelBlue;
this.label13.Location = new System.Drawing.Point(54, 678);
this.label13.Location = new System.Drawing.Point(83, 678);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(262, 16);
this.label13.Size = new System.Drawing.Size(203, 16);
this.label13.TabIndex = 6;
this.label13.Text = "*For games that dont work with QU settings.";
this.label13.Text = "*For games not released by -QU.";
this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// DeleteShots
//
this.DeleteShots.AutoSize = true;
this.DeleteShots.BackColor = System.Drawing.Color.Transparent;
this.DeleteShots.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.DeleteShots.Cursor = System.Windows.Forms.Cursors.Default;
this.DeleteShots.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
@@ -263,7 +202,7 @@ namespace AndroidSideloader
this.DeleteShots.TabIndex = 7;
this.DeleteShots.Text = "Delete files on Quest after transfer";
this.DeleteShots.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.DeleteShots.UseVisualStyleBackColor = true;
this.DeleteShots.UseVisualStyleBackColor = false;
this.DeleteShots.CheckedChanged += new System.EventHandler(this.DeleteShots_CheckedChanged);
//
// splitter1
@@ -276,25 +215,25 @@ namespace AndroidSideloader
//
// label10
//
this.label10.BackColor = System.Drawing.Color.White;
this.label10.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.label10.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label10.Location = new System.Drawing.Point(-7, 327);
this.label10.Location = new System.Drawing.Point(-4, 327);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(394, 3);
this.label10.TabIndex = 15;
//
// label14
//
this.label14.BackColor = System.Drawing.Color.White;
this.label14.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.label14.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label14.Location = new System.Drawing.Point(-15, 208);
this.label14.Location = new System.Drawing.Point(-15, 211);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(394, 3);
this.label14.TabIndex = 17;
//
// label15
//
this.label15.BackColor = System.Drawing.Color.White;
this.label15.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.label15.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label15.Location = new System.Drawing.Point(-12, 646);
this.label15.Name = "label15";
@@ -304,22 +243,22 @@ namespace AndroidSideloader
// label16
//
this.label16.AutoSize = true;
this.label16.BackColor = System.Drawing.Color.Transparent;
this.label16.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label16.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label16.ForeColor = System.Drawing.Color.LightSteelBlue;
this.label16.Location = new System.Drawing.Point(14, 241);
this.label16.Name = "label16";
this.label16.Size = new System.Drawing.Size(343, 16);
this.label16.Size = new System.Drawing.Size(342, 16);
this.label16.TabIndex = 6;
this.label16.Text = "Desktop\\Quest Screenshots Desktop\\Quest Videoshots";
this.label16.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// CPUComboBox
//
this.CPUComboBox.BackColor = global::AndroidSideloader.Properties.Settings.Default.ComboBoxColor;
this.CPUComboBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.CPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.CPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.CPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "ComboBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.CPUComboBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.CPUComboBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.CPUComboBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
@@ -330,18 +269,18 @@ namespace AndroidSideloader
"2",
"3",
"4"});
this.CPUComboBox.Location = new System.Drawing.Point(13, 126);
this.CPUComboBox.Location = new System.Drawing.Point(13, 123);
this.CPUComboBox.Name = "CPUComboBox";
this.CPUComboBox.Size = new System.Drawing.Size(345, 21);
this.CPUComboBox.Size = new System.Drawing.Size(346, 26);
this.CPUComboBox.TabIndex = 2;
this.CPUComboBox.Text = "Select CPU level (0 for default)";
this.CPUComboBox.SelectedIndexChanged += new System.EventHandler(this.CPUComboBox_SelectedIndexChanged);
//
// GPUComboBox
//
this.GPUComboBox.BackColor = global::AndroidSideloader.Properties.Settings.Default.ComboBoxColor;
this.GPUComboBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.GPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.GPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.GPUComboBox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "ComboBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.GPUComboBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.GPUComboBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.GPUComboBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
@@ -352,15 +291,17 @@ namespace AndroidSideloader
"2",
"3",
"4"});
this.GPUComboBox.Location = new System.Drawing.Point(13, 97);
this.GPUComboBox.Location = new System.Drawing.Point(13, 94);
this.GPUComboBox.Name = "GPUComboBox";
this.GPUComboBox.Size = new System.Drawing.Size(345, 21);
this.GPUComboBox.Size = new System.Drawing.Size(346, 26);
this.GPUComboBox.TabIndex = 1;
this.GPUComboBox.Text = "Select GPU level (0 for default)";
this.GPUComboBox.SelectedIndexChanged += new System.EventHandler(this.GPUComboBox_SelectedIndexChanged);
//
// label7
//
this.label7.AutoSize = true;
this.label7.BackColor = System.Drawing.Color.Transparent;
this.label7.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label7.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label7.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
@@ -368,15 +309,15 @@ namespace AndroidSideloader
this.label7.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label7.Location = new System.Drawing.Point(13, 532);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(44, 15);
this.label7.Size = new System.Drawing.Size(56, 18);
this.label7.TabIndex = 3;
this.label7.Text = "Fov - X";
this.label7.Visible = false;
this.label7.Click += new System.EventHandler(this.label7_Click);
//
// label8
//
this.label8.AutoSize = true;
this.label8.BackColor = System.Drawing.Color.Transparent;
this.label8.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label8.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label8.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
@@ -384,23 +325,23 @@ namespace AndroidSideloader
this.label8.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label8.Location = new System.Drawing.Point(191, 532);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(43, 15);
this.label8.Size = new System.Drawing.Size(55, 18);
this.label8.TabIndex = 3;
this.label8.Text = "Fov - Y";
this.label8.Visible = false;
this.label8.Click += new System.EventHandler(this.label8_Click);
//
// label9
//
this.label9.AutoSize = true;
this.label9.BackColor = System.Drawing.Color.Transparent;
this.label9.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label9.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label9.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label9.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.label9.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label9.Location = new System.Drawing.Point(11, 583);
this.label9.Location = new System.Drawing.Point(12, 583);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(79, 15);
this.label9.Size = new System.Drawing.Size(95, 18);
this.label9.TabIndex = 3;
this.label9.Text = "Refresh Rate";
this.label9.Visible = false;
@@ -408,48 +349,63 @@ namespace AndroidSideloader
// label6
//
this.label6.AutoSize = true;
this.label6.BackColor = System.Drawing.Color.Transparent;
this.label6.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label6.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label6.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label6.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.label6.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label6.Location = new System.Drawing.Point(13, 484);
this.label6.Location = new System.Drawing.Point(93, 484);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(142, 15);
this.label6.Size = new System.Drawing.Size(173, 18);
this.label6.TabIndex = 3;
this.label6.Text = "Enter Custom Username";
this.label6.Visible = false;
this.label6.Click += new System.EventHandler(this.label6_Click);
//
// label5
//
this.label5.AutoSize = true;
this.label5.BackColor = System.Drawing.Color.Transparent;
this.label5.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label5.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label5.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.label5.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.label5.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.label5.Location = new System.Drawing.Point(12, 434);
this.label5.Location = new System.Drawing.Point(16, 434);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(278, 15);
this.label5.Size = new System.Drawing.Size(337, 18);
this.label5.TabIndex = 3;
this.label5.Text = "Custom Resolution Width (Height auto calculated)";
this.label5.Visible = false;
this.label5.Click += new System.EventHandler(this.label5_Click);
//
// ResolutionLabel
//
this.ResolutionLabel.AutoSize = true;
this.ResolutionLabel.BackColor = System.Drawing.Color.Transparent;
this.ResolutionLabel.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.ResolutionLabel.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.ResolutionLabel.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.ResolutionLabel.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.ResolutionLabel.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.ResolutionLabel.Location = new System.Drawing.Point(11, 183);
this.ResolutionLabel.Location = new System.Drawing.Point(12, 183);
this.ResolutionLabel.Name = "ResolutionLabel";
this.ResolutionLabel.Size = new System.Drawing.Size(163, 15);
this.ResolutionLabel.Size = new System.Drawing.Size(153, 18);
this.ResolutionLabel.TabIndex = 3;
this.ResolutionLabel.Text = "Resolution (p eye, 0=default)";
this.ResolutionLabel.Text = "Resolution (0=default)";
//
// GlobalUsername
//
this.GlobalUsername.BackColor = global::AndroidSideloader.Properties.Settings.Default.TextBoxColor;
this.GlobalUsername.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.GlobalUsername.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.GlobalUsername.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.GlobalUsername.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.GlobalUsername.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.GlobalUsername.Location = new System.Drawing.Point(12, 701);
this.GlobalUsername.Name = "GlobalUsername";
this.GlobalUsername.Size = new System.Drawing.Size(262, 24);
this.GlobalUsername.TabIndex = 12;
this.GlobalUsername.TextChanged += new System.EventHandler(this.GlobalUsername_TextChanged);
//
// FOVy
//
@@ -459,9 +415,9 @@ namespace AndroidSideloader
this.FOVy.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.FOVy.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.FOVy.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.FOVy.Location = new System.Drawing.Point(191, 507);
this.FOVy.Location = new System.Drawing.Point(189, 507);
this.FOVy.Name = "FOVy";
this.FOVy.Size = new System.Drawing.Size(167, 20);
this.FOVy.Size = new System.Drawing.Size(169, 24);
this.FOVy.TabIndex = 12;
this.FOVy.Text = "0";
this.FOVy.Visible = false;
@@ -477,7 +433,7 @@ namespace AndroidSideloader
this.FOVx.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.FOVx.Location = new System.Drawing.Point(13, 507);
this.FOVx.Name = "FOVx";
this.FOVx.Size = new System.Drawing.Size(169, 20);
this.FOVx.Size = new System.Drawing.Size(169, 24);
this.FOVx.TabIndex = 11;
this.FOVx.Text = "0";
this.FOVx.Visible = false;
@@ -493,7 +449,7 @@ namespace AndroidSideloader
this.UsrBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.UsrBox.Location = new System.Drawing.Point(13, 459);
this.UsrBox.Name = "UsrBox";
this.UsrBox.Size = new System.Drawing.Size(345, 20);
this.UsrBox.Size = new System.Drawing.Size(345, 24);
this.UsrBox.TabIndex = 10;
this.UsrBox.Text = "0";
this.UsrBox.Visible = false;
@@ -509,7 +465,7 @@ namespace AndroidSideloader
this.ResBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.ResBox.Location = new System.Drawing.Point(13, 409);
this.ResBox.Name = "ResBox";
this.ResBox.Size = new System.Drawing.Size(345, 20);
this.ResBox.Size = new System.Drawing.Size(345, 24);
this.ResBox.TabIndex = 9;
this.ResBox.Text = "0";
this.ResBox.Visible = false;
@@ -523,47 +479,12 @@ namespace AndroidSideloader
this.TextureResTextBox.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.TextureResTextBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.TextureResTextBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.TextureResTextBox.Location = new System.Drawing.Point(13, 155);
this.TextureResTextBox.Location = new System.Drawing.Point(13, 152);
this.TextureResTextBox.Name = "TextureResTextBox";
this.TextureResTextBox.Size = new System.Drawing.Size(169, 20);
this.TextureResTextBox.Size = new System.Drawing.Size(167, 24);
this.TextureResTextBox.TabIndex = 3;
this.TextureResTextBox.Text = "0";
//
// QUEnable
//
this.QUEnable.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.QUEnable.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.QUEnable.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.QUEnable.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.QUEnable.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.QUEnable.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.QUEnable.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.QUEnable.Location = new System.Drawing.Point(191, 606);
this.QUEnable.Name = "QUEnable";
this.QUEnable.Size = new System.Drawing.Size(169, 25);
this.QUEnable.TabIndex = 16;
this.QUEnable.Text = "APPLY";
this.QUEnable.UseVisualStyleBackColor = false;
this.QUEnable.Visible = false;
this.QUEnable.Click += new System.EventHandler(this.QUEnable_Click);
//
// button1
//
this.button1.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.button1.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.button1.Location = new System.Drawing.Point(191, 155);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(167, 25);
this.button1.TabIndex = 4;
this.button1.Text = "APPLY";
this.button1.UseVisualStyleBackColor = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// QURfrRt
//
this.QURfrRt.BackColor = global::AndroidSideloader.Properties.Settings.Default.ComboBoxColor;
@@ -579,9 +500,9 @@ namespace AndroidSideloader
"72",
"90",
"120"});
this.QURfrRt.Location = new System.Drawing.Point(12, 555);
this.QURfrRt.Location = new System.Drawing.Point(13, 555);
this.QURfrRt.Name = "QURfrRt";
this.QURfrRt.Size = new System.Drawing.Size(170, 21);
this.QURfrRt.Size = new System.Drawing.Size(170, 26);
this.QURfrRt.TabIndex = 13;
this.QURfrRt.Text = "0";
this.QURfrRt.Visible = false;
@@ -589,10 +510,9 @@ namespace AndroidSideloader
//
// RefreshRateComboBox
//
this.RefreshRateComboBox.BackColor = global::AndroidSideloader.Properties.Settings.Default.ComboBoxColor;
this.RefreshRateComboBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.RefreshRateComboBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.RefreshRateComboBox.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.RefreshRateComboBox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "ComboBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.RefreshRateComboBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.RefreshRateComboBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.RefreshRateComboBox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
@@ -601,29 +521,202 @@ namespace AndroidSideloader
"72",
"90",
"120"});
this.RefreshRateComboBox.Location = new System.Drawing.Point(13, 68);
this.RefreshRateComboBox.Location = new System.Drawing.Point(13, 65);
this.RefreshRateComboBox.Name = "RefreshRateComboBox";
this.RefreshRateComboBox.Size = new System.Drawing.Size(345, 21);
this.RefreshRateComboBox.Size = new System.Drawing.Size(346, 26);
this.RefreshRateComboBox.TabIndex = 0;
this.RefreshRateComboBox.Text = "Select refresh rate";
this.RefreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateComboBox_SelectedIndexChanged);
//
// button1
//
this.button1.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button1.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button1.BackColor = System.Drawing.Color.Transparent;
this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.button1.ForeColor = System.Drawing.Color.White;
this.button1.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button1.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button1.Location = new System.Drawing.Point(189, 152);
this.button1.Name = "button1";
this.button1.Radius = 5;
this.button1.Size = new System.Drawing.Size(170, 25);
this.button1.Stroke = true;
this.button1.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.button1.TabIndex = 19;
this.button1.Text = "APPLY";
this.button1.Transparency = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// WifiWake
//
this.WifiWake.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.WifiWake.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.WifiWake.BackColor = System.Drawing.Color.Transparent;
this.WifiWake.DialogResult = System.Windows.Forms.DialogResult.OK;
this.WifiWake.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.WifiWake.ForeColor = System.Drawing.Color.White;
this.WifiWake.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.WifiWake.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.WifiWake.Location = new System.Drawing.Point(189, 180);
this.WifiWake.Name = "WifiWake";
this.WifiWake.Radius = 5;
this.WifiWake.Size = new System.Drawing.Size(170, 25);
this.WifiWake.Stroke = true;
this.WifiWake.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.WifiWake.TabIndex = 20;
this.WifiWake.Text = "ENABLE WIFI WAKE";
this.WifiWake.Transparency = false;
this.WifiWake.Click += new System.EventHandler(this.WifiWake_Click);
//
// questVids
//
this.questVids.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.questVids.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.questVids.BackColor = System.Drawing.Color.Transparent;
this.questVids.DialogResult = System.Windows.Forms.DialogResult.OK;
this.questVids.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.questVids.ForeColor = System.Drawing.Color.White;
this.questVids.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.questVids.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.questVids.Location = new System.Drawing.Point(189, 265);
this.questVids.Name = "questVids";
this.questVids.Radius = 5;
this.questVids.Size = new System.Drawing.Size(167, 25);
this.questVids.Stroke = true;
this.questVids.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.questVids.TabIndex = 21;
this.questVids.Text = "VIDEOSHOTS";
this.questVids.Transparency = false;
this.questVids.Click += new System.EventHandler(this.questVids_Click);
//
// questPics
//
this.questPics.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.questPics.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.questPics.BackColor = System.Drawing.Color.Transparent;
this.questPics.DialogResult = System.Windows.Forms.DialogResult.OK;
this.questPics.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.questPics.ForeColor = System.Drawing.Color.White;
this.questPics.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.questPics.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.questPics.Location = new System.Drawing.Point(15, 265);
this.questPics.Name = "questPics";
this.questPics.Radius = 5;
this.questPics.Size = new System.Drawing.Size(165, 25);
this.questPics.Stroke = true;
this.questPics.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.questPics.TabIndex = 22;
this.questPics.Text = "SCREENSHOTS";
this.questPics.Transparency = false;
this.questPics.Click += new System.EventHandler(this.questPics_Click);
//
// QUEnable
//
this.QUEnable.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.QUEnable.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.QUEnable.BackColor = System.Drawing.Color.Transparent;
this.QUEnable.DialogResult = System.Windows.Forms.DialogResult.OK;
this.QUEnable.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.QUEnable.ForeColor = System.Drawing.Color.White;
this.QUEnable.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.QUEnable.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.QUEnable.Location = new System.Drawing.Point(189, 606);
this.QUEnable.Name = "QUEnable";
this.QUEnable.Radius = 5;
this.QUEnable.Size = new System.Drawing.Size(170, 25);
this.QUEnable.Stroke = true;
this.QUEnable.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.QUEnable.TabIndex = 24;
this.QUEnable.Text = "APPLY";
this.QUEnable.Transparency = false;
this.QUEnable.Click += new System.EventHandler(this.QUEnable_Click);
//
// deleteButton
//
this.deleteButton.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.deleteButton.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.deleteButton.BackColor = System.Drawing.Color.Transparent;
this.deleteButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.deleteButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.deleteButton.ForeColor = System.Drawing.Color.White;
this.deleteButton.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.deleteButton.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.deleteButton.Location = new System.Drawing.Point(13, 606);
this.deleteButton.Name = "deleteButton";
this.deleteButton.Radius = 5;
this.deleteButton.Size = new System.Drawing.Size(167, 25);
this.deleteButton.Stroke = true;
this.deleteButton.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.deleteButton.TabIndex = 25;
this.deleteButton.Text = "DELETE SAVED";
this.deleteButton.Transparency = false;
this.deleteButton.Click += new System.EventHandler(this.DeleteButton_Click);
//
// ResetQU
//
this.ResetQU.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.ResetQU.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.ResetQU.BackColor = System.Drawing.Color.Transparent;
this.ResetQU.DialogResult = System.Windows.Forms.DialogResult.OK;
this.ResetQU.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.ResetQU.ForeColor = System.Drawing.Color.White;
this.ResetQU.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.ResetQU.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.ResetQU.Location = new System.Drawing.Point(189, 555);
this.ResetQU.Name = "ResetQU";
this.ResetQU.Radius = 5;
this.ResetQU.Size = new System.Drawing.Size(168, 28);
this.ResetQU.Stroke = true;
this.ResetQU.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.ResetQU.TabIndex = 26;
this.ResetQU.Text = "RESET ALL FIELDS";
this.ResetQU.Transparency = false;
this.ResetQU.Click += new System.EventHandler(this.ResetQU_click);
//
// button3
//
this.button3.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button3.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button3.BackColor = System.Drawing.Color.Transparent;
this.button3.DialogResult = System.Windows.Forms.DialogResult.OK;
this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.button3.ForeColor = System.Drawing.Color.White;
this.button3.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button3.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button3.Location = new System.Drawing.Point(278, 700);
this.button3.Name = "button3";
this.button3.Radius = 5;
this.button3.Size = new System.Drawing.Size(81, 25);
this.button3.Stroke = true;
this.button3.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.button3.TabIndex = 27;
this.button3.Text = "APPLY";
this.button3.Transparency = false;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// QuestForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.ClientSize = new System.Drawing.Size(370, 737);
this.Controls.Add(this.button3);
this.Controls.Add(this.ResetQU);
this.Controls.Add(this.deleteButton);
this.Controls.Add(this.QUEnable);
this.Controls.Add(this.questPics);
this.Controls.Add(this.questVids);
this.Controls.Add(this.WifiWake);
this.Controls.Add(this.button1);
this.Controls.Add(this.label15);
this.Controls.Add(this.label14);
this.Controls.Add(this.label10);
this.Controls.Add(this.splitter1);
this.Controls.Add(this.questVids);
this.Controls.Add(this.questPics);
this.Controls.Add(this.button3);
this.Controls.Add(this.deleteButton);
this.Controls.Add(this.DeleteShots);
this.Controls.Add(this.QUon);
this.Controls.Add(this.ResetQU);
this.Controls.Add(this.label13);
this.Controls.Add(this.label4);
this.Controls.Add(this.label16);
@@ -640,19 +733,20 @@ namespace AndroidSideloader
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.ResolutionLabel);
this.Controls.Add(this.GlobalUsername);
this.Controls.Add(this.FOVy);
this.Controls.Add(this.FOVx);
this.Controls.Add(this.UsrBox);
this.Controls.Add(this.ResBox);
this.Controls.Add(this.TextureResTextBox);
this.Controls.Add(this.QUEnable);
this.Controls.Add(this.button1);
this.Controls.Add(this.QURfrRt);
this.Controls.Add(this.RefreshRateComboBox);
this.MaximumSize = new System.Drawing.Size(386, 808);
this.MinimumSize = new System.Drawing.Size(386, 608);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximumSize = new System.Drawing.Size(386, 776);
this.MinimumSize = new System.Drawing.Size(386, 776);
this.Name = "QuestForm";
this.ShowIcon = false;
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Quest settings";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.QuestForm_FormClosed);
@@ -665,7 +759,6 @@ namespace AndroidSideloader
#endregion
private System.Windows.Forms.ComboBox RefreshRateComboBox;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox TextureResTextBox;
private System.Windows.Forms.Label ResolutionLabel;
private System.Windows.Forms.ComboBox GPUComboBox;
@@ -679,19 +772,13 @@ namespace AndroidSideloader
private TextBox UsrBox;
private TextBox FOVx;
private TextBox FOVy;
private Button QUEnable;
private Button ResetQU;
private Label label5;
private Label label6;
private Label label7;
private Label label8;
private Label label9;
private Button deleteButton;
private Button questPics;
private Button questVids;
private Label label11;
private CheckBox QUon;
private Button button3;
private Label label12;
private Label label13;
private CheckBox DeleteShots;
@@ -700,6 +787,15 @@ namespace AndroidSideloader
private Label label14;
private Label label15;
private Label label16;
private TextBox GlobalUsername;
private RoundButton button1;
private RoundButton WifiWake;
private RoundButton questVids;
private RoundButton questPics;
private RoundButton QUEnable;
private RoundButton deleteButton;
private RoundButton ResetQU;
private RoundButton button3;
}
}

View File

@@ -37,7 +37,8 @@ namespace AndroidSideloader
if (TextureResTextBox.Text.Length > 0)
{
ADB.WakeDevice();
Int32.TryParse(TextureResTextBox.Text, out int result);
int result;
Int32.TryParse(TextureResTextBox.Text, out result);
ADB.RunAdbCommandToString($"shell settings put global texture_size_Global {TextureResTextBox.Text}");
ADB.RunAdbCommandToString($"shell setprop debug.oculus.textureWidth {TextureResTextBox.Text}");
ADB.RunAdbCommandToString($"shell setprop debug.oculus.textureHeight {TextureResTextBox.Text}");
@@ -61,17 +62,17 @@ namespace AndroidSideloader
}
public static void setLength(int value)
public static void setLength(Int32 value)
{
result = new string[value];
}
private void Clear_click(object sender, EventArgs e)
public void ResetQU_click(object sender, EventArgs e)
{
ResBox.Text = ("0");
UsrBox.Clear();
UsrBox.Text = ("Change Me");
FOVx.Text = ("0");
FOVy.Text = ("0");
QURfrRt.SelectedIndex = 0;
@@ -107,6 +108,7 @@ namespace AndroidSideloader
FOVy.Text = Properties.Settings.Default.QUy;
FOVx.Text = Properties.Settings.Default.QUx;
QURfrRt.SelectedValue = Properties.Settings.Default.QUhz;
Properties.Settings.Default.QUturnedon = true;
}
else if (!QUon.Checked)
{
@@ -124,8 +126,10 @@ namespace AndroidSideloader
label9.Visible = false;
label10.Visible = false;
deleteButton.Visible = false;
Properties.Settings.Default.QUturnedon = false;
MessageBox.Show("Ok, Deleted your custom settings file.\nIf you would like to re-enable return here and apply settings again");
File.Delete($"{Properties.Settings.Default.MainDir}\\Config.Json");
File.Delete($"{Environment.CurrentDirectory}\\Config.Json");
File.Delete($"{Environment.CurrentDirectory}\\delete_settings");
}
}
@@ -145,7 +149,7 @@ namespace AndroidSideloader
MessageBox.Show("OK, any -QU packages installed will have these settings applied!\nTo delete settings: goto main app window, select a game with top menu, and click \"Remove QU Setting\"");
if (QUon.Checked)
{
Properties.Settings.Default.QUturnedon = true;
Random r = new Random();
int x = r.Next(999999999);
@@ -165,9 +169,13 @@ namespace AndroidSideloader
Properties.Settings.Default.QUString = $"\"refresh_rate\":{selected},\"eye_texture_width\":{ResBox.Text},\"fov_x\":{FOVx.Text},\"fov_y\":{FOVy.Text},\"username\":\"{UsrBox.Text}\"}}";
Properties.Settings.Default.QUStringF = $"{{\"user_id\":{sum},\"app_id\":\"{sum2}\",";
Properties.Settings.Default.Save();
File.WriteAllText("delete_settings", "");
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\delete_settings", "");
string boff = Properties.Settings.Default.QUStringF + Properties.Settings.Default.QUString;
File.WriteAllText("config.json", boff);
File.WriteAllText($"{Properties.Settings.Default.MainDir}\\config.json", boff);
}
else
{
Properties.Settings.Default.QUturnedon = false;
}
@@ -203,6 +211,8 @@ namespace AndroidSideloader
{
if (Properties.Settings.Default.delsh)
DeleteShots.Checked = true;
else
DeleteShots.Checked = false;
if (Properties.Settings.Default.QUsett)
{
ResBox.Text = Properties.Settings.Default.QUres;
@@ -212,10 +222,9 @@ namespace AndroidSideloader
QURfrRt.Text = Properties.Settings.Default.QUhz;
QUon.Checked = true;
if (settingsexist)
QUSon = true;
QUSon = true;
}
GlobalUsername.Text = Properties.Settings.Default.GlobalUsername;
}
private void ResBox_TextChanged(object sender, EventArgs e)
@@ -281,8 +290,8 @@ namespace AndroidSideloader
private void questVids_Click(object sender, EventArgs e)
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
if (!Directory.Exists($"{path}\\Quest ScreenShots"))
Directory.CreateDirectory($"{path}\\Quest ScreenShots");
if (!Directory.Exists($"{path}\\Quest VideoShots"))
Directory.CreateDirectory($"{path}\\Quest VideoShots");
MessageBox.Show("Please wait until you get the message that the transfer has finished.");
ADB.WakeDevice();
Program.form.ChangeTitle("Pulling files...");
@@ -301,26 +310,63 @@ namespace AndroidSideloader
}
private void button3_Click(object sender, EventArgs e)
{
UsernameForm Form = new UsernameForm();
Form.Show();
if (GlobalUsername.Text.Contains(" "))
{
MessageBox.Show("Usernames with a space are not permitted.", "Detected a space in username!");
}
else
{
ADB.RunAdbCommandToString($"shell settings put global username {GlobalUsername.Text}");
MessageBox.Show($"Username set as {GlobalUsername.Text}", "Success");
}
}
private void label5_Click(object sender, EventArgs e)
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
private void WifiWake_Click(object sender, EventArgs e)
{
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_available 1");
ADB.RunAdbCommandToString("shell settings put global wifi_wakeup_enabled 1");
MessageBox.Show("Wake on Wifi enabled!\n\nNOTE: This requires having wireless ADB enabled to work. (Obviously)");
}
private void GlobalUsername_TextChanged(object sender, EventArgs e)
{
if (GlobalUsername.TextLength > 0)
button3.Enabled = true;
else
button3.Enabled = false;
Properties.Settings.Default.GlobalUsername = GlobalUsername.Text;
Properties.Settings.Default.Save();
}
private void RefreshRateComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void label6_Click(object sender, EventArgs e)
private void CPUComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void label8_Click(object sender, EventArgs e)
{
}
private void label7_Click(object sender, EventArgs e)
private void GPUComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
}

219
RCLONE.cs
View File

@@ -2,6 +2,8 @@
using System.Diagnostics;
using System.Text;
using System.IO;
using System.Windows.Forms;
using JR.Utils.GUI.Forms;
namespace AndroidSideloader
{
@@ -25,20 +27,21 @@ namespace AndroidSideloader
}
//Change if you want to use a config
public static string configPath = ""; // ".\\a"
public static string downloadConfigPath = "vrp.download.config";
public static string uploadConfigPath = "vrp.upload.config";
public static string rclonepw = "";
private static Process rclone = new Process();
//Run rclone command
public static ProcessOutput runRcloneCommand(string command, string bandwithLimit = "")
public static ProcessOutput runRcloneCommand_DownloadConfig(string command, string bandwithLimit = "")
{
if (!MainForm.HasInternet) return new ProcessOutput("", "No internet");
if (!MainForm.HasInternet || MainForm.isOffline)
{
return new ProcessOutput("", "No internet");
}
//Set the password for rclone configs
Environment.SetEnvironmentVariable("RCLONE_CRYPT_REMOTE", rclonepw);
Environment.SetEnvironmentVariable("RCLONE_CONFIG_PASS", rclonepw);
ProcessOutput prcoutput = new ProcessOutput();
//Rclone output is unicode, else it will show garbage instead of unicode characters
rclone.StartInfo.StandardOutputEncoding = Encoding.UTF8;
@@ -51,16 +54,20 @@ namespace AndroidSideloader
}
//set configpath if there is any
if (configPath.Length > 0)
if (downloadConfigPath.Length > 0)
{
command += $" --config {configPath}";
command += $" --config {downloadConfigPath}";
}
//set rclonepw
if (rclonepw.Length > 0)
command += " --ask-password=false";
Logger.Log($"Running Rclone command: {command}");
string logcmd = Utilities.StringUtilities.RemoveEverythingBeforeFirst(command, "rclone.exe");
if (logcmd.Contains($"\"{Properties.Settings.Default.CurrentLogPath}\""))
logcmd = logcmd.Replace($"\"{Properties.Settings.Default.CurrentLogPath}\"", $"\"{Properties.Settings.Default.CurrentLogName}\"");
if (logcmd.Contains(Environment.CurrentDirectory))
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
Logger.Log($"Running Rclone command: {logcmd}");
rclone.StartInfo.FileName = Environment.CurrentDirectory + "\\rclone\\rclone.exe";
rclone.StartInfo.Arguments = command;
@@ -74,7 +81,6 @@ namespace AndroidSideloader
rclone.StartInfo.CreateNoWindow = false;
rclone.StartInfo.UseShellExecute = false;
rclone.Start();
rclone.StandardInput.WriteLine(command);
rclone.StandardInput.Flush();
rclone.StandardInput.Close();
@@ -84,25 +90,210 @@ namespace AndroidSideloader
rclone.WaitForExit();
//if there is one of these errors, we switch the mirrors
if (error.Contains("cannot fetch token") || error.Contains("authError") || (error.Contains("quota") && error.Contains("exceeded")))
if (error.Contains("400 Bad Request") || error.Contains("cannot fetch token") || error.Contains("authError") || error.Contains("quota") || error.Contains("exceeded") || error.Contains("directory not found") || error.Contains("Failed to"))
{
string oldRemote = MainForm.currentRemote;
try
{
Program.form.SwitchMirrors();
}
catch
{
return new ProcessOutput("All mirrors are on quota or down...", "All mirrors are on quota or down...");
}
prcoutput = runRcloneCommand(originalCommand.Replace(oldRemote, MainForm.currentRemote), bandwithLimit);
prcoutput = runRcloneCommand_DownloadConfig(originalCommand.Replace(oldRemote, MainForm.currentRemote), bandwithLimit);
}
else
{
prcoutput.Output = output;
prcoutput.Error = error;
}
Logger.Log($"Rclone error: {error}\nRclone Output: {output}");
if (!output.Contains("Game Name;Release Name;") && !output.Contains("package:") && !output.Contains(".meta"))
{
if (!string.IsNullOrWhiteSpace(error))
{
Logger.Log($"Rclone error: {error}\n");
}
if (!string.IsNullOrWhiteSpace(output))
{
Logger.Log($"Rclone Output: {output}");
}
}
if (output.Contains("There is not enough space"))
{
FlexibleMessageBox.Show("There isn't enough space on your PC to properly install this game. Please have at least 2x the size of the game you are trying to download/install available on the drive where Rookie is installed.", "NOT ENOUGH SPACE");
}
return prcoutput;
}
public static ProcessOutput runRcloneCommand_UploadConfig(string command, string bandwithLimit = "")
{
if (!MainForm.HasInternet || MainForm.isOffline)
{
return new ProcessOutput("", "No internet");
}
ProcessOutput prcoutput = new ProcessOutput();
//Rclone output is unicode, else it will show garbage instead of unicode characters
rclone.StartInfo.StandardOutputEncoding = Encoding.UTF8;
string originalCommand = command;
//set bandwidth limit
if (bandwithLimit.Length > 0)
{
command += $" --bwlimit={bandwithLimit}";
}
//set configpath if there is any
if (uploadConfigPath.Length > 0)
{
command += $" --config {uploadConfigPath}";
}
string logcmd = Utilities.StringUtilities.RemoveEverythingBeforeFirst(command, "rclone.exe");
if (logcmd.Contains($"\"{Properties.Settings.Default.CurrentLogPath}\""))
logcmd = logcmd.Replace($"\"{Properties.Settings.Default.CurrentLogPath}\"", $"\"{Properties.Settings.Default.CurrentLogName}\"");
if (logcmd.Contains(Environment.CurrentDirectory))
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
Logger.Log($"Running Rclone command: {logcmd}");
command += " --checkers 0 --no-check-dest --retries 1";
rclone.StartInfo.FileName = Environment.CurrentDirectory + "\\rclone\\rclone.exe";
rclone.StartInfo.Arguments = command;
rclone.StartInfo.RedirectStandardInput = true;
rclone.StartInfo.RedirectStandardError = true;
rclone.StartInfo.RedirectStandardOutput = true;
rclone.StartInfo.WorkingDirectory = Environment.CurrentDirectory + "\\rclone";
rclone.StartInfo.CreateNoWindow = true;
//On debug we want to see when rclone is open
if (MainForm.debugMode == true)
rclone.StartInfo.CreateNoWindow = false;
rclone.StartInfo.UseShellExecute = false;
rclone.Start();
rclone.StandardInput.WriteLine(command);
rclone.StandardInput.Flush();
rclone.StandardInput.Close();
string output = rclone.StandardOutput.ReadToEnd();
string error = rclone.StandardError.ReadToEnd();
rclone.WaitForExit();
//if there is one of these errors, we switch the mirrors
if (error.Contains("400 Bad Request") || error.Contains("cannot fetch token") || error.Contains("authError") || error.Contains("quota") || error.Contains("exceeded") || error.Contains("directory not found") || error.Contains("Failed to"))
{
Logger.Log(error);
return new ProcessOutput("Upload Failed.", "Upload failed.");
}
else
{
prcoutput.Output = output;
prcoutput.Error = error;
}
if (!output.Contains("Game Name;Release Name;") && !output.Contains("package:") && !output.Contains(".meta"))
{
if (!string.IsNullOrWhiteSpace(error))
{
Logger.Log($"Rclone error: {error}\n");
}
if (!string.IsNullOrWhiteSpace(output))
{
Logger.Log($"Rclone Output: {output}");
}
}
if (output.Contains("There is not enough space"))
{
FlexibleMessageBox.Show("There isn't enough space on your PC to properly install this game. Please have at least 2x the size of the game you are trying to download/install available on the drive where Rookie is installed.", "NOT ENOUGH SPACE");
}
return prcoutput;
}
public static ProcessOutput runRcloneCommand_PublicConfig(string command, string bandwithLimit = "")
{
if (!MainForm.HasInternet || MainForm.isOffline)
{
return new ProcessOutput("", "No internet");
}
ProcessOutput prcoutput = new ProcessOutput();
//Rclone output is unicode, else it will show garbage instead of unicode characters
rclone.StartInfo.StandardOutputEncoding = Encoding.UTF8;
string originalCommand = command;
//set bandwidth limit
if (bandwithLimit.Length > 0)
{
command += $" --bwlimit={bandwithLimit}";
}
string logcmd = Utilities.StringUtilities.RemoveEverythingBeforeFirst(command, "rclone.exe");
if (logcmd.Contains($"\"{Properties.Settings.Default.CurrentLogPath}\""))
logcmd = logcmd.Replace($"\"{Properties.Settings.Default.CurrentLogPath}\"", $"\"{Properties.Settings.Default.CurrentLogName}\"");
if (logcmd.Contains(Environment.CurrentDirectory))
logcmd = logcmd.Replace($"{Environment.CurrentDirectory}", $"CurrentDirectory");
Logger.Log($"Running Rclone command: {logcmd}");
//set http source & args
command += $" --http-url {MainForm.PublicConfigFile.BaseUri} {MainForm.PublicMirrorExtraArgs}";
rclone.StartInfo.FileName = Environment.CurrentDirectory + "\\rclone\\rclone.exe";
rclone.StartInfo.Arguments = command;
rclone.StartInfo.RedirectStandardInput = true;
rclone.StartInfo.RedirectStandardError = true;
rclone.StartInfo.RedirectStandardOutput = true;
rclone.StartInfo.WorkingDirectory = Environment.CurrentDirectory + "\\rclone";
rclone.StartInfo.CreateNoWindow = true;
//On debug we want to see when rclone is open
if (MainForm.debugMode == true)
rclone.StartInfo.CreateNoWindow = false;
rclone.StartInfo.UseShellExecute = false;
rclone.Start();
rclone.StandardInput.WriteLine(command);
rclone.StandardInput.Flush();
rclone.StandardInput.Close();
string output = rclone.StandardOutput.ReadToEnd();
string error = rclone.StandardError.ReadToEnd();
rclone.WaitForExit();
//if there is one of these errors, we switch the mirrors
if (error.Contains("400 Bad Request") || error.Contains("cannot fetch token") || error.Contains("authError") || error.Contains("quota") || error.Contains("exceeded") || error.Contains("directory not found") || error.Contains("Failed to"))
{
Logger.Log(error);
return new ProcessOutput("Failed to fetch from public mirror.", "Failed to fetch from public mirror.");
}
else
{
prcoutput.Output = output;
prcoutput.Error = error;
}
if (!output.Contains("Game Name;Release Name;") && !output.Contains("package:") && !output.Contains(".meta"))
{
if (!string.IsNullOrWhiteSpace(error))
{
Logger.Log($"Rclone error: {error}\n");
}
if (!string.IsNullOrWhiteSpace(output))
{
Logger.Log($"Rclone Output: {output}");
}
}
if (output.Contains("There is not enough space"))
{
FlexibleMessageBox.Show("There isn't enough space on your PC to properly install this game. Please have at least 2x the size of the game you are trying to download/install available on the drive where Rookie is installed.", "NOT ENOUGH SPACE");
}
return prcoutput;
}
}

View File

@@ -1,18 +1,15 @@
# androidsideloader
![GitHub last commit](https://img.shields.io/github/last-commit/nerdunit/androidsideloader)
![GitHub release (latest by date)](https://img.shields.io/github/v/release/nerdunit/androidsideloader)
[![Downloads](https://img.shields.io/github/downloads/nerdunit/androidsideloader/total.svg)](https://github.com/nerdunit/androidsideloader/releases)
![Issues](https://img.shields.io/github/issues/nerdunit/androidsideloader)
This app might get detected as malware, however both the sideloader and the sideloader launcher are open source
androidsideloader uses the GPL license, any forks of it must have their source code made public on the internet.
## !IMPORTANT!
This app may be buggy and have problems.
### This app might get detected as malware, however both the sideloader and the sideloader launcher are open source. And obviously, it isn't.
See:
https://www.virustotal.com/gui/file/977105693610cf360fc29339b918e224180ba393ba05a64b6255af3845cbf376/relations
Special thanks to
- [Everyone who donated!](https://raw.githubusercontent.com/nerdunit/androidsideloader/master/donators.txt)
- pmow for all of his work, including rclone, wonka and other projects
- flow for being friendly and helping every one
- succ for creating and maintaining the server
- badcoder5000 for redesigning the UI
- gotard for the theme changer
- [7zip](https://www.7-zip.org/) team for [7zip](https://www.7-zip.org/) :)
- [rclone](https://rclone.org/) team for [rclone](https://rclone.org/) :D
- [erike](https://stackoverflow.com/users/57611/erike) for the folder browser dialog code
- Serge Weinstock for developing SergeUtils, which is used to search the combo box
- https://www.c-sharpcorner.com/members/mike-gold2 for the scrollable message box

BIN
Resources/Pattern.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
Resources/SearchGlass.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
Resources/ajax-loader.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 B

BIN
Resources/battery.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
Resources/battery1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
Resources/battery11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

6801
Resources/nouns.txt Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

BIN
Resources/splash.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
Resources/splashimage.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

10
Rookie Offline.cmd Normal file
View File

@@ -0,0 +1,10 @@
@echo off
for /f "tokens=* usebackq" %%f in (`dir /b AndroidSideloader*.exe`) do (set "sideloader=%%f" & goto :next)
:next
echo %sideloader%
start "" "%sideloader%" "--offline"

308
RoundButton.cs Normal file
View File

@@ -0,0 +1,308 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace AndroidSideloader
{
[Description("Rounded Button")]
public class RoundButton : Control, IButtonControl
{
#region Variables
int radius;
bool transparency;
MouseState state;
RoundedRectangleF roundedRect;
Color inactive1, inactive2, active1, active2;
private Color strokeColor;
private bool stroke;
internal bool UseVisualStyleBackColor;
internal FlatStyle FlatStyle;
public bool Stroke
{
get { return stroke; }
set
{
stroke = value;
Invalidate();
}
}
public Color StrokeColor
{
get { return strokeColor; }
set
{
strokeColor = value;
Invalidate();
}
}
#endregion
#region RoundButton
public RoundButton()
{
Width = 65;
Height = 30;
stroke = false;
strokeColor = Color.Gray;
inactive1 = Color.FromArgb(44, 188, 210);
inactive2 = Color.FromArgb(33, 167, 188);
active1 = Color.FromArgb(64, 168, 183);
active2 = Color.FromArgb(36, 164, 183);
radius = 10;
roundedRect = new RoundedRectangleF(Width, Height, radius);
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor |
ControlStyles.UserPaint, true);
BackColor = Color.Transparent;
ForeColor = Color.Black;
Font = new System.Drawing.Font("Comic Sans MS", 10, FontStyle.Bold);
state = MouseState.Leave;
transparency = false;
}
#endregion
#region Events
protected override void OnPaint(PaintEventArgs e)
{
#region Transparency
if (transparency)
Transparenter.MakeTransparent(this, e.Graphics);
#endregion
#region Drawing
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
roundedRect = new RoundedRectangleF(Width, Height, radius);
e.Graphics.FillRectangle(Brushes.Transparent, this.ClientRectangle);
int R1 = (active1.R + inactive1.R) / 2;
int G1 = (active1.G + inactive1.G) / 2;
int B1 = (active1.B + inactive1.B) / 2;
int R2 = (active2.R + inactive2.R) / 2;
int G2 = (active2.G + inactive2.G) / 2;
int B2 = (active2.B + inactive2.B) / 2;
Rectangle rect = new Rectangle(0, 0, Width, Height);
if (this.Enabled)
{
if (state == MouseState.Leave)
using (LinearGradientBrush inactiveGB = new LinearGradientBrush(rect, inactive1, inactive2, 90f))
e.Graphics.FillPath(inactiveGB, roundedRect.Path);
else if (state == MouseState.Enter)
using (LinearGradientBrush activeGB = new LinearGradientBrush(rect, active1, active2, 90f))
e.Graphics.FillPath(activeGB, roundedRect.Path);
else if (state == MouseState.Down)
using (LinearGradientBrush downGB = new LinearGradientBrush(rect, Color.FromArgb(R1, G1, B1), Color.FromArgb(R2, G2, B2), 90f))
e.Graphics.FillPath(downGB, roundedRect.Path);
if (stroke)
using (Pen pen = new Pen(strokeColor, 1))
using (GraphicsPath path = new RoundedRectangleF(Width - (radius > 0 ? 0 : 1), Height - (radius > 0 ? 0 : 1), radius).Path)
e.Graphics.DrawPath(pen, path);
}
else
{
Color linear1 = Color.FromArgb(190, 190, 190);
Color linear2 = Color.FromArgb(210, 210, 210);
using (LinearGradientBrush inactiveGB = new LinearGradientBrush(rect, linear1, linear2, 90f))
{
e.Graphics.FillPath(inactiveGB, roundedRect.Path);
e.Graphics.DrawPath(new Pen(inactiveGB), roundedRect.Path);
}
}
#endregion
#region Text Drawing
using (StringFormat sf = new StringFormat()
{
LineAlignment = StringAlignment.Center,
Alignment = StringAlignment.Center,
})
using (Brush brush = new SolidBrush(ForeColor))
e.Graphics.DrawString(Text, Font, brush, this.ClientRectangle, sf);
#endregion
base.OnPaint(e);
}
protected override void OnMouseDoubleClick(MouseEventArgs e)
{
base.OnMouseDoubleClick(e);
base.OnClick(e);
}
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
}
protected override void OnEnabledChanged(EventArgs e)
{
Invalidate();
base.OnEnabledChanged(e);
}
protected override void OnResize(EventArgs e)
{
Invalidate();
base.OnResize(e);
}
protected override void OnMouseEnter(EventArgs e)
{
state = MouseState.Enter;
base.OnMouseEnter(e);
Invalidate();
}
protected override void OnMouseLeave(EventArgs e)
{
state = MouseState.Leave;
base.OnMouseLeave(e);
Invalidate();
}
protected override void OnMouseDown(MouseEventArgs e)
{
Capture = false;
state = MouseState.Down;
base.OnMouseDown(e);
Invalidate();
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (state != MouseState.Leave)
state = MouseState.Enter;
base.OnMouseUp(e);
Invalidate();
}
#endregion
#region Properties
public int Radius
{
get
{
return radius;
}
set
{
radius = value;
Invalidate();
}
}
public Color Inactive1
{
get
{
return inactive1;
}
set
{
inactive1 = value;
Invalidate();
}
}
public Color Inactive2
{
get
{
return inactive2;
}
set
{
inactive2 = value;
Invalidate();
}
}
public Color Active1
{
get
{
return active1;
}
set
{
active1 = value;
Invalidate();
}
}
public Color Active2
{
get
{
return active2;
}
set
{
active2 = value;
Invalidate();
}
}
public bool Transparency
{
get
{
return transparency;
}
set
{
transparency = value;
}
}
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
Invalidate();
}
}
public override Color ForeColor
{
get
{
return base.ForeColor;
}
set
{
base.ForeColor = value;
Invalidate();
}
}
public DialogResult DialogResult
{
get
{
return System.Windows.Forms.DialogResult.OK;
}
set
{
}
}
public void NotifyDefault(bool value)
{
}
public void PerformClick()
{
OnClick(EventArgs.Empty);
}
#endregion
}
public enum MouseState
{
Enter,
Leave,
Down,
Up,
}
}

73
RoundedRectangleF.cs Normal file
View File

@@ -0,0 +1,73 @@
using System.Drawing;
using System.Drawing.Drawing2D;
namespace AndroidSideloader
{
public class RoundedRectangleF
{
Point location;
float radius;
GraphicsPath grPath;
float x, y;
float width, height;
public RoundedRectangleF(float width, float height, float radius, float x = 0, float y = 0)
{
location = new Point(0, 0);
this.radius = radius;
this.x = x;
this.y = y;
this.width = width;
this.height = height;
grPath = new GraphicsPath();
if (radius <= 0)
{
grPath.AddRectangle(new RectangleF(x, y, width, height));
return;
}
RectangleF upperLeftRect = new RectangleF(x, y, 2 * radius, 2 * radius);
RectangleF upperRightRect = new RectangleF(width - 2 * radius - 1, x, 2 * radius, 2 * radius);
RectangleF lowerLeftRect = new RectangleF(x, height - 2 * radius - 1, 2 * radius, 2 * radius);
RectangleF lowerRightRect = new RectangleF(width - 2 * radius - 1, height - 2 * radius - 1, 2 * radius, 2 * radius);
grPath.AddArc(upperLeftRect, 180, 90);
grPath.AddArc(upperRightRect, 270, 90);
grPath.AddArc(lowerRightRect, 0, 90);
grPath.AddArc(lowerLeftRect, 90, 90);
grPath.CloseAllFigures();
}
public RoundedRectangleF()
{
}
public GraphicsPath Path
{
get
{
return grPath;
}
}
public RectangleF Rect
{
get
{
return new RectangleF(x, y, width, height);
}
}
public float Radius
{
get
{
return radius;
}
set
{
radius = value;
}
}
}
}

315
SettingsForm.Designer.cs generated
View File

@@ -29,28 +29,39 @@
private void InitializeComponent()
{
this.checkForUpdatesCheckBox = new System.Windows.Forms.CheckBox();
this.applyButton = new System.Windows.Forms.Button();
this.enableMessageBoxesCheckBox = new System.Windows.Forms.CheckBox();
this.resetSettingsButton = new System.Windows.Forms.Button();
this.deleteAfterInstallCheckBox = new System.Windows.Forms.CheckBox();
this.updateConfigCheckBox = new System.Windows.Forms.CheckBox();
this.userJsonOnGameInstall = new System.Windows.Forms.CheckBox();
this.BandwithTextbox = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.BandwithComboBox = new System.Windows.Forms.ComboBox();
this.crashlogID = new System.Windows.Forms.Label();
this.debuglogID = new System.Windows.Forms.Label();
this.DebugID = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.nodevicemodeBox = new System.Windows.Forms.CheckBox();
this.bmbfBox = new System.Windows.Forms.CheckBox();
this.AutoReinstBox = new System.Windows.Forms.CheckBox();
this.applyButton = new AndroidSideloader.RoundButton();
this.resetSettingsButton = new AndroidSideloader.RoundButton();
this.DebugLogCopy = new AndroidSideloader.RoundButton();
this.Button1 = new AndroidSideloader.RoundButton();
this.SuspendLayout();
//
// checkForUpdatesCheckBox
//
this.checkForUpdatesCheckBox.AutoSize = true;
this.checkForUpdatesCheckBox.BackColor = System.Drawing.Color.Transparent;
this.checkForUpdatesCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.checkForUpdatesCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.checkForUpdatesCheckBox.Location = new System.Drawing.Point(13, 13);
this.checkForUpdatesCheckBox.Location = new System.Drawing.Point(12, 12);
this.checkForUpdatesCheckBox.Name = "checkForUpdatesCheckBox";
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(135, 20);
this.checkForUpdatesCheckBox.Size = new System.Drawing.Size(148, 22);
this.checkForUpdatesCheckBox.TabIndex = 0;
this.checkForUpdatesCheckBox.Text = "Check for updates";
this.checkForUpdatesCheckBox.UseVisualStyleBackColor = true;
this.checkForUpdatesCheckBox.UseVisualStyleBackColor = false;
this.checkForUpdatesCheckBox.CheckedChanged += new System.EventHandler(this.checkForUpdatesCheckBox_CheckedChanged);
//
// applyButton
@@ -62,7 +73,7 @@
this.applyButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.applyButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.applyButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.applyButton.Location = new System.Drawing.Point(12, 185);
this.applyButton.Location = new System.Drawing.Point(67, 328);
this.applyButton.Name = "applyButton";
this.applyButton.Size = new System.Drawing.Size(101, 31);
this.applyButton.TabIndex = 5;
@@ -73,70 +84,57 @@
// enableMessageBoxesCheckBox
//
this.enableMessageBoxesCheckBox.AutoSize = true;
this.enableMessageBoxesCheckBox.BackColor = System.Drawing.Color.Transparent;
this.enableMessageBoxesCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.enableMessageBoxesCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.enableMessageBoxesCheckBox.Location = new System.Drawing.Point(13, 36);
this.enableMessageBoxesCheckBox.Location = new System.Drawing.Point(12, 38);
this.enableMessageBoxesCheckBox.Name = "enableMessageBoxesCheckBox";
this.enableMessageBoxesCheckBox.Size = new System.Drawing.Size(284, 20);
this.enableMessageBoxesCheckBox.Size = new System.Drawing.Size(309, 22);
this.enableMessageBoxesCheckBox.TabIndex = 1;
this.enableMessageBoxesCheckBox.Text = "Enable Message Boxes on task completed";
this.enableMessageBoxesCheckBox.UseVisualStyleBackColor = true;
this.enableMessageBoxesCheckBox.UseVisualStyleBackColor = false;
this.enableMessageBoxesCheckBox.CheckedChanged += new System.EventHandler(this.enableMessageBoxesCheckBox_CheckedChanged);
//
// resetSettingsButton
//
this.resetSettingsButton.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.resetSettingsButton.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.resetSettingsButton.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.resetSettingsButton.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.resetSettingsButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.resetSettingsButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.resetSettingsButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.resetSettingsButton.Location = new System.Drawing.Point(119, 185);
this.resetSettingsButton.Name = "resetSettingsButton";
this.resetSettingsButton.Size = new System.Drawing.Size(101, 31);
this.resetSettingsButton.TabIndex = 4;
this.resetSettingsButton.Text = "Reset Settings";
this.resetSettingsButton.UseVisualStyleBackColor = false;
this.resetSettingsButton.Click += new System.EventHandler(this.resetSettingsButton_Click);
//
// deleteAfterInstallCheckBox
//
this.deleteAfterInstallCheckBox.AutoSize = true;
this.deleteAfterInstallCheckBox.BackColor = System.Drawing.Color.Transparent;
this.deleteAfterInstallCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.deleteAfterInstallCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.deleteAfterInstallCheckBox.Location = new System.Drawing.Point(13, 59);
this.deleteAfterInstallCheckBox.Location = new System.Drawing.Point(12, 64);
this.deleteAfterInstallCheckBox.Name = "deleteAfterInstallCheckBox";
this.deleteAfterInstallCheckBox.Size = new System.Drawing.Size(266, 20);
this.deleteAfterInstallCheckBox.Size = new System.Drawing.Size(288, 22);
this.deleteAfterInstallCheckBox.TabIndex = 3;
this.deleteAfterInstallCheckBox.Text = "Delete games after download and install";
this.deleteAfterInstallCheckBox.UseVisualStyleBackColor = true;
this.deleteAfterInstallCheckBox.UseVisualStyleBackColor = false;
this.deleteAfterInstallCheckBox.CheckedChanged += new System.EventHandler(this.deleteAfterInstallCheckBox_CheckedChanged);
//
// updateConfigCheckBox
//
this.updateConfigCheckBox.AutoSize = true;
this.updateConfigCheckBox.BackColor = System.Drawing.Color.Transparent;
this.updateConfigCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.updateConfigCheckBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.updateConfigCheckBox.Location = new System.Drawing.Point(13, 83);
this.updateConfigCheckBox.Location = new System.Drawing.Point(12, 90);
this.updateConfigCheckBox.Name = "updateConfigCheckBox";
this.updateConfigCheckBox.Size = new System.Drawing.Size(193, 20);
this.updateConfigCheckBox.Size = new System.Drawing.Size(208, 22);
this.updateConfigCheckBox.TabIndex = 6;
this.updateConfigCheckBox.Text = "Update config automatically";
this.updateConfigCheckBox.UseVisualStyleBackColor = true;
this.updateConfigCheckBox.UseVisualStyleBackColor = false;
this.updateConfigCheckBox.CheckedChanged += new System.EventHandler(this.updateConfigCheckBox_CheckedChanged);
//
// userJsonOnGameInstall
//
this.userJsonOnGameInstall.AutoSize = true;
this.userJsonOnGameInstall.BackColor = System.Drawing.Color.Transparent;
this.userJsonOnGameInstall.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.userJsonOnGameInstall.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.userJsonOnGameInstall.Location = new System.Drawing.Point(13, 106);
this.userJsonOnGameInstall.Location = new System.Drawing.Point(12, 116);
this.userJsonOnGameInstall.Name = "userJsonOnGameInstall";
this.userJsonOnGameInstall.Size = new System.Drawing.Size(218, 20);
this.userJsonOnGameInstall.Size = new System.Drawing.Size(243, 22);
this.userJsonOnGameInstall.TabIndex = 9;
this.userJsonOnGameInstall.Text = "Push random user.json on install";
this.userJsonOnGameInstall.UseVisualStyleBackColor = true;
this.userJsonOnGameInstall.UseVisualStyleBackColor = false;
this.userJsonOnGameInstall.CheckedChanged += new System.EventHandler(this.userJsonOnGameInstall_CheckedChanged);
//
// BandwithTextbox
@@ -147,19 +145,20 @@
this.BandwithTextbox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "TextBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.BandwithTextbox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.BandwithTextbox.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.BandwithTextbox.Location = new System.Drawing.Point(12, 155);
this.BandwithTextbox.Location = new System.Drawing.Point(29, 248);
this.BandwithTextbox.Name = "BandwithTextbox";
this.BandwithTextbox.Size = new System.Drawing.Size(177, 21);
this.BandwithTextbox.Size = new System.Drawing.Size(177, 24);
this.BandwithTextbox.TabIndex = 11;
//
// label1
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.Transparent;
this.label1.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.label1.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.label1.Location = new System.Drawing.Point(10, 134);
this.label1.Location = new System.Drawing.Point(48, 225);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(224, 16);
this.label1.Size = new System.Drawing.Size(245, 18);
this.label1.TabIndex = 12;
this.label1.Text = "Download speed limiter, 0 to disable";
//
@@ -178,35 +177,245 @@
"K",
"M",
"G"});
this.BandwithComboBox.Location = new System.Drawing.Point(195, 153);
this.BandwithComboBox.Location = new System.Drawing.Point(258, 246);
this.BandwithComboBox.Name = "BandwithComboBox";
this.BandwithComboBox.Size = new System.Drawing.Size(55, 23);
this.BandwithComboBox.Size = new System.Drawing.Size(55, 26);
this.BandwithComboBox.TabIndex = 13;
//
// crashlogID
//
this.crashlogID.AutoSize = true;
this.crashlogID.Location = new System.Drawing.Point(13, 439);
this.crashlogID.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.crashlogID.Name = "crashlogID";
this.crashlogID.Size = new System.Drawing.Size(0, 13);
this.crashlogID.TabIndex = 15;
//
// debuglogID
//
this.debuglogID.BackColor = System.Drawing.Color.Transparent;
this.debuglogID.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
this.debuglogID.Location = new System.Drawing.Point(29, 434);
this.debuglogID.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.debuglogID.Name = "debuglogID";
this.debuglogID.Size = new System.Drawing.Size(285, 48);
this.debuglogID.TabIndex = 14;
this.debuglogID.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// DebugID
//
this.DebugID.AccessibleRole = System.Windows.Forms.AccessibleRole.Row;
this.DebugID.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.DebugID.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.DebugID.Cursor = System.Windows.Forms.Cursors.Default;
this.DebugID.Font = new System.Drawing.Font("Microsoft Sans Serif", 13.8F, System.Drawing.FontStyle.Bold);
this.DebugID.ForeColor = System.Drawing.SystemColors.ControlLightLight;
this.DebugID.Location = new System.Drawing.Point(29, 405);
this.DebugID.Margin = new System.Windows.Forms.Padding(2);
this.DebugID.Name = "DebugID";
this.DebugID.ReadOnly = true;
this.DebugID.ScrollBars = System.Windows.Forms.ScrollBars.Horizontal;
this.DebugID.Size = new System.Drawing.Size(285, 21);
this.DebugID.TabIndex = 16;
this.DebugID.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.DebugID.Click += new System.EventHandler(this.DebugID_Click);
//
// label2
//
this.label2.BackColor = System.Drawing.Color.Transparent;
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
this.label2.Location = new System.Drawing.Point(29, 505);
this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(284, 86);
this.label2.TabIndex = 14;
this.label2.Text = "This is your most recent CrashLogID. Click on the CrashLogID to copy it to your c" +
"lipboard.";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// textBox1
//
this.textBox1.AccessibleRole = System.Windows.Forms.AccessibleRole.Row;
this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.textBox1.Cursor = System.Windows.Forms.Cursors.Default;
this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 13.8F, System.Drawing.FontStyle.Bold);
this.textBox1.ForeColor = System.Drawing.SystemColors.ControlLightLight;
this.textBox1.Location = new System.Drawing.Point(29, 488);
this.textBox1.Margin = new System.Windows.Forms.Padding(2);
this.textBox1.Name = "textBox1";
this.textBox1.ReadOnly = true;
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Horizontal;
this.textBox1.Size = new System.Drawing.Size(285, 21);
this.textBox1.TabIndex = 16;
this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.textBox1.Click += new System.EventHandler(this.textBox1_Click);
//
// nodevicemodeBox
//
this.nodevicemodeBox.AutoSize = true;
this.nodevicemodeBox.BackColor = System.Drawing.Color.Transparent;
this.nodevicemodeBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.nodevicemodeBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.nodevicemodeBox.Location = new System.Drawing.Point(12, 168);
this.nodevicemodeBox.Name = "nodevicemodeBox";
this.nodevicemodeBox.Size = new System.Drawing.Size(181, 22);
this.nodevicemodeBox.TabIndex = 9;
this.nodevicemodeBox.Text = "Enable no device mode";
this.nodevicemodeBox.UseVisualStyleBackColor = false;
this.nodevicemodeBox.CheckedChanged += new System.EventHandler(this.nodevicemodeBox_CheckedChanged);
//
// bmbfBox
//
this.bmbfBox.AutoSize = true;
this.bmbfBox.BackColor = System.Drawing.Color.Transparent;
this.bmbfBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.bmbfBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.bmbfBox.Location = new System.Drawing.Point(12, 142);
this.bmbfBox.Name = "bmbfBox";
this.bmbfBox.Size = new System.Drawing.Size(281, 22);
this.bmbfBox.TabIndex = 9;
this.bmbfBox.Text = "Enable BMBF song zips drag and drop";
this.bmbfBox.UseVisualStyleBackColor = false;
this.bmbfBox.CheckedChanged += new System.EventHandler(this.bmbfBox_CheckedChanged);
//
// AutoReinstBox
//
this.AutoReinstBox.AutoSize = true;
this.AutoReinstBox.BackColor = System.Drawing.Color.Transparent;
this.AutoReinstBox.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.AutoReinstBox.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.AutoReinstBox.Location = new System.Drawing.Point(12, 194);
this.AutoReinstBox.Name = "AutoReinstBox";
this.AutoReinstBox.Size = new System.Drawing.Size(280, 22);
this.AutoReinstBox.TabIndex = 9;
this.AutoReinstBox.Text = "Enable auto reinstall upon install failure";
this.AutoReinstBox.UseVisualStyleBackColor = false;
this.AutoReinstBox.CheckedChanged += new System.EventHandler(this.AutoReinstBox_CheckedChanged);
this.AutoReinstBox.Click += new System.EventHandler(this.AutoReinstBox_Click);
//
// applyButton
//
this.applyButton.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.applyButton.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.applyButton.BackColor = System.Drawing.Color.Transparent;
this.applyButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.applyButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.applyButton.ForeColor = System.Drawing.Color.White;
this.applyButton.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.applyButton.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.applyButton.Location = new System.Drawing.Point(29, 286);
this.applyButton.Name = "applyButton";
this.applyButton.Radius = 5;
this.applyButton.Size = new System.Drawing.Size(101, 31);
this.applyButton.Stroke = true;
this.applyButton.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.applyButton.TabIndex = 17;
this.applyButton.Text = "Apply";
this.applyButton.Transparency = false;
this.applyButton.Click += new System.EventHandler(this.applyButton_Click);
//
// resetSettingsButton
//
this.resetSettingsButton.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.resetSettingsButton.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.resetSettingsButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.resetSettingsButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.resetSettingsButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.resetSettingsButton.ForeColor = System.Drawing.Color.White;
this.resetSettingsButton.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.resetSettingsButton.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.resetSettingsButton.Location = new System.Drawing.Point(212, 286);
this.resetSettingsButton.Name = "resetSettingsButton";
this.resetSettingsButton.Radius = 5;
this.resetSettingsButton.Size = new System.Drawing.Size(101, 31);
this.resetSettingsButton.Stroke = true;
this.resetSettingsButton.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.resetSettingsButton.TabIndex = 18;
this.resetSettingsButton.Text = "Reset";
this.resetSettingsButton.Transparency = false;
this.resetSettingsButton.Click += new System.EventHandler(this.resetSettingsButton_Click);
//
// DebugLogCopy
//
this.DebugLogCopy.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.DebugLogCopy.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.DebugLogCopy.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.DebugLogCopy.DialogResult = System.Windows.Forms.DialogResult.OK;
this.DebugLogCopy.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.DebugLogCopy.ForeColor = System.Drawing.Color.White;
this.DebugLogCopy.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.DebugLogCopy.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.DebugLogCopy.Location = new System.Drawing.Point(29, 323);
this.DebugLogCopy.Name = "DebugLogCopy";
this.DebugLogCopy.Radius = 5;
this.DebugLogCopy.Size = new System.Drawing.Size(285, 31);
this.DebugLogCopy.Stroke = true;
this.DebugLogCopy.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.DebugLogCopy.TabIndex = 19;
this.DebugLogCopy.Text = "Send DebugLog to server.";
this.DebugLogCopy.Transparency = false;
this.DebugLogCopy.Click += new System.EventHandler(this.DebugLogCopy_click);
//
// Button1
//
this.Button1.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.Button1.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.Button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.Button1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.Button1.ForeColor = System.Drawing.Color.White;
this.Button1.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.Button1.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.Button1.Location = new System.Drawing.Point(29, 358);
this.Button1.Name = "Button1";
this.Button1.Radius = 5;
this.Button1.Size = new System.Drawing.Size(285, 31);
this.Button1.Stroke = true;
this.Button1.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.Button1.TabIndex = 20;
this.Button1.Text = "Reset Debug Log";
this.Button1.Transparency = false;
this.Button1.Click += new System.EventHandler(this.button1_click);
//
// SettingsForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.ClientSize = new System.Drawing.Size(315, 237);
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.ClientSize = new System.Drawing.Size(342, 601);
this.Controls.Add(this.Button1);
this.Controls.Add(this.DebugLogCopy);
this.Controls.Add(this.resetSettingsButton);
this.Controls.Add(this.applyButton);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.DebugID);
this.Controls.Add(this.crashlogID);
this.Controls.Add(this.label2);
this.Controls.Add(this.debuglogID);
this.Controls.Add(this.BandwithComboBox);
this.Controls.Add(this.label1);
this.Controls.Add(this.BandwithTextbox);
this.Controls.Add(this.bmbfBox);
this.Controls.Add(this.AutoReinstBox);
this.Controls.Add(this.nodevicemodeBox);
this.Controls.Add(this.userJsonOnGameInstall);
this.Controls.Add(this.updateConfigCheckBox);
this.Controls.Add(this.deleteAfterInstallCheckBox);
this.Controls.Add(this.enableMessageBoxesCheckBox);
this.Controls.Add(this.applyButton);
this.Controls.Add(this.checkForUpdatesCheckBox);
this.Controls.Add(this.resetSettingsButton);
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.ForeColor = System.Drawing.Color.White;
this.MaximumSize = new System.Drawing.Size(331, 276);
this.MinimumSize = new System.Drawing.Size(331, 276);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.Name = "SettingsForm";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Settings";
this.Load += new System.EventHandler(this.SettingsForm_Load);
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SettingsForm_KeyPress);
this.Leave += new System.EventHandler(this.SettingsForm_Leave);
this.ResumeLayout(false);
this.PerformLayout();
@@ -215,14 +424,24 @@
#endregion
private System.Windows.Forms.CheckBox checkForUpdatesCheckBox;
private System.Windows.Forms.Button applyButton;
private System.Windows.Forms.CheckBox enableMessageBoxesCheckBox;
private System.Windows.Forms.Button resetSettingsButton;
private System.Windows.Forms.CheckBox deleteAfterInstallCheckBox;
private System.Windows.Forms.CheckBox updateConfigCheckBox;
private System.Windows.Forms.CheckBox userJsonOnGameInstall;
private System.Windows.Forms.TextBox BandwithTextbox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox BandwithComboBox;
private System.Windows.Forms.Label crashlogID;
public System.Windows.Forms.Label debuglogID;
private System.Windows.Forms.TextBox DebugID;
public System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.CheckBox nodevicemodeBox;
private System.Windows.Forms.CheckBox bmbfBox;
private System.Windows.Forms.CheckBox AutoReinstBox;
private RoundButton applyButton;
private RoundButton resetSettingsButton;
private RoundButton DebugLogCopy;
private RoundButton Button1;
}
}

View File

@@ -1,5 +1,6 @@
using JR.Utils.GUI.Forms;
using System;
using System.IO;
using System.Windows.Forms;
namespace AndroidSideloader
@@ -14,9 +15,12 @@ namespace AndroidSideloader
private void SettingsForm_Load(object sender, EventArgs e)
{
this.CenterToParent();
if (!string.IsNullOrEmpty(Properties.Settings.Default.CurrentLogName))
textBox1.Text = Properties.Settings.Default.CurrentCrashName;
if (!string.IsNullOrEmpty(Properties.Settings.Default.CurrentLogPath))
DebugID.Text = Properties.Settings.Default.CurrentLogName;
debuglogID.Text = "This is your DebugLogID. Click on your DebugLogID to copy it to your clipboard.";
intSettings();
intToolTips();
}
@@ -28,12 +32,16 @@ namespace AndroidSideloader
deleteAfterInstallCheckBox.Checked = Properties.Settings.Default.deleteAllAfterInstall;
updateConfigCheckBox.Checked = Properties.Settings.Default.autoUpdateConfig;
userJsonOnGameInstall.Checked = Properties.Settings.Default.userJsonOnGameInstall;
if (Properties.Settings.Default.BandwithLimit.Length>1)
nodevicemodeBox.Checked = Properties.Settings.Default.nodevicemode;
bmbfBox.Checked = Properties.Settings.Default.BMBFchecked;
AutoReinstBox.Checked = Properties.Settings.Default.AutoReinstall;
if (Properties.Settings.Default.BandwithLimit.Length > 1)
{
BandwithTextbox.Text = Properties.Settings.Default.BandwithLimit.Remove(Properties.Settings.Default.BandwithLimit.Length - 1);
BandwithComboBox.Text = Properties.Settings.Default.BandwithLimit[Properties.Settings.Default.BandwithLimit.Length-1].ToString();
BandwithComboBox.Text = Properties.Settings.Default.BandwithLimit[Properties.Settings.Default.BandwithLimit.Length - 1].ToString();
}
}
void intToolTips()
@@ -46,6 +54,52 @@ namespace AndroidSideloader
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");
}
public void DebugLogCopy_click(object sender, EventArgs e)
{
if (File.Exists($"{Properties.Settings.Default.CurrentLogPath}"))
{
RCLONE.runRcloneCommand_DownloadConfig($"copy \"{Properties.Settings.Default.CurrentLogPath}\" VRP-debuglogs:DebugLogs");
Clipboard.SetText(DebugID.Text);
MessageBox.Show($"Your debug log has been copied to the server. Please mention your DebugLog ID ({Properties.Settings.Default.CurrentLogName}) to the Mods (it has been automatically copied to your clipboard).");
}
}
public void button1_click(object sender, EventArgs e)
{
if (File.Exists($"{Properties.Settings.Default.CurrentLogPath}"))
File.Delete($"{Properties.Settings.Default.CurrentLogPath}");
if (File.Exists($"{Environment.CurrentDirectory}\\debuglog.txt"))
File.Delete($"{Environment.CurrentDirectory}\\debuglog.txt");
if (File.Exists($"{Environment.CurrentDirectory}\\nouns\\nouns.txt"))
{
string[] lines = File.ReadAllLines($"{Environment.CurrentDirectory}\\nouns\\nouns.txt");
Random r = new Random();
int x = r.Next(6806);
int y = r.Next(6806);
string randomnoun = lines[new Random(x).Next(lines.Length)];
string randomnoun2 = lines[new Random(y).Next(lines.Length)];
string combined = randomnoun + "-" + randomnoun2;
Properties.Settings.Default.CurrentLogPath = Environment.CurrentDirectory + "\\" + combined + ".txt";
Properties.Settings.Default.CurrentLogName = combined;
Properties.Settings.Default.Save();
DebugID.Text = combined;
this.Close();
SettingsForm Form = new SettingsForm();
Form.Show();
}
}
//Apply settings
private void applyButton_Click(object sender, EventArgs e)
{
@@ -96,5 +150,86 @@ namespace AndroidSideloader
{
Properties.Settings.Default.userJsonOnGameInstall = userJsonOnGameInstall.Checked;
}
private void SettingsForm_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Escape)
{
this.Close();
}
}
private void SettingsForm_Leave(object sender, EventArgs e)
{
this.Close();
}
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
private void DebugID_Click(object sender, EventArgs e)
{
if (File.Exists(Environment.CurrentDirectory + "\\" + Properties.Settings.Default.CurrentLogName + ".txt"))
Clipboard.SetText(DebugID.Text);
MessageBox.Show("DebugLogID copied to clipboard! Paste it to a moderator/helper for assistance!");
}
private void textBox1_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(Properties.Settings.Default.CurrentCrashName))
{
Clipboard.SetText(textBox1.Text);
MessageBox.Show("CrashLogID copied to clipboard! Paste it to a moderator/helper for assistance!");
}
}
private void nodevicemodeBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.nodevicemode = nodevicemodeBox.Checked;
Properties.Settings.Default.Save();
}
private void bmbfBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.BMBFchecked = bmbfBox.Checked;
Properties.Settings.Default.Save();
}
private void AutoReinstBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.AutoReinstall = AutoReinstBox.Checked;
Properties.Settings.Default.Save();
}
private void AutoReinstBox_Click(object sender, EventArgs e)
{
if (AutoReinstBox.Checked)
{
DialogResult dialogResult = FlexibleMessageBox.Show("WARNING: This box enables automatic reinstall when installs fail,\ndue to some games not allowing " +
"access to their save data (less than 5%) this\noption can lead to losing your progress." +
" However with this option\nchecked when installs fail you won't have to agree to a prompt to preform\nthe reinstall. " +
"(ideal when installing from a queue).\n\nNOTE: If your usb/wireless adb connection is extremely slow this option can\ncause larger" +
"apk file installations to fail. Enable anyway?", "WARNING", MessageBoxButtons.OKCancel);
if (dialogResult == DialogResult.Cancel)
AutoReinstBox.Checked = false;
}
}
}
}

View File

@@ -35,10 +35,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
}
//List of all installed package names from connected device
public static Dictionary<string, string> InstalledPackages = new Dictionary<string, string>(); //Packagename and Version
//public static List<string> InstalledPackageNames = new List<string>();
//Remove folder from device
//public static List<string> InstalledPackageNames = new List<string>(); //Remove folder from device
public static ProcessOutput RemoveFolder(string path)
{
ADB.WakeDevice();
@@ -56,35 +53,37 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
ADB.WakeDevice();
ProcessOutput output = new ProcessOutput();
var commands = File.ReadAllLines(path);
string currfolder = Path.GetDirectoryName(path);
string[] zipz = Directory.GetFiles(currfolder, "*.7z", SearchOption.AllDirectories);
foreach (string zip in zipz)
{
Utilities.Zip.ExtractFile($"{zip}", currfolder);
}
foreach (string cmd in commands)
{
if (cmd.StartsWith("\"7z.exe\""))
{
Program.form.ChangeTitle($"Running {cmd}");
Logger.Log($"Logging command: {cmd} from file: {path}");
output += ADB.RunAdbCommandToStringWOADB(cmd, path);
}
if (cmd.StartsWith("adb"))
{
string replacement = "";
string pattern = "adb";
string replacement = $"{Properties.Settings.Default.ADBPath} -s {ADB.DeviceID}";
if (ADB.DeviceID.Length > 1)
replacement = $"{Properties.Settings.Default.ADBPath} -s {ADB.DeviceID}";
else
replacement = $"{Properties.Settings.Default.ADBPath}";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(cmd, replacement);
Program.form.ChangeTitle($"Running {result}");
Logger.Log($"Logging command: {result} from file: {path}");
if (ADB.DeviceID.Length > 1)
output += ADB.RunAdbCommandToStringWOADB(result, path);
output += ADB.RunAdbCommandToStringWOADB(result, path);
if (output.Error.Contains("mkdir"))
output.Error = "";
if (output.Output.Contains("reserved"))
output.Output = "";
}
}
output.Output += "Custom install successful!";
return output;
}
@@ -97,7 +96,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
{
foreach (string f in Directory.GetFiles(FolderPath))
{
if (Path.GetExtension(f)==".apk")
if (Path.GetExtension(f) == ".apk")
RecursiveOutput += ADB.Sideload(f);
}
@@ -127,25 +126,22 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
}
catch (Exception ex) { Logger.Log(ex.Message); }
}
public static string BackupFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), $"Rookie Backups");
//uninstalls an app
public static ProcessOutput UninstallGame(string GameName)
public static ProcessOutput UninstallGame(string packagename)
{
ADB.WakeDevice();
Program.form.ChangeTitle("Attempting to backup any savedata to Documents\\Rookie Backups...");
ProcessOutput output = new ProcessOutput("", "");
string packageName = Sideloader.gameNameToPackageName(GameName);
DialogResult dialogResult = FlexibleMessageBox.Show($"Are you sure you want to uninstall {packageName}? this CANNOT be undone!", "WARNING!", MessageBoxButtons.YesNo);
if (dialogResult != DialogResult.Yes)
return output;
output = ADB.UninstallPackage(packageName);
//remove both data and obb if there is any
Sideloader.RemoveFolder("/sdcard/Android/obb/" + packageName);
Sideloader.RemoveFolder("/sdcard/Android/data/" + packageName);
string date_str = DateTime.Today.ToString("yyyy.MM.dd");
string CurrBackups = Path.Combine(BackupFolder, date_str);
if (!Directory.Exists(CurrBackups))
Directory.CreateDirectory(CurrBackups);
ADB.RunAdbCommandToString($"pull \"/sdcard/Android/data/{packagename}\" \"{CurrBackups}\"");
output = ADB.UninstallPackage(packagename);
Program.form.ChangeTitle("");
Sideloader.RemoveFolder("/sdcard/Android/obb/" + packagename);
Sideloader.RemoveFolder("/sdcard/Android/data/" + packagename);
return output;
}
@@ -168,6 +164,7 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
//Extracts apk from device, saves it by package name to sideloader folder
public static ProcessOutput getApk(string GameName)
{
ADB.WakeDevice();
ProcessOutput output = new ProcessOutput("", "");
@@ -180,18 +177,18 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
apkPath = apkPath.Remove(apkPath.Length - 1);
apkPath = apkPath.Remove(0, 8); //remove package:
apkPath = apkPath.Remove(apkPath.Length - 1);
if (File.Exists($"{Properties.Settings.Default.ADBFolder}\\base.apk"))
File.Delete($"{Properties.Settings.Default.ADBFolder}\\base.apk");
if (File.Exists($"{Properties.Settings.Default.MainDir}\\{packageName}\\{packageName}.apk"))
File.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}\\{packageName}.apk");
output += ADB.RunAdbCommandToString("pull " + apkPath); //pull apk
string currApkPath = apkPath;
while (currApkPath.Contains("/"))
currApkPath = currApkPath.Substring(currApkPath.IndexOf("/") + 1);
if (Directory.Exists($"{Properties.Settings.Default.MainDir}\\{packageName}"))
Directory.Delete($"{Properties.Settings.Default.MainDir}\\{packageName}", true);
if (File.Exists(Environment.CurrentDirectory + "\\" + packageName + ".apk"))
File.Delete(Environment.CurrentDirectory + "\\" + packageName + ".apk");
File.Move(Environment.CurrentDirectory + "\\adb\\" + currApkPath, Environment.CurrentDirectory + "\\" + packageName + ".apk");
Directory.CreateDirectory($"{Properties.Settings.Default.MainDir}\\{packageName}");
File.Move($"{Properties.Settings.Default.ADBFolder}\\base.apk", $"{Properties.Settings.Default.MainDir}\\{packageName}\\{packageName}.apk");
return output;
}
@@ -201,10 +198,45 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
{
if (gameName.Equals(game[SideloaderRCLONE.GameNameIndex]))
return game[SideloaderRCLONE.PackageNameIndex];
if (gameName.Equals(game[SideloaderRCLONE.ReleaseNameIndex]))
return game[SideloaderRCLONE.PackageNameIndex];
}
return gameName;
}
public static string PackageNametoGameName(string gameName)
{
foreach (string[] game in SideloaderRCLONE.games)
{
if (gameName.Equals(game[SideloaderRCLONE.PackageNameIndex]))
return game[SideloaderRCLONE.ReleaseNameIndex];
}
return gameName;
}
public static string gameNameToSimpleName(string gameName)
{
foreach (string[] game in SideloaderRCLONE.games)
{
if (gameName.Equals(game[SideloaderRCLONE.GameNameIndex]))
return game[SideloaderRCLONE.GameNameIndex];
if (gameName.Equals(game[SideloaderRCLONE.ReleaseNameIndex]))
return game[SideloaderRCLONE.GameNameIndex];
}
return gameName;
}
public static string PackageNameToSimpleName(string gameName)
{
foreach (string[] game in SideloaderRCLONE.games)
{
if (gameName.Contains(game[SideloaderRCLONE.PackageNameIndex]))
return game[SideloaderRCLONE.GameNameIndex];
}
return gameName;
}
//Downloads the required files
public static void downloadFiles()
{
@@ -216,11 +248,20 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
if (!File.Exists("Sideloader Launcher.exe"))
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/Sideloader%20Launcher.exe", "Sideloader Launcher.exe");
if (!Directory.Exists(ADB.adbFolderPath)) //if there is no adb folder, download and extract
if (!File.Exists("Rookie Offline.cmd"))
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/Rookie%20Offline.cmd", "Rookie Offline.cmd");
if (!File.Exists("C:\\RSL\\platform-tools\\aug2021.txt") || !File.Exists("C:\\RSL\\platform-tools\\adb.exe")) //if adb is not updated, download and auto extract
{
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/adb.7z", "adb.7z");
Utilities.Zip.ExtractFile(Environment.CurrentDirectory + "\\adb.7z", Environment.CurrentDirectory);
File.Delete("adb.7z");
if (Directory.Exists($"C:\\RSL\\2.8.2"))
Directory.Delete("C:\\RSL\\2.8.2", true);
if (Directory.Exists($"{Properties.Settings.Default.MainDir}\\adb"))
Directory.Delete($"{Properties.Settings.Default.MainDir}\\adb", true);
if (!Directory.Exists("C:\\RSL\\platform-tools"))
Directory.CreateDirectory("C:\\RSL\\platform-tools");
client.DownloadFile("https://github.com/nerdunit/androidsideloader/raw/master/adb2.zip", "Ad.7z");
Utilities.Zip.ExtractFile(Environment.CurrentDirectory + "\\Ad.7z", "C:\\RSL\\platform-tools");
File.Delete("Ad.7z");
}
if (!Directory.Exists(Environment.CurrentDirectory + "\\rclone"))
@@ -257,5 +298,5 @@ And all of them added to PATH, without ANY of them, the spoofer won't work!";
}
}
}

View File

@@ -1,12 +1,21 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
using System.IO;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Linq;
using System.Security.Cryptography;
using AndroidSideloader.Utilities;
namespace AndroidSideloader
{
class rcloneFolder
{
public string Path { get; set; }
public string Name { get; set; }
public string Size { get; set; }
public string ModTime { get; set; }
}
class SideloaderRCLONE
{
public static List<string> RemotesList = new List<string>();
@@ -17,9 +26,9 @@ namespace AndroidSideloader
public static int GameNameIndex = 0;
public static int ReleaseNameIndex = 1;
public static int ReleaseAPKPathIndex = 2;
public static int PackageNameIndex = 3;
public static int VersionCodeIndex = 4;
public static int PackageNameIndex = 2;
public static int VersionCodeIndex = 3;
public static int ReleaseAPKPathIndex = 4;
public static int VersionNameIndex = 5;
public static List<string> gameProperties = new List<string>();
@@ -32,24 +41,82 @@ namespace AndroidSideloader
*/
public static List<string[]> games = new List<string[]>();
public static string Nouns = Environment.CurrentDirectory + "\\nouns";
public static string ThumbnailsFolder = Environment.CurrentDirectory + "\\thumbnails";
public static string NotesFolder = Environment.CurrentDirectory + "\\notes";
public static void UpdateNouns(string remote)
{
Logger.Log($"Updating Nouns");
RCLONE.runRcloneCommand_DownloadConfig($"sync \"{remote}:{RcloneGamesFolder}/.meta/nouns\" \"{Nouns}\"");
}
public static void UpdateGamePhotos(string remote)
{
RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/thumbnails\" \"{ThumbnailsFolder}\"");
Logger.Log($"Updating Thumbnails");
RCLONE.runRcloneCommand_DownloadConfig($"sync \"{remote}:{RcloneGamesFolder}/.meta/thumbnails\" \"{ThumbnailsFolder}\"");
}
public static void UpdateGameNotes(string remote)
{
Logger.Log($"Updating Game Notes");
RCLONE.runRcloneCommand_DownloadConfig($"sync \"{remote}:{RcloneGamesFolder}/.meta/notes\" \"{NotesFolder}\"");
}
RCLONE.runRcloneCommand($"sync \"{remote}:{RcloneGamesFolder}/.meta/notes\" \"{NotesFolder}\"");
public static void UpdateMetadataFromPublic()
{
Logger.Log($"Downloading Metadata");
var rclonecommand =
$"sync \":http:/meta.7z\" \"{Environment.CurrentDirectory}\"";
RCLONE.runRcloneCommand_PublicConfig(rclonecommand);
}
public static void ProcessMetadataFromPublic()
{
try
{
Logger.Log($"Extracting Metadata");
Zip.ExtractFile($"{Environment.CurrentDirectory}\\meta.7z", $"{Environment.CurrentDirectory}\\meta",
MainForm.PublicConfigFile.Password);
Logger.Log($"Updating Metadata");
if (Directory.Exists(Nouns)) Directory.Delete(Nouns, true);
if (Directory.Exists(ThumbnailsFolder)) Directory.Delete(ThumbnailsFolder, true);
if (Directory.Exists(NotesFolder)) Directory.Delete(NotesFolder, true);
Directory.Move($"{Environment.CurrentDirectory}\\meta\\.meta\\nouns", Nouns);
Directory.Move($"{Environment.CurrentDirectory}\\meta\\.meta\\thumbnails", ThumbnailsFolder);
Directory.Move($"{Environment.CurrentDirectory}\\meta\\.meta\\notes", NotesFolder);
Logger.Log($"Initializing Games List");
var gameList = File.ReadAllText($"{Environment.CurrentDirectory}\\meta\\VRP-GameList.txt");
string[] splitList = gameList.Split('\n');
splitList = splitList.Skip(1).ToArray();
foreach (string game in splitList)
{
if (game.Length > 1)
{
string[] splitGame = game.Split(';');
games.Add(splitGame);
}
}
Directory.Delete($"{Environment.CurrentDirectory}\\meta", true);
}
catch (Exception e)
{
Logger.Log(e.Message);
Logger.Log(e.StackTrace);
}
}
public static void RefreshRemotes()
{
Logger.Log($"Refresh / List Remotes");
RemotesList.Clear();
var remotes = RCLONE.runRcloneCommand("listremotes").Output.Split('\n');
var remotes = RCLONE.runRcloneCommand_DownloadConfig("listremotes").Output.Split('\n');
Logger.Log("Loaded following remotes: ");
foreach (string r in remotes)
@@ -68,69 +135,155 @@ namespace AndroidSideloader
public static void initGames(string remote)
{
Logger.Log($"Initializing Games List");
gameProperties.Clear();
games.Clear();
string tempGameList = RCLONE.runRcloneCommand($"cat \"{remote}:{RcloneGamesFolder}/GameList.txt\"").Output;
string tempGameList = RCLONE.runRcloneCommand_DownloadConfig($"cat \"{remote}:{RcloneGamesFolder}/VRP-GameList.txt\"").Output;
if (MainForm.debugMode)
File.WriteAllText("GamesList.txt", tempGameList);
string gamePropertiesLine = Utilities.StringUtilities.RemoveEverythingAfterFirst(tempGameList, "\n");
foreach (string gameProperty in gamePropertiesLine.Split(';'))
{
gameProperties.Add(gameProperty);
File.WriteAllText("VRP-GamesList.txt", tempGameList);
}
tempGameList = Utilities.StringUtilities.RemoveEverythingBeforeFirst(tempGameList, "\n");
foreach (string game in tempGameList.Split('\n'))
if (!tempGameList.Equals(""))
{
if (game.Length > 1)
games.Add(game.Split(';'));
}
//Output
//Console.WriteLine("Headers:");
//foreach (string s in gameProperties)
//{
// Console.WriteLine($"gameProperty: {s}");
//}
foreach (string[] s in games)
{
string output = "";
for (int i = 0; i < gameProperties.Count; i++)
output += s[i] + " ";
string[] gameListSplited = tempGameList.Split(new[] { '\n' });
gameListSplited = gameListSplited.Skip(1).ToArray();
foreach (string game in gameListSplited)
{
if (game.Length > 1)
{
string[] splitGame = game.Split(';');
games.Add(splitGame);
}
}
}
}
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
public static long GetFolderSize(string FolderName, string remote)
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
public static void updateDownloadConfig()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
Logger.Log($"Attempting to Update Download Config");
try
{
dynamic results = JsonConvert.DeserializeObject<dynamic>(RCLONE.runRcloneCommand($"size \"{remote}:{RcloneGamesFolder}/{FolderName}\" --json").Output);
long gameSize = results.bytes.ToObject<long>();
return gameSize / 1000000;
string configUrl = "https://wiki.vrpirates.club/downloads/vrp.download.config";
HttpWebRequest getUrl = (HttpWebRequest)WebRequest.Create(configUrl);
using (StreamReader responseReader = new StreamReader(getUrl.GetResponse().GetResponseStream()))
{
string resultString = responseReader.ReadToEnd();
Logger.Log($"Retrived updated config from: {configUrl}");
if (File.Exists(Environment.CurrentDirectory + "\\rclone\\vrp.download.config_new"))
File.Delete(Environment.CurrentDirectory + "\\rclone\\vrp.download.config_new");
File.Create(Environment.CurrentDirectory + "\\rclone\\vrp.download.config_new").Close();
File.WriteAllText(Environment.CurrentDirectory + "\\rclone\\vrp.download.config_new", resultString);
if (!File.Exists(Environment.CurrentDirectory + "\\rclone\\hash.txt"))
File.Create(Environment.CurrentDirectory + "\\rclone\\hash.txt").Close();
string newConfig = CalculateMD5(Environment.CurrentDirectory + "\\rclone\\vrp.download.config_new");
string oldConfig = File.ReadAllText(Environment.CurrentDirectory + "\\rclone\\hash.txt");
if (!File.Exists(Environment.CurrentDirectory + "\\rclone\\vrp.download.config"))
oldConfig = "Config Doesnt Exist!";
Logger.Log($"Online Config Hash: {newConfig}; Local Config Hash: {oldConfig}");
if (newConfig != oldConfig)
{
Logger.Log($"Updated Config Hash is different than the current Config. Updating Configuration File.");
if (File.Exists(Environment.CurrentDirectory + "\\rclone\\vrp.download.config"))
File.Delete(Environment.CurrentDirectory + "\\rclone\\vrp.download.config");
File.Move(Environment.CurrentDirectory + "\\rclone\\vrp.download.config_new", Environment.CurrentDirectory + "\\rclone\\vrp.download.config");
File.WriteAllText(Environment.CurrentDirectory + "\\rclone\\hash.txt", string.Empty);
File.WriteAllText(Environment.CurrentDirectory + "\\rclone\\hash.txt", newConfig);
} else
{
Logger.Log($"Updated Config Hash matches last download. Not updating.");
if (File.Exists(Environment.CurrentDirectory + "\\rclone\\vrp.download.config_new"))
File.Delete(Environment.CurrentDirectory + "\\rclone\\vrp.download.config_new");
}
}
}
catch { return 0; }
catch { }
}
public static async Task updateConfig(string remote)
public static void updateUploadConfig()
{
string localHash = "";
try { localHash = File.ReadAllText(Environment.CurrentDirectory + "\\rclone\\hash.txt"); } catch { } //file may not exist
string hash = RCLONE.runRcloneCommand($"md5sum \"{remote}:Quest Homebrew/Sideloading Methods/1. Rookie Sideloader - VRP Edition/VRP.download.config\"").Output;
try { hash = hash.Substring(0, hash.LastIndexOf(" ")); } catch { return; } //remove stuff after hash
Debug.WriteLine("The local file hash is " + localHash + " and the current a file hash is " + hash);
if (!string.Equals(localHash, hash))
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
Logger.Log($"Attempting to Update Upload Config");
try
{
RCLONE.runRcloneCommand(string.Format($"copy \"{remote}:Quest Homebrew/Sideloading Methods/1. Rookie Sideloader - VRP Edition/VRP.download.config\" \"{Environment.CurrentDirectory}\\rclone\""));
RCLONE.killRclone();
File.WriteAllText(Environment.CurrentDirectory + "\\rclone\\hash.txt", hash);
string configUrl = "https://wiki.vrpirates.club/downloads/vrp.upload.config";
HttpWebRequest getUrl = (HttpWebRequest)WebRequest.Create(configUrl);
using (StreamReader responseReader = new StreamReader(getUrl.GetResponse().GetResponseStream()))
{
string resultString = responseReader.ReadToEnd();
Logger.Log($"Retrived updated config from: {configUrl}");
File.WriteAllText(Environment.CurrentDirectory + "\\rclone\\vrp.upload.config", resultString);
Logger.Log("Upload config updated successfully.");
}
}
catch (Exception e)
{
Logger.Log($"Failed to update Upload config: {e.Message}");
}
}
public static void updatePublicConfig()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
Logger.Log($"Attempting to Update Public Config");
try
{
string configUrl = "https://wiki.vrpirates.club/downloads/vrp-public.json";
HttpWebRequest getUrl = (HttpWebRequest)WebRequest.Create(configUrl);
using (StreamReader responseReader = new StreamReader(getUrl.GetResponse().GetResponseStream()))
{
string resultString = responseReader.ReadToEnd();
Logger.Log($"Retrived updated config from: {configUrl}");
File.WriteAllText(Environment.CurrentDirectory + "\\vrp-public.json", resultString);
Logger.Log("Public config updated successfully.");
}
}
catch (Exception e)
{
Logger.Log($"Failed to update Public config: {e.Message}");
}
}
static string CalculateMD5(string filename)
{
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(filename))
{
var hash = md5.ComputeHash(stream);
return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
}
}
}
}
}
}

View File

@@ -1,4 +1,8 @@
using System.IO;
using System;
using System.IO;
using System.Management;
using System.Security.Cryptography;
using System.Text;
namespace AndroidSideloader
{
@@ -9,9 +13,56 @@ namespace AndroidSideloader
string[] files = Directory.GetFiles(path);
foreach (string file in files)
if (file.EndsWith(".obb"))
if (file.EndsWith(".obb") || Path.GetDirectoryName(file).Contains(".") && !Path.GetDirectoryName(file).Contains("_data"))
return true;
return false;
}
private static string uuid = null;
public static string UUID()
{
if (uuid != null) return uuid;
StringBuilder sb = new StringBuilder();
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Processor");
foreach (ManagementObject queryObj in searcher.Get())
{
sb.Append(queryObj["NumberOfCores"]);
sb.Append(queryObj["ProcessorId"]);
sb.Append(queryObj["Name"]);
sb.Append(queryObj["SocketDesignation"]);
}
searcher = new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_BIOS");
foreach (ManagementObject queryObj in searcher.Get())
{
sb.Append(queryObj["Manufacturer"]);
sb.Append(queryObj["Name"]);
sb.Append(queryObj["Version"]);
}
searcher = new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_BaseBoard");
foreach (ManagementObject queryObj in searcher.Get())
{
sb.Append(queryObj["Product"]);
}
var bytes = Encoding.ASCII.GetBytes(sb.ToString());
SHA256Managed sha = new SHA256Managed();
byte[] hash = sha.ComputeHash(bytes);
uuid = BitConverter.ToString(hash).Replace("-", "");
return uuid;
}
}
}

58
Splash.Designer.cs generated Normal file
View File

@@ -0,0 +1,58 @@
namespace AndroidSideloader
{
partial class Splash
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Splash));
this.SuspendLayout();
//
// Splash
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.CausesValidation = false;
this.ClientSize = new System.Drawing.Size(427, 250);
this.ControlBox = false;
this.DoubleBuffered = true;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "Splash";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Splash";
this.ResumeLayout(false);
}
#endregion
}
}

20
Splash.cs Normal file
View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AndroidSideloader
{
public partial class Splash : Form
{
public Splash()
{
InitializeComponent();
}
}
}

413
Splash.resx Normal file
View File

@@ -0,0 +1,413 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

71
SpoofForm.Designer.cs generated
View File

@@ -29,9 +29,9 @@
private void InitializeComponent()
{
this.PackageNameTextBox = new System.Windows.Forms.TextBox();
this.RandomizeButton = new System.Windows.Forms.Button();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.SpoofButton = new System.Windows.Forms.Button();
this.SpoofButton = new AndroidSideloader.RoundButton();
this.RandomizeButton = new AndroidSideloader.RoundButton();
this.SuspendLayout();
//
// PackageNameTextBox
@@ -47,23 +47,6 @@
this.PackageNameTextBox.Size = new System.Drawing.Size(273, 24);
this.PackageNameTextBox.TabIndex = 1;
//
// RandomizeButton
//
this.RandomizeButton.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.RandomizeButton.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.RandomizeButton.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.RandomizeButton.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.RandomizeButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.RandomizeButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.RandomizeButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.RandomizeButton.Location = new System.Drawing.Point(12, 72);
this.RandomizeButton.Name = "RandomizeButton";
this.RandomizeButton.Size = new System.Drawing.Size(110, 42);
this.RandomizeButton.TabIndex = 2;
this.RandomizeButton.Text = "Randomize";
this.RandomizeButton.UseVisualStyleBackColor = false;
this.RandomizeButton.Click += new System.EventHandler(this.RandomizeButton_Click);
//
// progressBar1
//
this.progressBar1.Location = new System.Drawing.Point(13, 43);
@@ -73,30 +56,56 @@
//
// SpoofButton
//
this.SpoofButton.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.SpoofButton.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.SpoofButton.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.SpoofButton.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.SpoofButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SpoofButton.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.SpoofButton.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.SpoofButton.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.SpoofButton.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.SpoofButton.BackColor = System.Drawing.Color.Transparent;
this.SpoofButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.SpoofButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.SpoofButton.ForeColor = System.Drawing.Color.White;
this.SpoofButton.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.SpoofButton.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.SpoofButton.Location = new System.Drawing.Point(176, 72);
this.SpoofButton.Name = "SpoofButton";
this.SpoofButton.Radius = 5;
this.SpoofButton.Size = new System.Drawing.Size(110, 42);
this.SpoofButton.TabIndex = 4;
this.SpoofButton.Stroke = true;
this.SpoofButton.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.SpoofButton.TabIndex = 5;
this.SpoofButton.Text = "Spoof!";
this.SpoofButton.UseVisualStyleBackColor = false;
this.SpoofButton.Transparency = false;
this.SpoofButton.Click += new System.EventHandler(this.SpoofButton_Click);
//
// RandomizeButton
//
this.RandomizeButton.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.RandomizeButton.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.RandomizeButton.BackColor = System.Drawing.Color.Transparent;
this.RandomizeButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.RandomizeButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.RandomizeButton.ForeColor = System.Drawing.Color.White;
this.RandomizeButton.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.RandomizeButton.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.RandomizeButton.Location = new System.Drawing.Point(12, 72);
this.RandomizeButton.Name = "RandomizeButton";
this.RandomizeButton.Radius = 5;
this.RandomizeButton.Size = new System.Drawing.Size(110, 42);
this.RandomizeButton.Stroke = true;
this.RandomizeButton.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.RandomizeButton.TabIndex = 6;
this.RandomizeButton.Text = "Randomize";
this.RandomizeButton.Transparency = false;
this.RandomizeButton.Click += new System.EventHandler(this.RandomizeButton_Click);
//
// SpoofForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.ClientSize = new System.Drawing.Size(300, 131);
this.Controls.Add(this.RandomizeButton);
this.Controls.Add(this.SpoofButton);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.RandomizeButton);
this.Controls.Add(this.PackageNameTextBox);
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.MaximumSize = new System.Drawing.Size(316, 170);
@@ -111,8 +120,8 @@
#endregion
private System.Windows.Forms.TextBox PackageNameTextBox;
private System.Windows.Forms.Button RandomizeButton;
private System.Windows.Forms.ProgressBar progressBar1;
private System.Windows.Forms.Button SpoofButton;
private RoundButton SpoofButton;
private RoundButton RandomizeButton;
}
}

235
ThemeForm.Designer.cs generated
View File

@@ -1,235 +0,0 @@
namespace AndroidSideloader
{
partial class themeForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.colorDialog1 = new System.Windows.Forms.ColorDialog();
this.button1 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.button7 = new System.Windows.Forms.Button();
this.button8 = new System.Windows.Forms.Button();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.button9 = new System.Windows.Forms.Button();
this.button10 = new System.Windows.Forms.Button();
this.fontDialog1 = new System.Windows.Forms.FontDialog();
this.button3 = new System.Windows.Forms.Button();
this.button11 = new System.Windows.Forms.Button();
this.button12 = new System.Windows.Forms.Button();
this.button13 = new System.Windows.Forms.Button();
this.openThemeDialog = new System.Windows.Forms.OpenFileDialog();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// colorDialog1
//
this.colorDialog1.AnyColor = true;
this.colorDialog1.FullOpen = true;
//
// button1
//
this.button1.Location = new System.Drawing.Point(13, 12);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(128, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Set backgorund color";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button4
//
this.button4.Location = new System.Drawing.Point(13, 125);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(128, 23);
this.button4.TabIndex = 0;
this.button4.Text = "Set button color";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// button5
//
this.button5.Location = new System.Drawing.Point(13, 181);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(128, 23);
this.button5.TabIndex = 0;
this.button5.Text = "Set combobox color";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button5_Click);
//
// button7
//
this.button7.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.button7.Location = new System.Drawing.Point(185, 11);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(93, 52);
this.button7.TabIndex = 1;
this.button7.Text = "Save";
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += new System.EventHandler(this.button7_Click);
//
// button8
//
this.button8.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.button8.Location = new System.Drawing.Point(185, 69);
this.button8.Name = "button8";
this.button8.Size = new System.Drawing.Size(93, 52);
this.button8.TabIndex = 2;
this.button8.Text = "Reset";
this.button8.UseVisualStyleBackColor = true;
this.button8.Click += new System.EventHandler(this.button8_Click);
//
// openFileDialog1
//
this.openFileDialog1.Filter = "Images|*.png;*.jpg;*.bmp;*.gif";
//
// button9
//
this.button9.Location = new System.Drawing.Point(13, 40);
this.button9.Name = "button9";
this.button9.Size = new System.Drawing.Size(128, 23);
this.button9.TabIndex = 3;
this.button9.Text = "Set background picture";
this.button9.UseVisualStyleBackColor = true;
this.button9.Click += new System.EventHandler(this.button9_Click);
//
// button10
//
this.button10.Location = new System.Drawing.Point(13, 97);
this.button10.Name = "button10";
this.button10.Size = new System.Drawing.Size(128, 23);
this.button10.TabIndex = 4;
this.button10.Text = "Set font style";
this.button10.UseVisualStyleBackColor = true;
this.button10.Click += new System.EventHandler(this.button10_Click);
//
// fontDialog1
//
this.fontDialog1.Color = System.Drawing.Color.White;
this.fontDialog1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
//
// button3
//
this.button3.Location = new System.Drawing.Point(13, 69);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(128, 23);
this.button3.TabIndex = 5;
this.button3.Text = "Set font color";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// button11
//
this.button11.Location = new System.Drawing.Point(13, 153);
this.button11.Name = "button11";
this.button11.Size = new System.Drawing.Size(128, 23);
this.button11.TabIndex = 6;
this.button11.Text = "Set sub-button color";
this.button11.UseVisualStyleBackColor = true;
this.button11.Click += new System.EventHandler(this.button11_Click);
//
// button12
//
this.button12.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.button12.Location = new System.Drawing.Point(185, 127);
this.button12.Name = "button12";
this.button12.Size = new System.Drawing.Size(93, 52);
this.button12.TabIndex = 7;
this.button12.Text = "Export Theme";
this.button12.UseVisualStyleBackColor = true;
this.button12.Click += new System.EventHandler(this.button12_Click);
//
// button13
//
this.button13.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
this.button13.Location = new System.Drawing.Point(185, 185);
this.button13.Name = "button13";
this.button13.Size = new System.Drawing.Size(93, 52);
this.button13.TabIndex = 8;
this.button13.Text = "Import theme";
this.button13.UseVisualStyleBackColor = true;
this.button13.Click += new System.EventHandler(this.button13_Click);
//
// openThemeDialog
//
this.openThemeDialog.Filter = "Text Files|*.txt";
//
// button2
//
this.button2.Location = new System.Drawing.Point(13, 210);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(128, 23);
this.button2.TabIndex = 9;
this.button2.Text = "Set textbox color";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// themeForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.ClientSize = new System.Drawing.Size(290, 248);
this.Controls.Add(this.button2);
this.Controls.Add(this.button13);
this.Controls.Add(this.button12);
this.Controls.Add(this.button11);
this.Controls.Add(this.button3);
this.Controls.Add(this.button10);
this.Controls.Add(this.button9);
this.Controls.Add(this.button8);
this.Controls.Add(this.button7);
this.Controls.Add(this.button5);
this.Controls.Add(this.button4);
this.Controls.Add(this.button1);
this.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.Name = "themeForm";
this.Text = "Create Your Theme";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ColorDialog colorDialog1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button7;
private System.Windows.Forms.Button button8;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.Button button9;
private System.Windows.Forms.Button button10;
private System.Windows.Forms.FontDialog fontDialog1;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button11;
private System.Windows.Forms.Button button12;
private System.Windows.Forms.Button button13;
private System.Windows.Forms.OpenFileDialog openThemeDialog;
private System.Windows.Forms.Button button2;
}
}

View File

@@ -1,171 +0,0 @@
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using System.Collections.Specialized;
namespace AndroidSideloader
{
public partial class themeForm : Form
{
public themeForm()
{
InitializeComponent();
}
//Code made by @Gotard#9164 from discord (id 352745203322585088)
//Steam profile: https://steamcommunity.com/id/GotardPL/
private void button4_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
Properties.Settings.Default.ButtonColor = colorDialog1.Color;
}
private void button1_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
Properties.Settings.Default.BackColor = colorDialog1.Color;
}
private void button7_Click(object sender, EventArgs e)
{
Properties.Settings.Default.Save();
this.Close();
}
private void button8_Click(object sender, EventArgs e)
{
Properties.Settings.Default.BackColor = Color.FromArgb(45,45,45);
Properties.Settings.Default.ComboBoxColor = Color.FromArgb(45, 45, 45);
Properties.Settings.Default.TextBoxColor = Color.FromArgb(45,45,45);
Properties.Settings.Default.ButtonColor = SystemColors.ActiveCaptionText;
Properties.Settings.Default.SubButtonColor=Color.FromArgb(64, 64, 64);
Properties.Settings.Default.BackPicturePath = "";
Properties.Settings.Default.FontStyle = new Font("Microsoft Sans Serif", 11, FontStyle.Regular);
Properties.Settings.Default.FontColor = Color.White;
Properties.Settings.Default.Save();
}
private void button5_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
Properties.Settings.Default.ComboBoxColor = colorDialog1.Color;
}
private void button9_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
String extension = Path.GetExtension(openFileDialog1.FileName);
if (File.Exists(Environment.CurrentDirectory + "\\pic" + extension))
File.Delete(Environment.CurrentDirectory + "\\pic" + extension);
File.Copy(openFileDialog1.FileName, Environment.CurrentDirectory + "\\pic" + extension);
Properties.Settings.Default.BackPicturePath = Environment.CurrentDirectory + "\\pic" + extension ;
}
}
private void button10_Click(object sender, EventArgs e)
{
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
Properties.Settings.Default.FontStyle = fontDialog1.Font;
}
}
private void button3_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
Properties.Settings.Default.FontColor = colorDialog1.Color;
}
private void button11_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
Properties.Settings.Default.SubButtonColor = colorDialog1.Color;
}
private void button12_Click(object sender, EventArgs e)
{
String BackColor = ColorTranslator.ToHtml(Properties.Settings.Default.BackColor);
String TextBoxColor = ColorTranslator.ToHtml(Properties.Settings.Default.TextBoxColor);
String ComboBoxColor = ColorTranslator.ToHtml(Properties.Settings.Default.ComboBoxColor);
String ButtonColor = ColorTranslator.ToHtml(Properties.Settings.Default.ButtonColor);
String SubButtonColor = ColorTranslator.ToHtml(Properties.Settings.Default.SubButtonColor);
String FontColor = ColorTranslator.ToHtml(Properties.Settings.Default.FontColor);
var cvt = new FontConverter();
string FontStyle = cvt.ConvertToString(Properties.Settings.Default.FontStyle);
int i;
if (File.Exists(Environment.CurrentDirectory + "\\theme.txt"))
{
if (File.Exists(Environment.CurrentDirectory + "\\theme11.txt"))
MessageBox.Show("You can't export more than 12 themes, sorry :(");
else
{
for (i = 1; i <= 10; i++)
{
if (File.Exists(Environment.CurrentDirectory + "\\theme" + i + ".txt"))
continue;
else
{
break;
}
}
File.WriteAllText(Environment.CurrentDirectory + "\\theme" + i + ".txt", "#SideloaderTheme# \n" + BackColor + "\n" + ButtonColor + "\n" + SubButtonColor + "\n"
+ TextBoxColor + "\n" + ComboBoxColor + "\n" + FontColor + "\n" + FontStyle);
MessageBox.Show("Theme exported as theme" + i + ".txt");
}
}
else
{
File.WriteAllText(Environment.CurrentDirectory + "\\theme.txt", "#SideloaderTheme# \n" + BackColor + "\n" + ButtonColor + "\n" + SubButtonColor + "\n"
+ TextBoxColor + "\n" + ComboBoxColor + "\n" + FontColor + "\n" + FontStyle);
MessageBox.Show("Theme exported as theme.txt");
}
}
private void button13_Click(object sender, EventArgs e)
{
openThemeDialog.InitialDirectory = Environment.CurrentDirectory;
if (openThemeDialog.ShowDialog() == DialogResult.OK) {
using (StreamReader sr = new StreamReader(openThemeDialog.FileName))
{
StringCollection myCol = new StringCollection();
myCol.AddRange(File.ReadAllLines(openThemeDialog.FileName));
if (myCol.Contains("#SideloaderTheme# "))
{
String[] settings = new String[myCol.Count];
myCol.CopyTo(settings, 0);
Color BackColor = ColorTranslator.FromHtml(settings[1]);
Color ButtonColor = ColorTranslator.FromHtml(settings[2]);
Color SubButtonColor = ColorTranslator.FromHtml(settings[3]);
Color TextBoxColor = ColorTranslator.FromHtml(settings[4]);
Color ComboBoxColor = ColorTranslator.FromHtml(settings[5]);
Color FontColor = ColorTranslator.FromHtml(settings[6]);
Properties.Settings.Default.BackColor = BackColor;
Properties.Settings.Default.ButtonColor = ButtonColor;
Properties.Settings.Default.SubButtonColor = SubButtonColor;
Properties.Settings.Default.TextBoxColor = TextBoxColor;
Properties.Settings.Default.ComboBoxColor = ComboBoxColor;
Properties.Settings.Default.FontColor = FontColor;
System.ComponentModel.TypeConverter converter =
System.ComponentModel.TypeDescriptor.GetConverter(typeof(Font));
var cvt = new FontConverter();
Font f = cvt.ConvertFromString(settings[7]) as Font;
Properties.Settings.Default.FontStyle = f;
}
else
MessageBox.Show("The file you've selected is not a Rookie's Sideloader theme file!");
}
}
}
private void button2_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
Properties.Settings.Default.TextBoxColor = colorDialog1.Color;
}
}
}

29
Transparenter.cs Normal file
View File

@@ -0,0 +1,29 @@
using System.Drawing;
using System.Windows.Forms;
namespace AndroidSideloader
{
public class Transparenter
{
public static void MakeTransparent(Control control, Graphics g)
{
var parent = control.Parent;
if (parent == null) return;
var bounds = control.Bounds;
var siblings = parent.Controls;
int index = siblings.IndexOf(control);
Bitmap behind = null;
for (int i = siblings.Count - 1; i > index; i--)
{
var c = siblings[i];
if (!c.Bounds.IntersectsWith(bounds)) continue;
if (behind == null)
behind = new Bitmap(control.Parent.ClientSize.Width, control.Parent.ClientSize.Height);
c.DrawToBitmap(behind, c.Bounds);
}
if (behind == null) return;
g.DrawImage(behind, control.ClientRectangle, bounds, GraphicsUnit.Pixel);
behind.Dispose();
}
}
}

182
UpdateForm.Designer.cs generated Normal file
View File

@@ -0,0 +1,182 @@

namespace AndroidSideloader
{
partial class UpdateForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.panel3 = new System.Windows.Forms.Panel();
this.UpdateTextBox = new System.Windows.Forms.RichTextBox();
this.UpdateVerLabel = new System.Windows.Forms.Label();
this.CurVerLabel = new System.Windows.Forms.Label();
this.SkipUpdate = new System.Windows.Forms.Label();
this.YesUpdate = new AndroidSideloader.RoundButton();
this.panel1.SuspendLayout();
this.panel3.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.panel1.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.panel1.Controls.Add(this.YesUpdate);
this.panel1.Controls.Add(this.panel3);
this.panel1.Controls.Add(this.UpdateVerLabel);
this.panel1.Controls.Add(this.CurVerLabel);
this.panel1.Controls.Add(this.SkipUpdate);
this.panel1.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "BackColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.panel1.Location = new System.Drawing.Point(-6, -6);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(474, 305);
this.panel1.TabIndex = 5;
this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.UpdateForm_MouseDown);
this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.UpdateForm_MouseMove);
this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.UpdateForm_MouseUp);
//
// panel3
//
this.panel3.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.panel3.Controls.Add(this.UpdateTextBox);
this.panel3.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.panel3.Location = new System.Drawing.Point(21, 19);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(432, 218);
this.panel3.TabIndex = 0;
//
// UpdateTextBox
//
this.UpdateTextBox.BackColor = global::AndroidSideloader.Properties.Settings.Default.ComboBoxColor;
this.UpdateTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.UpdateTextBox.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "ComboBoxColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.UpdateTextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F);
this.UpdateTextBox.ForeColor = System.Drawing.Color.White;
this.UpdateTextBox.Location = new System.Drawing.Point(12, 8);
this.UpdateTextBox.Margin = new System.Windows.Forms.Padding(6);
this.UpdateTextBox.Name = "UpdateTextBox";
this.UpdateTextBox.ReadOnly = true;
this.UpdateTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;
this.UpdateTextBox.Size = new System.Drawing.Size(408, 200);
this.UpdateTextBox.TabIndex = 1;
this.UpdateTextBox.Text = "";
this.UpdateTextBox.TextChanged += new System.EventHandler(this.UpdateTextBox_TextChanged);
this.UpdateTextBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.UpdateForm_MouseDown);
this.UpdateTextBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.UpdateForm_MouseMove);
this.UpdateTextBox.MouseUp += new System.Windows.Forms.MouseEventHandler(this.UpdateForm_MouseUp);
//
// UpdateVerLabel
//
this.UpdateVerLabel.AutoSize = true;
this.UpdateVerLabel.BackColor = System.Drawing.Color.Transparent;
this.UpdateVerLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);
this.UpdateVerLabel.ForeColor = System.Drawing.SystemColors.Control;
this.UpdateVerLabel.Location = new System.Drawing.Point(21, 261);
this.UpdateVerLabel.Name = "UpdateVerLabel";
this.UpdateVerLabel.Size = new System.Drawing.Size(94, 15);
this.UpdateVerLabel.TabIndex = 3;
this.UpdateVerLabel.Text = "Update Version:";
//
// CurVerLabel
//
this.CurVerLabel.AutoSize = true;
this.CurVerLabel.BackColor = System.Drawing.Color.Transparent;
this.CurVerLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);
this.CurVerLabel.ForeColor = System.Drawing.SystemColors.Control;
this.CurVerLabel.Location = new System.Drawing.Point(21, 245);
this.CurVerLabel.Name = "CurVerLabel";
this.CurVerLabel.Size = new System.Drawing.Size(94, 15);
this.CurVerLabel.TabIndex = 2;
this.CurVerLabel.Text = "Current Version:";
//
// SkipUpdate
//
this.SkipUpdate.AutoSize = true;
this.SkipUpdate.BackColor = System.Drawing.Color.Transparent;
this.SkipUpdate.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.SkipUpdate.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F);
this.SkipUpdate.ForeColor = System.Drawing.Color.Silver;
this.SkipUpdate.Location = new System.Drawing.Point(374, 279);
this.SkipUpdate.Name = "SkipUpdate";
this.SkipUpdate.Size = new System.Drawing.Size(76, 13);
this.SkipUpdate.TabIndex = 4;
this.SkipUpdate.Text = "𝖲𝖪𝖨𝖯 𝖥𝖮𝖱 𝖭𝖮𝖶";
this.SkipUpdate.Click += new System.EventHandler(this.SkipUpdate_Click);
//
// YesUpdate
//
this.YesUpdate.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.YesUpdate.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.YesUpdate.BackColor = System.Drawing.Color.Transparent;
this.YesUpdate.DialogResult = System.Windows.Forms.DialogResult.OK;
this.YesUpdate.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.YesUpdate.ForeColor = System.Drawing.Color.White;
this.YesUpdate.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.YesUpdate.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.YesUpdate.Location = new System.Drawing.Point(339, 245);
this.YesUpdate.Name = "YesUpdate";
this.YesUpdate.Radius = 5;
this.YesUpdate.Size = new System.Drawing.Size(111, 31);
this.YesUpdate.Stroke = true;
this.YesUpdate.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.YesUpdate.TabIndex = 2;
this.YesUpdate.Text = "Update Now";
this.YesUpdate.Transparency = false;
this.YesUpdate.Click += new System.EventHandler(this.YesUpdate_Click);
//
// UpdateForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoValidate = System.Windows.Forms.AutoValidate.EnablePreventFocusChange;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(29)))), ((int)(((byte)(29)))), ((int)(((byte)(29)))));
this.ClientSize = new System.Drawing.Size(462, 291);
this.ControlBox = false;
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.Name = "UpdateForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.UpdateForm_MouseDown);
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.UpdateForm_MouseMove);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.UpdateForm_MouseUp);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.panel3.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label SkipUpdate;
private System.Windows.Forms.Label CurVerLabel;
private System.Windows.Forms.Label UpdateVerLabel;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.RichTextBox UpdateTextBox;
private System.Windows.Forms.Panel panel1;
private RoundButton YesUpdate;
}
}

65
UpdateForm.cs Normal file
View File

@@ -0,0 +1,65 @@
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 UpdateForm : Form
{
private bool mouseDown;
private Point lastLocation;
public UpdateForm()
{
InitializeComponent();
this.CenterToScreen();
CurVerLabel.Text += " " + Updater.LocalVersion;
UpdateVerLabel.Text += " " + Updater.currentVersion;
UpdateTextBox.Text = Updater.changelog;
}
private void YesUpdate_Click(object sender, EventArgs e)
{
Updater.doUpdate();
this.Close();
}
private void SkipUpdate_Click(object sender, EventArgs e)
{
this.Close();
}
private void UpdateTextBox_TextChanged(object sender, EventArgs e)
{
}
private void UpdateForm_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = true;
lastLocation = e.Location;
}
private void UpdateForm_MouseMove(object sender, MouseEventArgs e)
{
if (mouseDown)
{
this.Location = new Point(
(this.Location.X - lastLocation.X) + e.X, (this.Location.Y - lastLocation.Y) + e.Y);
this.Update();
}
}
private void UpdateForm_MouseUp(object sender, MouseEventArgs e)
{
mouseDown = false;
}
}
}

120
UpdateForm.resx Normal file
View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -17,7 +17,7 @@ namespace AndroidSideloader
private static string RawGitHubUrl;
private static string GitHubUrl;
static readonly public string LocalVersion = "2.1HF";
static readonly public string LocalVersion = "2.15";
public static string currentVersion = string.Empty;
public static string changelog = string.Empty;
@@ -28,42 +28,40 @@ namespace AndroidSideloader
try
{
currentVersion = client.GetStringAsync($"{RawGitHubUrl}/master/version").Result;
if (currentVersion.Length > LocalVersion.Length)
currentVersion = currentVersion.Remove(currentVersion.Length - 1);
currentVersion = currentVersion.Replace("\n", "");
changelog = client.GetStringAsync($"{RawGitHubUrl}/master/changelog.txt").Result;
client.Dispose();
currentVersion = currentVersion.Trim();
}
catch { return false; }
return LocalVersion != currentVersion;
return LocalVersion.Trim() != currentVersion;
}
//Call this to ask the user if they want to update
public static void Update()
{
RawGitHubUrl = $"https://raw.githubusercontent.com/{Repostory}";
GitHubUrl = $"https://github.com/{Repostory}";
RawGitHubUrl = $"https://raw.githubusercontent.com/nerdunit/androidsideloader";
GitHubUrl = $"https://github.com/nerdunit/androidsideloader";
if (IsUpdateAvailable())
doUpdate();
{
UpdateForm upForm = new UpdateForm();
upForm.ShowDialog(); ;
}
}
//If the user wants to update
private static void doUpdate()
public static void doUpdate()
{
DialogResult dialogResult = FlexibleMessageBox.Show($"There is a new update you have version {LocalVersion}, do you want to update?\nCHANGELOG\n{changelog}", $"Version {currentVersion} is available", MessageBoxButtons.YesNo);
if (dialogResult != DialogResult.Yes)
return;
//Download new sideloader with version appended to file name so there is no chance of overwriting the current exe
try
{
ADB.RunAdbCommandToString("kill-server");
var fileClient = new WebClient();
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Logger.Log($"Downloading update from {RawGitHubUrl}/releases/download/v{currentVersion}/{AppName}.exe to {AppName} v{currentVersion}.exe");
Logger.Log($"Downloading update from {GitHubUrl}/releases/download/v{currentVersion}/{AppName}.exe to {AppName} v{currentVersion}.exe");
fileClient.DownloadFile($"{GitHubUrl}/releases/download/v{currentVersion}/{AppName}.exe", $"{AppName} v{currentVersion}.exe");
fileClient.Dispose();
Logger.Log($"Starting {AppName} v{currentVersion}.exe");
Process.Start($"{AppName} v{currentVersion}.exe");
//Delete current version

View File

@@ -29,7 +29,7 @@
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.button1 = new AndroidSideloader.RoundButton();
this.SuspendLayout();
//
// textBox1
@@ -47,20 +47,23 @@
//
// button1
//
this.button1.BackColor = global::AndroidSideloader.Properties.Settings.Default.SubButtonColor;
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Font", global::AndroidSideloader.Properties.Settings.Default, "FontStyle", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("ForeColor", global::AndroidSideloader.Properties.Settings.Default, "FontColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.button1.DataBindings.Add(new System.Windows.Forms.Binding("BackColor", global::AndroidSideloader.Properties.Settings.Default, "SubButtonColor", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.Font = global::AndroidSideloader.Properties.Settings.Default.FontStyle;
this.button1.ForeColor = global::AndroidSideloader.Properties.Settings.Default.FontColor;
this.button1.Active1 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button1.Active2 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(45)))), ((int)(((byte)(45)))));
this.button1.BackColor = System.Drawing.Color.Transparent;
this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F);
this.button1.ForeColor = System.Drawing.Color.White;
this.button1.Inactive1 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button1.Inactive2 = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(25)))), ((int)(((byte)(25)))));
this.button1.Location = new System.Drawing.Point(13, 51);
this.button1.Margin = new System.Windows.Forms.Padding(0);
this.button1.Name = "button1";
this.button1.Radius = 5;
this.button1.Size = new System.Drawing.Size(418, 34);
this.button1.TabIndex = 1;
this.button1.Stroke = true;
this.button1.StrokeColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(74)))), ((int)(((byte)(74)))));
this.button1.TabIndex = 2;
this.button1.Text = "Create User.Json";
this.button1.UseVisualStyleBackColor = false;
this.button1.Transparency = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// UsernameForm
@@ -68,6 +71,7 @@
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = global::AndroidSideloader.Properties.Settings.Default.BackColor;
this.BackgroundImage = global::AndroidSideloader.Properties.Resources.pattern_cubes_1_1_1_0_0_0_1__000000_212121;
this.ClientSize = new System.Drawing.Size(443, 100);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
@@ -87,6 +91,6 @@
#endregion
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private RoundButton button1;
}
}

View File

@@ -2,7 +2,6 @@
using System.Text;
using System.Diagnostics;
using JR.Utils.GUI.Forms;
using System.Net;
using System.Windows.Forms;
using System.Net.Http;
using System.IO;
@@ -100,25 +99,4 @@ namespace AndroidSideloader.Utilities
}
}
class Zip
{
public static void ExtractFile(string sourceArchive, string destination)
{
if (!File.Exists(Environment.CurrentDirectory + "\\7z.exe"))
{
WebClient client = new WebClient();
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");
}
ProcessStartInfo pro = new ProcessStartInfo();
pro.WindowStyle = ProcessWindowStyle.Hidden;
pro.FileName = "7z.exe";
pro.Arguments = string.Format("x \"{0}\" -y -o\"{1}\"", sourceArchive, destination);
Process x = Process.Start(pro);
x.WaitForExit();
}
}
}

View File

@@ -1,17 +1,25 @@
using System.IO;
using System;
using System.IO;
using System.Windows.Forms;
namespace AndroidSideloader
{
class Logger
{
public static string logfile = "debuglog.txt";
public string logfile = Properties.Settings.Default.CurrentLogPath;
public static bool Log(string text, bool ret = true)
{
string newline = "\n";
if (text.Length > 40 && text.Contains("\n"))
newline += "\n\n";
try { File.AppendAllText(logfile, text + newline); } catch { }
string time = DateTime.Now.ToString("hh:mmtt(UTC): ");
if (text.Length > 5)
{
string newline = "\n";
if (text.Length > 40 && text.Contains("\n"))
newline += "\n\n";
try {File.AppendAllText(Properties.Settings.Default.CurrentLogPath, time + text + newline); } catch { }
return ret;
}
return ret;
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AndroidSideloader.Utilities
{
class UpdateGameData
{
public UpdateGameData(String gameName, String packageName, ulong installedVersionInt)
{
this.GameName = gameName;
this.Packagename = packageName;
this.InstalledVersionInt = installedVersionInt;
}
public string GameName { get; set; }
public string Packagename { get; set; }
public ulong InstalledVersionInt { get; set; }
}
}

34
Utilities/UploadGame.cs Normal file
View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AndroidSideloader.Utilities
{
class UploadGame
{
public UploadGame(string Uploadcommand, string Pckgcommand, string Uploadgamename, ulong Uploadversion, bool isUpdate)
{
this.Uploadcommand = Uploadcommand;
this.Pckgcommand = Pckgcommand;
this.Uploadgamename = Uploadgamename;
this.Uploadversion = Uploadversion;
this.isUpdate = isUpdate;
}
public UploadGame()
{
}
public bool isUpdate { get; set; }
public string Uploadcommand { get; set; }
public string Pckgcommand { get; set; }
public string Uploadgamename { get; set; }
public ulong Uploadversion { get; set; }
}
}

53
Utilities/Zip.cs Normal file
View File

@@ -0,0 +1,53 @@
using System;
using System.Diagnostics;
using System.Net;
using System.IO;
namespace AndroidSideloader.Utilities
{
class Zip
{
public static void ExtractFile(string sourceArchive, string destination)
{
var args = $"x \"{sourceArchive}\" -y -o\"{destination}\"";
DoExtract(args);
}
public static void ExtractFile(string sourceArchive, string destination, string password)
{
var args = $"x \"{sourceArchive}\" -y -o\"{destination}\" -p\"{password}\"";
DoExtract(args);
}
private static void DoExtract(string args)
{
if (!File.Exists(Environment.CurrentDirectory + "\\7z.exe") || !File.Exists(Environment.CurrentDirectory + "\\7z.dll"))
{
Logger.Log("Begin download 7-zip");
WebClient client = new WebClient();
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");
Logger.Log("Complete download 7-zip");
}
ProcessStartInfo pro = new ProcessStartInfo();
pro.WindowStyle = ProcessWindowStyle.Hidden;
pro.FileName = "7z.exe";
pro.Arguments = args;
pro.CreateNoWindow = true;
pro.UseShellExecute = false;
Logger.Log($"Extract: 7z {args}");
Process x = Process.Start(pro);
x.WaitForExit();
if (x.ExitCode != 0)
{
Logger.Log($"Extract failed");
Logger.Log(x.StandardOutput.ReadToEnd());
throw new ApplicationException($"Extracting failed, status code {x.ExitCode}");
}
}
}
}

BIN
aapt.exe Normal file

Binary file not shown.

BIN
adb.7z

Binary file not shown.

BIN
adb2.zip Normal file

Binary file not shown.

View File

@@ -1,680 +1,12 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
!!!IMPORTANT!!!
THIS VERSION IS A WORK IN PROGRESS DUE TO LACK OF TESTERS!!!
v2.1
-Changes-
+ Backups are now stored in Documents\Rookie Backups\(BackupDate) folder.
+ 404 error fixed.
+ If installing an app that has a different patching method or signature than the previous version did user will now recieve a prompt for the option to upgrade which will backup savedata then uninstall and reinstall the app. NOTE: Not all apps allow backup of savedata.
+ Refresh updates list now loads much faster and refreshes the main update list.
+ Added Wireless ADB functionality.
+ Added Enable Wireless ADB and Remove Wireless ADB buttons to main menu.
+ Added ">" symbols on collapsible and expandable menu items to let user know they can be expanded/collapsed.
+ "Hand/Finger pointer" symbol added above clickable main menu buttons to let user know they're clickable.
+ Added logic to allow entire list to load and compare installed versions with Rclone versions before populating and added informative text of this step to the bottom/title bar.
+ Added QU Settings for their newest patch method. Can be found under Quest Options, this will allow you to change settings for any games that include "-QU" in the version/filename. Click Enable QU Settings box to reveal the options.
DETAILS: Clicking enable again will remove the settings file, if you re-enable you MUST click apply again for it to work. QU Settings are applied automatically when any games are Downloaded/Installed via Rookie as long as the custom settings been enabled and applied in the Quest Options menu.Once applied they can also be added to any already installed titles by selecting the game you wish to add them to in the menu at the top of RSL in the main window then(the same list used to uninstall games) then clicking on Install QU Setting. To remove a setting for a game select it from the same menu and click Remove QU Setting. If you click Delete Custom Settings in Quest Options it will not delete settings for any games installed while it was enabled, you must do this with the previously mentioned Remove QU Setting option. Clear Settings just clears the values entered in the fields. Settings entered into those fields will persist between instances of RSL.
+ Public key for HarryEffingPotter(Rookie contributor/VRPE dev) added to Rookie directory.
= Fixed Install.txt automation to make Manual installs automatic.
- -HarryEffingPotter-
Released: May 29th 2021
Public key for Rookie and HarryEffingPotter included in Rookie directory along with Checksum(can be run with QuickSFV.exe)
THIS SOFTWARE IS FREE TO USE, IF YOU PAID FOR IT YOU WERE RIPPED OFF. We can be found on Telegram @ t.me/VRPirates.
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEKjgtlwMyrpVu4TGfx/Rql1VoczcFAmCyMHUACgkQx/Rql1Vo
czeJ+Q//ZBEopVVZVc/IcmYFS05hUy+xHFd8QWajSCAFsQVyCctEPEzsluOSmwM1
OQlO0awzMM4s9IWwPIk0/caML7ZgkwDlIxR7KgasgI+BirrFCz1VImILoF1CiSHV
q5Xj6GQ3NPE0xK1QDe4fCVdXX+VScqQOAnP/ohkfHfuP0ce6KKxZpH/UeafDjh+V
Birzv6a+1dMnewJHnAwn6xg5Q8jvPT4Iz++t4XBS3k/dg5bMpLg4T6dwPnuJ3zjh
muThmNzBSw1ICegO/SaF8jhgGrhwVsF7aM9pVv2fvYaFpDbuxITQOcV+jcvO6Orf
R/LTf26pdguQnuc/KLWMCthMtNr1O7q3tnVF8DGVio5yzL0lKfVkDqjb3Qp+GTYB
f/lZyrzKZyt1OaVInmxtLsj5wavQtcYRUeJGU9ABd6yb9ecmgJlP6rwPR1RMiZWS
B/nEC8td1JeTK7qhop/FA1qoQ9Z+2cSVCuILKcKj8B1ushxQzDdIDeqrwPxz98Ta
5voJKtq8wWtV8gkldVCvZRvlIi3qaIFBLutnY5AqTxmDHgaTdF1l3adauK32alyL
xUsQits39mBui6bMBw1fCfw1zu3uqh7gylZ/j0t+XLVDJtIC+UcRTjjIpRLeHjM8
O8gLNx7jFtRtm/vO1jAlS7Zu3LHIxq6I9kwOZsbwNQe7yqfUwPw=
=iJ4Y
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
!!!IMPORTANT!!!
THIS VERSION IS WORK IN PROGRESS DUE TO LACK OF TESTERS!
Due to how the rclone config works now, if you used Rookie's Sideloader with a custom config
Make sure to redownload the entire rclone folder from the config provider!
I forgot, adb usb isn't called at start so the last changelog was wrong
Also this was the first release to use GIT and sideloader had broken updates so thats why the huge ammount of commits in such a short time sorry
v2.0-WIP-SU1
Changes
= Enabled mount button
= Pushed UI Changes made by harry
Date 15/04/2021
VT: https://bit.ly/3uPda5K
MD5 Checksum: 4259AD179E8C56478828FFFC38586BE0
SHA-1 Checksum: 44C1754D0CD0B1677A73BE5A10B05E02BC85E6B7
SHA-256 Checksum: 8D6CCFB6DDA656BB3FEB1EBAB4F3BA9D9A0D431398A80F23F8C1E097DEB8B827
SHA-512 Checksum: B6DF140C00E3761698C604BCD1A8835C6B2EB5BE18477C3BB69900E2353EE42C196A475E81A95D495C346C35CD2100148FA5E5A0C03D3FEBCB4F469E7E8C6EBF
You can always get my public key from miligra.me/pgp
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAmB3+4UACgkQvrtJUNxE
TxP75BAAknKjeZmhvXGn8ScYyRIdl/hOk0fjJ8tk4UJBFByrMqDJPyGsQW5z+bRl
RinNEmV0LWfT1I4wFoX755NXBoQfxd2ZgRo9EQ5w6AxeVoml1vL7p38NbmQZ2dEb
nXJFz0Ds+8jW+LDcCBC05rQjOoz3yiFm+lXQpQfuX0/KppJn7aFmijSZ11dFytWI
Ih8aOQVmrt7PUwIFT0ZZbHuQsFjN5cNWUK3S+s7qnjo6RLRiwmbSGO6Bt9vnAgtR
IlaRa9im4wjWnCGrXw7cLv44SkaHuolJ7fGWN5kgO3ulOsqz5/scsRG57RQjCxlQ
9wbveyROLCAbuJ4GVcgKPTimVIuZJg4rE1exV1ey3oYopjrfXOkqbeUILQFOGqIf
oQ7qEIMx8hOcT5Yz81eddSKZXOOBUgYuI91XX+ROwb4DXkAWZbqSWEZcUuKUz95P
U6mEqdtCEE3OVEzA1w/eW+o3l3m6nPc60SFV2jpNQPV/QOZYme4njOOmpvqrCqQN
4HQse91FJdkIllIL6DgfcavvpKqpstuBH3iY8DWUu4rb6HX+OimscFKmJCXNKYO3
peCKU/Rq4zAZXCxtxJRlitgPaBx/RUdQ2ZtWR+86aUlNSvE+9X0FCPY0iiqQ7/iy
2V28poXEr5Nn5zn3EfiTjBooJ9LM9Kmc3tV0uxUlbAT2MdxhNak=
=+19T
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
!!!IMPORTANT!!!
THIS VERSION IS WORK IN PROGRESS DUE TO LACK OF TESTERS!
Due to how the rclone config works now, if you used Rookie's Sideloader with a custom config
Make sure to redownload the entire rclone folder from the config provider!
v2.0-WIP
Changes
+ Added update checker for games
+ Added dependency check for spoofer
+ Games now can have images
+ Replaced the gamescombo box with a listview
+ Listview marks already installed games with green and outdated ones with yellow
+ Sideloader should be faster now
+ Reduced sideloader size
+ Installing games and copying obbs tries to wake the device first
+ Sideloader calls adb usb on start now
+ ADB Output now is a proper object containing strings for stdout and stderr, handling will be easier now
+ Changed spoof on rclone install to resign, allowing users to easily update games from now on!
//You can still use the spoof button manually
= Fixed UI not starting for some people
= Refreshing mirrors now deosn't change the selected mirror
= Cleaned & reworked code in sideloader and spoofer
= Fixed Spoofer.Init() on Non-English Windows
= Fixed crash detection
= Reworked rclone config handling
= Fixed game release not existing resulted in a crash
= Sideloader false positive detections reduced
= Small ui changes, hopefully for the better
Date 13/04/2021
VT: https://bit.ly/3a3LvGg
MD5 Checksum: 597D4AC957F69D5B1860D14D15DD3904
SHA-1 Checksum: EC78E4416D5222E507F46499B62A1D16880F84DF
SHA-256 Checksum: B68EE3B95CA531CA4678FEAAFD13F75A69D4495879536A9D04094ECFFEEC86EA
SHA-512 Checksum: D98F319986179B362D0F4C4E092FE6AF4ED8D1FD5445667F68280B43BF49C9DB7AC3B0F49690644CB46A7A391EDF36E82A8BCF7C52770498E6CACEA52D44EA4D
You can always get my public key from rookie.wtf/pgp.txt
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAmB1rNsACgkQvrtJUNxE
TxND0BAAgq4HKuNG/wxcYfari00+Vz56BdjWawZ5OvgcB/KuZLEWFXN5IpDktZrl
S7M8xGsAffDJYa0qamnpB0aE6uBgp3RCa4oyZUUlYf5sRiVwz9lF2Ip7XWZlkkpT
3zDYC4FSnPtlMP/97/OfMfdUSO97TpI+mEM2qtknl4dQZ8DdTugRWKWq0Kb+0ZI7
mD4FpxZSyko1lzBKCvInr/5LQWPrNknRIOwzxH3T+BPr9CjhAoPduvJUT7QzZZAc
+wYMUQYIb7M6zMy7iiiVtNlyIfwW8EnJdyE4p4NejIAQTOcFyvB7XTK/z2Ut7T1c
/DIINF+Sat8wZ1mZ+c2I9+99StlwTSiYdWVZh2jW5F5wb8pWrgDrCmoG50X4gvWJ
PGcWXG14x6TTAU0b55oPUEydWXMyxg9x/8IQA4IeDZGo9HdJDFfkW4hynTO675+o
1AKr9dfdnAhgqqfw59eWtxh2epU67JAOIek7wikfOjNnVRykim4wZmHB/FC+hIuQ
ppzs2QBxV2LknV3UeOklUMvR6n8Q/N0JZNxUde6o9HCOm2EbY27Iiho9wZI0+7Bk
IL+cF4SdRdsBQHX6PLPk+1wX667A+QnwHOfkC9SXyUK+MI4CMvqZlzIitqT4QiFz
r3JeCjJjYW4jwO7gKD8OM9CUMy+6+4C2ImS5CZ3cBB3KLXR59n4=
=17aK
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
v1.17SU1
Changes
+ Added some instructions & checks for the spoofer
+ Added crash detection
= Fixed the game queue broken since 1.17
Date 11/19/2020
VT: https://bit.ly/3nDUMcx
MD5 Checksum: 6DA8ADBE4447A809C598379E73DC7F77
SHA-1 Checksum: 924220FE8877174CCB9732F1F99B759DD6749102
SHA-256 Checksum: 0405C389A7D84CAC0D9081BDE10D010300822B10EBC2FF94C501EC740C8CFA40
SHA-512 Checksum: E8C3A15257C30278CEBC46507B1F6049FFB5AC0D6E4FBB73E1776537F80CBEA95C8C81A3F3259F8AEEDE276EBF6D50F6945622403E9D80B5E9E0F47B050BBEA9
You can always get my public key from rookie.wtf/pgp.txt
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+2aycACgkQvrtJUNxE
TxOlEw/6ArmiRFAjUNC2YaElJ7fFsXVzCaeJ680rs0CK4oX9P7YjZ46y2/VGDtX/
IAGvWCqHOIw2t0sk01/JwoyKZFERLDn2MRCj9FTPsrPA8yqveiIx/fof90QaN2Q9
4aV6ht+SSirQFWTXENboEbQSWxFHW/z5/Dud8gDBuCTuFuueBk+EAph5yI3dcjCK
naDE1gX+CE21ef84F3nGMspu2q/uCaIM2mvEWR2hBvWLsQpH7m5uQegXGYywe6YC
/8wEY2mEe0nayp/3NglDDarsPN8wx1U5i/kqS8wrzZZT49pRqKZ0wykWGfAPQsaO
txmfiwH+5cu3J/6PpAMVuNjhtL0dnR5MapsXT3CoRvSiRDl2urdYJUQj1CsYOEWP
Q4St6ISoUoANhVFRcM9mbq7clxdJnfBqdr1J0YrK804qWp3krDYv5hrpE3Puu/nA
TORsqWiHPgQQHANsNYsY4WkvLiYHWyB62Cm2NATdtaoVWzsrBgFk9xlp1oIQcMXo
RlRQZQ7tQ0VFFxaP7ARRaf9ay78geC3W/cr63JTn8Hz7Ul1h+ZRa7tb1KYvpCTnp
xC7vh3IyBwc4M7mt4CxsjdFnkO3iaDybFvlufua/5vMlt70HLdutHa7vMYSZ+GFr
HL+SrazP9o8ut2L85uBqCjWHPfgVaBaaQgk9FgZe0WQoS06fdeU=
=DIzT
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
v1.17
Please manually update to this version, as it fixes automatic updates that were broken since 1.15
Changes
+ Better game installation => no need for manual installation of games anymore
+ Added theme changer back and updated it
= Fixed updates
= Updated quest options
Date 11/14/2020
VT: https://bit.ly/3lwztcn
MD5 Checksum: CC7BF16A3D687C21208E9E986D720CAE
SHA-1 Checksum: CE0C71B4097068E84FA6FC65F4AFE69CBC79AA29
SHA-256 Checksum: D9393C28376DDE1D0582BCF939D1414879EDE6772CE82F83F54C0EA0F239B2F0
SHA-512 Checksum: 326C7A0177E9B8BCFA10CB3B8FAEA025F9C45C599DE5D46CA06DFEE427351F3AE88371C5A0827DEADF7D3F459052C421A145AA5581FE3C4BD2EFAD33BCFFC37B
You can always get my public key from rookie.wtf/pgp.txt
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+wFCUACgkQvrtJUNxE
TxO0ThAAw6po24zaYQFa+aGrgQNuWYWRxirCkLekEgmy8XVL6Q0rgMeLeq2MrCBP
wi2eBMFlLNOXy1TXOhled89NRBiBeST2Hl4TVv0Qdavd9cSeuGD/rh/PsyxnxY2Y
RWCPeXiYOf0mN1zVylLas+2vk9o/lrNieJir1nMEvyVbUJs8lTDcBdo2vVFwHK9N
nStFPxjqRb8R6smTIsltIh4+juQQMX0GyCcEMUkb5aO6BP34Mpsoaf+9bxV/elJm
UXnFSh5pjzHhkYGKVePtoHev8aFOzLeqIrfyWRJl+7gBMgYIautaxAIE+Zsy3Sai
wxUk9HJeAYwEPhYcIJKGAy+fmeX/TePQjUqLu1Pp+sJ8orstSiMjwXr84UtvyUWZ
+gSTgsQJ1QNUlhp+eJ0D6CchkAwliUXgnpIzwyn1Jj54X3ecHNjMbc5SettlXcBG
qgy5bUx8+v4H4gHmqTyZQNv1bsvIiQlcwPPUtpSzSXrzJPfZjrqPZzUWB8/Vltqc
JIR8FxEqi7+mW6AqrhUjE74N/fFibJTEuv6RALwZIAfMYEuSeFlZlDJYZ9v3H4/X
2jd+wEksbq6uYUl2l3X/7TpMWX29paj18cLD8oTSLK/RvzLXe0hhUcvuHrMxi+14
Q+V7uZYGge4Z5PANGPhd2tSkvw4CyA25OQ868QXjqciSLTfK2SU=
=Yu78
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
v1.16
Changes
+ Speed Limiter for rclone
= Random packagenames more random now
= Bugfixes
Date 11/12/2020
VT: https://bit.ly/2K4Y5Lv
MD5 Checksum: 29978E435BF02865CE61EF6279FB42ED
SHA-1 Checksum: 2E47CFDE7549D088A102F021657E9CD6859EAC47
SHA-256 Checksum: 50057AC0DA315C492C9C45B5801AE99E65B812F5BC18E23622CCAF5FBC48760A
SHA-512 Checksum: E485ADB6088C1F7DC34B65B57A9077E876D3D576D48CCED1FCA691A113CA5F6D0F8A0D31C6C848B6719FF18B7D4C5F829B9DAA8789EA6087F8B1D41005F87A48
You can always get my public key from rookie.wtf/pgp.txt
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+tHY0ACgkQvrtJUNxE
TxOpjRAAmjaIfvIP+HvfTMGKOEGoVRDIBqEyi8tzq8hn5Z3OadBVLkWT23WblQBw
Ur6BN1fuhH5B8ToGoqX/C1lrgXsvHNDB8frGUWnO1G1KJAQEGwKPRdKyK7YPlrYm
kK74CYuM8w7qjkhX3f50ECZ4Kj1WsE92mIHjfB1xLSGzN0o7Tr1EvFFDnuXrJ0I0
vEbeto0Qo19ORcoP7KFPgGuYmMYJQ2MuwYmWDWAdm4iL1Y9vEKZ4TsHG+KmYPdo8
19YoZj8PsgYxCBy9B+UZfkJnfF7gYKmiAsgnQviDc4BvZccfAVjmWcKkzJueDkvr
GgFmbaFE48svC2NU8Qd2gq6gIX0JrnKACZqopqgorl1817Z7Rsdh2iVwTMOvxbe7
a4kAtDN90KwuRlnwoxeCBdESDSrANbiNi1yaDZc5hr/xOxUsa1JKhk7/8mcdHj78
QoCRoji60Cq8XYeRNDXI32TkZd7ql9c64AjGH1uSySIPXfehOa+m5S53Jo2dRh5p
iI1LGHjTk7EDekIVRh/cPC+hohfUAKYbUcXp15cx0HndW5+galYIH/RAjF0L+Q1U
THz36HpKvLSsgkVkeVjPNJn9Ow6xgyByLTkHrS9D7Kj78FrKiAKr08+aI3+WCpdq
1G9HcH5VzDeZ7/jfVQPhsAn3dPxlTt6ReYzbeFkrO1UHFcTdl58=
=KyH4
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
v1.15HF1
Changes
= Bugfixes
Date 11/06/2020
VT: https://bit.ly/2GDYWRU
MD5 Checksum: F0D51FEC94F8D266390E61E89E6A2EE0
SHA-1 Checksum: 4FB43CFA6021B8360A23858169FAF15468B68EDF
SHA-256 Checksum: CBE414D9A283871099057EE5D8E56AF408996AE9C996C31F92C4DAE16D48B024
SHA-512 Checksum: F16A6B29ECABBB16D25B7F7FC52CB15AE4930B2B17ABAC791BF1F331270F40B047094FDEAF1EF834E72E26AA3A6762AF8BE13EBCB735EB1C1009F884E338D9DE
You can always get my public key from rookie.wtf/pgp.txt
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+lfEkACgkQvrtJUNxE
TxMDDxAAg+90vrCn0PllPEezzX3AJpy7NFWhFjUlDOLzNFMPa/QdAfF6H5vhEGay
bhX2BDHKSIV86bLkyGPkGHuf3etpXvZsNAmPuDoZpZ4owd1O09DOvAHIJx8F1Eia
Jc9Zovz6lKLAeIbK9ZdChKwTG3hYLIkx3rMgtvnJkZfzUKbhdU9MP0rVEzDPkSfe
ay2CGA9xLBUhPcItUTxhANzrDpRXMGHqbi+Wrscp+KmvnjHzN3Haq2A9rsasXM5Z
RSG8ccLZiI496tJQquTvPXYcnWQQudzcf3yiicztein0xcISEat0FFIVao7TtnS4
cgitvGNtfXXauAxyzjZ7PdgrVuoAE/v4m25pzaTRy7TOfW1uTz2/6lr6tZa38+p9
Bs36KcoK64FcPWjfR7zvvmCUWT/aHlRC9FwMvBHB81WRRk6xGaKl8G2QxfKY/ATl
DNlgYXfXLzipam74XfPHiyK4Sc55WLDQxZfZfD6tqTo4u8qoDESvcEz+pbGe4Wp8
awY4FVeSP1jVQzHgWf+oMTiHm5Gb3qMLUhZ/AHidUWFLhzXmAA4YXxIHKidRjCYT
42Kzs1sjT2A5ll2V7jz4pqoRlsvRAxNZ5KgAZ2R01zo7gS1nGqjyoGq3tLWHbfJk
/kD4QlOwcv06Jvp8aHcPxpccB7KHZGoRT2PB6IQE9Gt72pmAU9c=
=f7yh
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
v1.15
Changes
+ Added a spoofer
+ Added option to auto spoof games with random package name
+ Added new username support for quest 2
= Updated drag and drop sideloading
= Fixed storage label
- Removed troubleshoot form and theme form
Date 11/04/2020
VT: https://bit.ly/3kYCQsb
MD5 Checksum: 39BAB4CEE3D0E387E770BA35F4488C2F
SHA-1 Checksum: C6F311411408BCF5A55034E7A926EA385819F348
SHA-256 Checksum: 64640374EF39DD9CFC4A613A49888E3194994AA934C5E952174A2FCF533E2D19
SHA-512 Checksum: 22769280B732821539100BFA77C67141F271DB401DB3AFB28EF285E352659F9F45A90C8ABE1C0B829770C5AE580CA76A9208505888443C22EE82AAAE7035C6F7
You can always get my public key from rookie.wtf/pgp.txt
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+jJScACgkQvrtJUNxE
TxMTag//f570tZ4zxL1x1rdajdoYzPD6oaGIabRVPrqVogsFPuVF1Q3AOzr+nzQN
Tiq7yRPmByu/dtBGby2mqL1acQ/9TLYDtmnOAxQJqj4h0KhYlnzdCfqJJbTghtZX
cy44ZqgPW47P608+zC/NfePNt7Fq1rFKN3Bpo/ISoyi5/IVGqGq1Ix/D0SlhiM5X
5VkiY+w5S0rXuAyQ4g6/03AiI9fdNVkREhUh/tYvb7IkxaN9IDlltHByeuvekMjZ
KU+mwZ9habfthB31hp+bAXz82tbIzB4LJ1P8MNadIT8ZXG19zHEY/KlaDp2NjniV
h+V9AnxPHlcZk63yVPOywxpZcv81LflMgs9XItX+zKH7ibniBEu8jxc/2uAjrDF/
JuvnOUKTuH7S2iIzHhKLYZYHiOu8sIuwGC96Ep172PGCAkVVR6CtfNPMmVZRllsY
JG3Pxdrw526SAy3Vqixbbm79Fs1o77resqGM2zl6L7Sr6sH3VnDxabVXxALgo1pH
+LSu5rCLIIsCP1a4MAyy6UgO/+ZLrC1QazR4yY7SRQHAIM48XG4d6CznFCOjczhW
VvYL6gZD7X4xlNBqNMtih8JDHIQ1y7n1f075oCxfWwt02kXhDL/cn8+UZ17IS6EZ
zr/SLm1464/htCZgsUZgQrov6CpHX/xNqAubowkAVOdDREbwh2w=
=QKlt
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
v1.14SU1
Changes
+ Quota errors now will try to redownload the game from another mirror
= Only showing mirror remotes for apps
// Will fix device storage when I get my quest 2 and can debug adb
Date 10/18/2020
VT: https://bit.ly/3kcG62A
MD5 Checksum: 2A30E5F3DB785DC8104A2AA55A83CF53
SHA-1 Checksum: 8376E5971FC4F60995A1125DD9344E52135DB4F7
SHA-256 Checksum: FD5C74067BA00561A540DE5A4F49FA63B99C9520435A51487F997AEC569E9659
SHA-512 Checksum: 6188D6306CA2A3F25DE08E19D1F20046774F7AA30BD745ED24FC7E53126DF3950211B599E3D774F540A6C1DEC177A895FAE70FB564B6AE96F5F10ABDCB9021C1
You can always get my public key from rookie.wtf/pgp.txt
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+MCbMACgkQvrtJUNxE
TxNMVxAAlIkoTuGTDwXRBFNanulPiYmus9UazHoVFxtG2BELk1/JLPm7dwT29FiZ
oacUhhxLAEfDm169FoPNFCH/6q74xqjACkm8FjwCoas53DekguIvrhJKA3SiBUtZ
m7+hrT3WWGxXoE3+avSFmdBWWvKVA9pNR/DHprHSoinDUvgSfwBHrWD8PtuSIlwU
/jNpzyDnmBfdT4LROq93hcfFXM+POLWs5f3rXFdT+zTZexxlRiG5h7yMmsYdwdov
4jMUSzrBpRXbmmHwDi4KLzsdOJ/5okJgRdPTZm/L1rAoJT0F7QVi2shvkoN7SIH/
Fg+k0ZrNOnlpdAJwLmJD4PkQmxv5zpGSh8w7nbQJ41HgBtTQTh3OCpRRamPzAmfo
A2n/NsYpR8J8u7kGzT1MUnUn2RL+igutSrnQl8R6yR8jFjaTt+F90pBXZ1nnY6mS
8YE9mBBK3365cYVqQzOW1TUSCSzQqwTbfKDHkKrzHQWrpQ8VNMLcJBLZwU8di+4p
u8lt1uT5MRZ+9I80YBXhwzBKkiNYOt5vHpGgt0Ib4WDS7rt/7UnzEAfl8P3VEEfX
6w1HctI2zAVWYutBMv6HL3v23cO+UT8H6Wdgxq36mlMSNiqjLIntfIRrySUOy7JV
D6LE34gzpDGsBIzrpW/Hlz4wGTi6nnY0Ke6DkA1H0UOoDN9ItI4=
=ARa/
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
v1.14
Changes
+ Added the ability to change remotes (mirrors)
+ Rclone errors are now reported properly
= Fixed some bugs
// Will fix device storage when I get my quest 2 and can debug adb
Date 10/17/2020
VT: https://bit.ly/3j8kCm8
MD5 Checksum: B862B807462CE35CC930C2B1118D5692
SHA-1 Checksum: F52C8630C89CAEDB2E90A857E494DE00B137712D
SHA-256 Checksum: 3DDFA2B4CCFC0E9F6F86E8A74E6D3511B9C643F4C4AF19D3878B8704FA360558
SHA-512 Checksum: 16A022D8A4D235D7C537D9F01FE7C5F964A67A3A8CD68B3DC17AF08D94837DAC6CE0C20557D029DC169E5616B36C2A4C36B1647CE0DF930C7694F3FEC3430E70
You can always get my public key from rookie.wtf/pgp.txt
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl+KrhQACgkQvrtJUNxE
TxP9MRAAjZbYWkbZPK+QMqzNqsgEARs6buzrwc24dth6QEod9Fgmdg5wdinZdG8X
MK467pd9u0JqM3u8DeKSUD0GEzJZStNKsbHfjvNAF3m8toaXLncWy7MYNN9loAra
17MvUBBwB1QgsXtQ3EXT1cBbS3YkQPg5E+ayvY9ZgyiOpDK6fs1tA24NZUWc53kY
TIl5IL3mZNfJck8Xc/QkZJmkBOA89oDToLOjNmZRXXEHNT/eTS6pEkMZonWQjGqF
D2dEfQTOuIAD93JzwcP5wVJFh7z6o65/7tfguDqBsTgoRWODaY+kQJDAxoWN9w/n
nagXg/y30EmE1mWQFUYa1n0V65OzT5+J8VF53DCHkgaejYLfi0lhy8TlWQZpmzen
WJOsP1Oj3ZZ9sErO8waajDBzDZ3kU9NvAOeOblE491w0713MYZYs5BVgoyHi24xO
obcp1gpLi326fkPqajgIFpDHJ014OnaXmoY9ynW9rlZJ4rwJ7WytRDzcpfyk9LV1
G1tlcCS4c/RmuVfZi4Jh0guvOOIpJSqdG4KUtvd548sslTMdHytt+YugbKqcBAto
nWroKcsmg0swAm7YgYmQXqcpM17JC21eUgm3Bc4ZZSDtP4g3Pm7vRO1+hwUNYBE9
QeEMXYDPRsTxdpuEFsbmS/EfnndvJvl9BL92Zt4+T4ruL+II50s=
=r+0B
-----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
New version v1.13 Released
Changes
+ Pgp messages will be available now for every update, so you can verify updates easily
= Fixed some bugs like the rclone suicide
- Removed china detection
Date 9/10/2020
MD5 Checksum: 3834485C5AF611523460E639969284F3
SHA-1 Checksum: DAF556D34F80FDE6A6A3D8F338381030B2B19E44
SHA-256 Checksum: 063FABA6A76A98AB862BBBF6F3348F176F66FD4932075E761A5FCAA85785EE4B
SHA-512 Checksum: CC743BD95826664535239BB665934E88A25CC948B95E4A3E8B34379C1E8DEB8FED05EAD87428F4B85D5841ED9101F38E4E3DAFB0EAF3CD2F2E4314B62356104D
You can always get my public key from rookie.wtf/pgp.txt
You can verify the signed message using kleopatra for windows or dark.fail/pgp
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEG9eYw4mQVDjvGf4lvrtJUNxETxMFAl9aBpMACgkQvrtJUNxE
TxOJcA/+LEzXQtyBhZ0oj22PEk0yMLQYOBLYDB96jf39IqLQAzrIUL339jRcRKMv
yhFWXpvND1wrQl3/LNtFpBSkSnvqUXtxHWg6US+Ov3nnrEvYiwK8D9f1eC5Mt3Wy
4HZIyTh9HcrLsfbnP2kDlLOaMQSIH4rChezF79xZMcx7kRmQ0/hyXlmGAPyWs8t8
5aLxk5YUcfq1Pu+ncqeX+ihYVzQHi2eXaOAIR1rSCEXfHEg9tkRzWcma8tY29gQv
IgGwxF/YnAPOdBtzuakaT88a1MsP+tAcWxmsyvTQHrv1m0h3QPU1DxMFUfAlBjLM
5tHgTTjkXedRpR+Kga5CDuK7L5p1zVMRDINcUOf9MXV2fRurZ+OIHefAd+zbrd0n
vHi1D1sFzb/lT5LCa/vrfO9crRnLdK1EI/5HNeSj9iIdD2jEMbjSjo9yv7LA2MHi
4wnvguRpK5YUGqGc2yyCRxtyKAgXXxLBFNb5K453vdLtDukZIkhLuQVchsk4PutZ
1uIg7/ZmAIPxlEHaLckaV7QEFbq9h2hFWOsSjWAATyvnkp4nxyvAavW4zNQCbd3V
XJhimZkE+3SNAuZGw10nikVz7DFMlI0dyL+jmwIuODcFMZZwkEtBr3J/Ad9V1k+G
DFKYJpBgATHdRTwt7/zZwJCBq0ONheA/6+6VYj8x8Q5rqbiDDdc=
=xp7X
-----END PGP SIGNATURE-----
1.11HF1
= Fixed some crashes that occured when a unauthorized device was used with the sideloader
1.11
+ Added support for multiple devices
1.10SU1
+ Settings should now persist through updates
- Removed download button and hwid stuff
1.10
+ Added back the game size messagebox
+ Added support for unicode in adb
= Fixed restore gamedata
= Clicking the first game won't remove it since it causes problems
= Changed the sideloader icon
1.9SU2
+ Clicking a game on the listbox will now remove it from the list
1.9SU1
- Removed some code I forgot to remove when debugging
1.9
+ Added a queue for downloading games
+ Added a setting for disabling user.json push
1.8SU2
= Install game now won't throw an exception when a game isn't selected
1.8SU1
+ Added debug logs for rclone
1.8
+ Disk info updates every command that changes disk space
= Rclone now logs commands and output
= Changed backup button
1.7.5
+ Made sideloader even faster when opening
+ Added some chiptune music and the setting to stop it
= Fixed donator button broken in 1.7
1.7
+ Removed some freezes
+ Sideloader kills rclone on start and on close if it's open so you dont waste bandwith
+ Updating rclone config now does a hash check first
+ Refresh storage after game install and on game uninstall
1.6
+ Disk space label and check
+ Checks game size before download
= Download and install game button outputs adb log now
- Launch package name button and textbox
1.5
+ Added ETA, based on CURRENT DOWNLOAD SPEED NOT DELTA OF IT
+ Added DLS label instead of showing it in the toolbar
+ Added more indication of what the software is doing, in the toolbar
+ Added some tooltips
1.4
+ Donators can now change the speed of the donate button color change (even disable)
+ Auto update for the rclone config
+ Theme export and import buttons (by gotard)
1.3
+ Added progress bar logic for game downloading with rclone
+ Uninstalling apps now asks the user if it should also remove game data
= Sorted installed apps combobox
= Fixed uninstalling apps by package names lol nobody knew was broken
1.2
+ Added unicode support for rclone
+ Added some delay on game installation
= Fixed stuff
1.1
+ Added Themes
+ Added dollarvr user.json
+ Added user.json transfer on game download
+ Added user.json transfer on first run
= Fixed tab indexes
= Now both drop downs can be visible at the same time
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
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)
+ Added a new user.json
= Fixed crash on some systems (PerformanceCounter)
= Fixed crash because of file name inconsistency
- Removed performance counters because they made the software not work for some people
0.11
+ Changed normal message boxes to flexible ones
+ Added changelog to update message
= Improved update message
- Removed progressbar
0.10
+ Added few tooltips
+ Sideload folder now works for all apks (recursive search)
= Obb copy and Sideload progress bar problems should be fixed
= Fixed user.json not working if the any of folder had spaces
= Switched back to Message Boxes
0.9
+ Added the buggy progress bar back, uses different "logic"
+ Added an icon (Increased the exe size by like 300% just with that)
+ Added sideload folder button
+ Added Create user.json button and form
+ Changed Message Boxes to notifications
0.8.5
+ Added auto update download
= Fixed a bug where if you didn't have the adb folder it would crash
0.8
+ Every command now shows progress on title bar
+ Automatically run Adb Devices and List Apps on form startup
+ You can now search the App List Combo Box
= Cleaned some code
0.7
= Fixed UI Freezes
+ Added Uninstall APK Button
+ Added Launch package Button
- Removed loading bar
0.6
+ Added List Apk Perms button
+ Added Change Permissions button
+ Added dinamically added checkbox for permisssions
= The software now downloads adb from master instead of v0.3 release
0.5
- Removed Flash Firmware
= Redesigned UI
= Reworked RunAdbCommand function (now it will be possible to do stuff I wasnt able to do before)
= Replaced Ui Buttons, still needs work
+ Added List apk button
+ Added List apk combo box
+ Added get apk function
= Cleaned a bit of code
0.4
+ Added auto download of adb archive
+ Added auto extraction of adb archive
0.3
+ Added new form, you can run custom adb commands now
+ Added recover and backup app data
- Removed Select APK and Select OBB Buttons
- Removed tooltips from removed buttons
+ Sideload APK and Copy Obb buttons now also make you select the file/folder
+ Improved firmware button
0.2
+ Added Flash Firmware button
+ Added few tooltips
+ Renamed buttons
0.1
+ Initial Release
HF - Hot Fix
SU - Small Update
RSL 2.15
- Massive UI Changes:
- Rounded buttons
- Added version Number at Bottom Left
- Changed fonts to some extend
- Added background pattern to category buttons and MainForm background
- Added an animation when opening/closing category
- Overall darker theme
- New splash
~Chax

View File

@@ -34009,3 +34009,700 @@ tmpfs 2973372 0 2973372 0% /apex
Running command shell input keyevent KEYCODE_WAKEUP
Running command shell input keyevent KEYCODE_WAKEUP
Running command shell input keyevent KEYCODE_WAKEUP
Running command shell input keyevent KEYCODE_WAKEUP
Running command shell input keyevent KEYCODE_WAKEUP
Running command shell df
Running command shell input keyevent KEYCODE_WAKEUP
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 2973372 736 2972636 1% /dev
tmpfs 2973372 0 2973372 0% /mnt
tmpfs 2973372 0 2973372 0% /apex
/dev/block/dm-4 1691188 1685900 0 100% /
/dev/block/dm-5 310760 309800 0 100% /vendor
/dev/block/dm-6 242680204 191465652 51083480 79% /data
/data/media 242680204 191465652 51083480 79% /storage/emulated
Running command shell input keyevent KEYCODE_WAKEUP
Running command devices
List of devices attached
192.168.0.101:5555 device
Running command shell input keyevent KEYCODE_WAKEUP
Devices:
192.168.0.101:5555
Running command shell input keyevent KEYCODE_WAKEUP
Running command shell input keyevent KEYCODE_WAKEUP
Running command shell input keyevent KEYCODE_WAKEUP
Running command -s 192.168.0.101:5555 shell input keyevent KEYCODE_WAKEUP
Running command -s 192.168.0.101:5555 shell input keyevent KEYCODE_WAKEUP
Running command -s 192.168.0.101:5555 shell df
Running Rclone command: listremotes
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 2973372 736 2972636 1% /dev
tmpfs 2973372 0 2973372 0% /mnt
tmpfs 2973372 0 2973372 0% /apex
/dev/block/dm-4 1691188 1685900 0 100% /
/dev/block/dm-5 310760 309800 0 100% /vendor
/dev/block/dm-6 242680204 191465656 51083476 79% /data
/data/media 242680204 191465656 51083476 79% /storage/emulated
Rclone error:
Rclone Output: VRP-mirror02:
VRP-mirror03:
VRP-mirror06:
VRP-mirror09:
VRP-mirror10:
VRP-mirror12:
VRP-mirror13:
VRP-mirror16:
Loaded following mirrors:
VRP-mirror02
VRP-mirror03
VRP-mirror06
VRP-mirror09
VRP-mirror10
VRP-mirror12
VRP-mirror13
VRP-mirror16
Running Rclone command: cat "VRP-mirror13:Quest Games/GameList.txt"
Rclone error:
Rclone Output: Game Name;Release Name;Release APK Path;Package Name;Version Code;Version Name
1976 Back To Midway;1976 Back To Midway v10+1.1 -QU;1976 Back To Midway v10+1.1 -QU/1976 Back To Midway [1.1.10] S3.0.2.apk;com.IvanovichGames.game1976;10;1.1
2MD - VR Football Unleashed;2MD - VR Football Unleashed v65+1.21 -QU;2MD - VR Football Unleashed v65+1.21 -QU/2MD - VR Football Unleashed [1.21.65] S3.0.2.apk;com.truantpixel.twomdquest;65;1.21
51 Aliens TV;51 Aliens TV v4+0.4 -QU;51 Aliens TV v4+0.4 -QU/fiftyonealienstvquest [0.4] S3.0.2.apk;com.fiftyonealiens.fiftyonealienstvquest;4;0.4
A Fishermans Tale;A Fishermans Tale v16+1.064 -QU;A Fishermans Tale v16+1.064 -QU/A Fishermans Tale [1.064.16] S2.11.apk;com.innerspacevr.afishermanstale;16;1.064
A Lullaby of Colors;A Lullaby of Colors v1+1.2.2 -unknown;A Lullaby of Colors v1+1.2.2 -unknown/A lullaby of colors v1.2.2_patched2019.09.28.apk;com.idumpling.a_lullaby_of_colors;1;1.2.2
A Moment in Cannes;A Moment in Cannes v1+0.3 -unknown;A Moment in Cannes v1+0.3 -unknown/A Moment in Cannes v0.3.22.apk;com.azadux.Cannes_Fort;1;0.3
AFFECTED - The Manor;AFFECTED - The Manor v82+1.28 -QU;AFFECTED - The Manor v82+1.28 -QU/AFFECTED - The Manor [1.28.82] S3.0.2.apk;com.fallen.manorquest;82;1.28
ALTDEUS - Beyond Chronos;ALTDEUS - Beyond Chronos v434+1.0.434 -QU;ALTDEUS - Beyond Chronos v434+1.0.434 -QU/ALTDEUS - Beyond Chronos [1.0.434] S3.0.2.apk;com.MyDearest.Altdeus;434;1.0.434
AUDICA;AUDICA v128543601+1.0.3.2 -QU (with DLC);AUDICA v128543601+1.0.3.2 -QU (with DLC)/AUDICA [1.0.3.2.128543601] + DLC_unlocker S3.0.2.apk;com.harmonixmusic.kata;128543601;1.0.3.2
Accounting+;Accounting+ v35+1.24.35 -QU;Accounting+ v35+1.24.35 -QU/Accounting+ [1.24.35].apk;com.crowscrowscrows.AccountingPlus;35;1.24.35
Acron - Attack of the Squirrels!;Acron - Attack of the Squirrels! v114094392+1.14.94392 -QU;Acron - Attack of the Squirrels! v114094392+1.14.94392 -QU/Acron_ Attack of the Squirrels! [1.14.94392.114094392] patch+savefix+90Hz+CustomRes.apk;com.resolutiongames.codenamelazarus;114094392;1.14.94392
Air Brigade 2;Air Brigade 2 v20+0.2 -unknown;Air Brigade 2 v20+0.2 -unknown/AirBrigade2.apk;com.OnlyHuman.AirBrigade2vr;20;0.2
Alienation;Alienation v23+1.293 -QU;Alienation v23+1.293 -QU/Alienation v23+1.293 -QU.apk;com.fiftyonealiens.alienationgame;23;1.293
All Hail the Cook-o-tron;All Hail the Cook-o-tron v7+1.2.3 -QU;All Hail the Cook-o-tron v7+1.2.3 -QU/Cookotron Quest [1.2.3.7] S3.0.2.apk;com.SlapJak.CookOtron;7;1.2.3
All Hail the Cook-o-tron;All Hail the Cook-o-tron v7+1.2.3 -VRP;All Hail the Cook-o-tron v7+1.2.3 -VRP/All Hail the Cook-o-tron v1.2.3 -VRP.apk;com.SlapJak.CookOtron;7;1.2.3
Angry Birds VR - Isle of Pigs;Angry Birds VR - Isle of Pigs v305100058+3.5.100058 -QU;Angry Birds VR - Isle of Pigs v305100058+3.5.100058 -QU/Angry Birds VR - Isle of Pigs [3.5.100058.305100058] S3.0.2.apk;com.resolutiongames.abvriop.santacruz;305100058;3.5.100058
Apex Construct;Apex Construct v45+45.0 -VRP;Apex Construct v45+45.0 -VRP/Apex Construct [v45.0].apk;com.fasttravelgames.apexconstruct;45;45.0
Apollo 11;Apollo 11 v22+2.3 -Q2Patched-90Hz-CustomRes -QU;Apollo 11 v22+2.3 -Q2Patched-90Hz-CustomRes -QU/Apollo_11 [2.3.22] patch+savefix+90Hz+CustomRes.apk;com.immersivevreducation.Apollo11QuestFinal;22;2.3
Arcaxer;Arcaxer v120+1.36.12 -QU;Arcaxer v120+1.36.12 -QU/Arcaxer [1.36.12.120] S3.0.2.apk;com.Overrungames.Arcaxer;120;1.36.12
Arcaxer;Arcaxer v120+1.36.12 -QU;Arcaxer v120+1.36.12 -QU/Arcaxer v120+1.36.12 -QU.apk;com.Overrungames.Arcaxer;120;1.36.12
Arizona Sunshine;Arizona Sunshine v21686+1.6 -QU (with DLC, v.2);Arizona Sunshine v21686+1.6 -QU (with DLC, v.2)/Arizona Sunshine [1.6.21686]+ DLC_unlocker S3.0.2.apk;com.vertigogames.azsq;21686;1.6
ArtPlunge;ArtPlunge v201801250+201801250 -unknown;ArtPlunge v201801250+201801250 -unknown/APlunge v201909211 patched.apk;com.spaceplunge.artplungeoc;201801250;201801250
Artifact;Artifact v17+1.0.6 -unknown;Artifact v17+1.0.6 -unknown/Artifact v1.0.6 (com.Mixreality.Artifact) patched.apk;com.Mixreality.Artifact;17;1.0.6
Ashtar UFO;Ashtar UFO v1+1.0 -unknown;Ashtar UFO v1+1.0 -unknown/Ashtar UFO v1.0.apk;com.test.mj12;1;1.0
Audio Trip;Audio Trip v121+1.0.2710 -QU;Audio Trip v121+1.0.2710 -QU/Audio Trip [1.0.2710.121] S3.0.2.apk;com.KinemotikStudios.AudioTripQuest;121;1.0.2710
Audioshield;Audioshield v118+118 -QU;Audioshield v118+118 -QU/Audioshield v118.apk;com.Audiosurf.Audioshield;118;118
Axegend;Axegend v1+3.0.5 -unknown;Axegend v1+3.0.5 -unknown/Axegend [3.0.5].apk;com.SubversionSquads.Axegend;1;3.0.5
B-Team;B-Team v68+20.03.19.356857 -QU;B-Team v68+20.03.19.356857 -QU/B-Team v20.03.19.356857.apk;com.twistedpixelgames.BTEAM_App;68;20.03.19.356857
BATTLESCAR - Punk Was Invented By Girls;BATTLESCAR - Punk Was Invented By Girls v1045+_1045_3082 -QU;BATTLESCAR - Punk Was Invented By Girls v1045+_1045_3082 -QU/BATTLESCAR - Punk Was Invented By Girls [10453082] S3.0.2.apk;com.atlas.Battlescar.Quest;1045;_1045_3082
BOW MAN;BOW MAN v224+1.4.0-224 -QU;BOW MAN v224+1.4.0-224 -QU/BOW MAN [1.4.0+224] S3.0.2.apk;com.dmm.bowman;224;1.4.0+224
Baba Yaga;Baba Yaga v3500+1.0.3500 -QU;Baba Yaga v3500+1.0.3500 -QU/Baba Yaga [1.0.3500] S3.0.2.apk;com.baobab.babayaga;3500;1.0.3500
Baby Hands;Baby Hands v8+0.02 -VRP;Baby Hands v8+0.02 -VRP/Baby Hands v8+0.02 -VRP.apk;com.ChickenWaffle.BabyHands;8;0.02
Bacon Roll;Bacon Roll v3+1.15.30 -QU;Bacon Roll v3+1.15.30 -QU/Bacon Roll [1.15.30] S3.0.2.apk;com.fieldofvision.baconroll;3;1.15.30
Bait!;Bait! v112063217+1.12.63217 -unknown;Bait! v112063217+1.12.63217 -unknown/Bait_v1.2_modded.apk;com.resolutiongames.baitsantacruz;112063217;1.12.63217
Ballista;Ballista v42+20.42 -QU (b);Ballista v42+20.42 -QU (b)/Ballista [20.42] S3.0.2.apk;com.HighVoltage.Crossbow;42;20.42
Ballooning Adventures;Ballooning Adventures v5+1.1.2 -QU;Ballooning Adventures v5+1.1.2 -QU/BallooningAdventures [1.1.2.5] S3.0.2.apk;com.vector3up.BallooningAdventures;5;1.1.2
BanditSix;BanditSix v130+1.1.0 -unknown;BanditSix v130+1.1.0 -unknown/BanditSix v1.1.0.130_patched.apk;com.climaxstudios.BanditSix;130;1.1.0
Bang Squash;Bang Squash v2+1.0 -unknown;Bang Squash v2+1.0 -unknown/Bang Squash_1.0_Patched.apk;com.lebersoftware.bangsquashpro;2;1.0
Basket VR;Basket VR v2+0.2 -unknown;Basket VR v2+0.2 -unknown/Basket VR v0.2.apk;com.realdragon.basketlittle;2;0.2
Beat Arena;Beat Arena v39+1.2.0 -QU;Beat Arena v39+1.2.0 -QU/Beat Arena [1.2.0.39] S3.0.2.apk;jp.konami.bvr;39;1.2.0
Beat Blaster;Beat Blaster v9+1.0 -QU;Beat Blaster v9+1.0 -QU/Beat Blaster [1.0.9] S3.0.2.apk;com.IvanovichGames.BeatBlasterVR;9;1.0
Beat Saber;Beat Saber v132+1.3.2 (w.BMBF RSL2.1 or manual install only);Beat Saber v132+1.3.2 (w.BMBF RSL2.1 or manual install only)/BS.apk;com.beatgames.beatsaber;157;1.13.2
Beat Saber;Beat Saber v213+1.16.0 (With DLC, No BMBF) -QU;Beat Saber v213+1.16.0 (With DLC, No BMBF) -QU/Beat Saber v213+1.16.0 (With DLC, No BMBF)-QU.apk;com.beatgames.beatsaber;213;1.16.0
Big Breezy Boat;Big Breezy Boat v189+1.0.189 -QU;Big Breezy Boat v189+1.0.189 -QU/Big Breezy Boat [1.0.189] S3.0.2.apk;com.marineverse.morequest;189;1.0.189
Bionic Hunter;Bionic Hunter v4+2.3 -unknown;Bionic Hunter v4+2.3 -unknown/BionicHunter [2.3].apk;com.AnomosStudios.BionicHunter;4;2.3
Blair Witch;Blair Witch v49+1.46 -QU;Blair Witch v49+1.46 -QU/Blair Witch [1.46.49] S3.0.2.apk;pl.bloober.blairwitch;49;1.46
Blaston;Blaston v109109277+1.9.109277 -QU;Blaston v109109277+1.9.109277 -QU/Blaston [1.9.109277.109109277] S3.0.2.apk;com.resolutiongames.ignis;109109277;1.9.109277
Blockami VR;Blockami VR v1+0.1 -unknown;Blockami VR v1+0.1 -unknown/Blockami VR v1.00.apk;com.aardVRk.blockami;1;0.1
Blueplanet VR Explore;Blueplanet VR Explore v7+7 -QU;Blueplanet VR Explore v7+7 -QU/Blueplanet VR Explore [7] S3.0.2.apk;com.blueplanetvr.blueplanetvr_explore_alpha;7;7
Bodyguard 2;Bodyguard 2 v1+1.5 -unknown;Bodyguard 2 v1+1.5 -unknown/BODYGUARD 2 [1.5].apk;com.studio3DD.bodyguard2;1;1.5
Bonfire;Bonfire v542+1.0.542 -QU;Bonfire v542+1.0.542 -QU/Bonfire [1.0.542] S3.0.2.apk;com.baobab.bonfire;542;1.0.542
Box VR;Box VR v188+1.18 -unknown;Box VR v188+1.18 -unknown/Box VR [1.18.188]_multiplayer_DLC_patch+savefix.apk;com.fitxr.boxvr;188;1.18
Breakout VR;Breakout VR v3+1.0 -QU;Breakout VR v3+1.0 -QU/Breakout VR [1.0.3] S3.0.2.apk;com.nerdvisiongames.breakoutvr;3;1.0
CYBER TENNIS;CYBER TENNIS v152+1.6.4 -unknown;CYBER TENNIS v152+1.6.4 -unknown/CYBERTENNIS_for_Quest_1.6.4.apk;jp.co.techarts.cybertennis;152;1.6.4
Cake Mouse;Cake Mouse v5+0.23 -QU;Cake Mouse v5+0.23 -QU/CakeMouse [0.23.5] S3.0.2.apk;com.StudioHORANG.CakeMouseQuest;5;0.23
Captain Hardcore;Captain Hardcore v1+0.4 -VRP;Captain Hardcore v1+0.4 -VRP/Captain Hardcore 0.4.apk;com.AntiZeroGames.CH;1;1.0
Car Parking Simulator;Car Parking Simulator v9+1.6.3 -QU;Car Parking Simulator v9+1.6.3 -QU/Car Parking Simulator [1.6.3.9] S3.0.2.apk;com.sloppy.carparkingsimulator;9;1.6.3
Carly and the Reaperman;Carly and the Reaperman v122113212+1.22.113212 -QU;Carly and the Reaperman v122113212+1.22.113212 -QU/Carly and the Reaperman [1.22.113212] S3.0.2.apk;com.resolutiongames.catr.ovr.quest;122113212;1.22.113212
Carrolls Riddles;Carrolls Riddles v439+1.51 -QU;Carrolls Riddles v439+1.51 -QU/Carrolls Riddles - [1.51.439] S3.0.2.apk;com.sciencevr.carroll.quest;439;1.51
Carve Snowboarding;Carve Snowboarding v501+1.04 -QU;Carve Snowboarding v501+1.04 -QU/Carve Snowboarding [1.04.501] S3.0.2.apk;com.ViteiBackroom.Powder;501;1.04
Cat Dissection;Cat Dissection v1+1.0 -unknown;Cat Dissection v1+1.0 -unknown/CatDissection-Quest v1.0.apk;com.VictoryXR.CatDissection;1;1.0
Catan VR;Catan VR v11837+1.1.837 -QU;Catan VR v11837+1.1.837 -QU/Catan VR [1.1.837.11837] S3.0.2.apk;com.Experiment7.Aurora;11837;1.1.837
Cave Digger;Cave Digger v71+2.17 -QU;Cave Digger v71+2.17 -QU/Cave Digger [2.17.71] S3.0.2.apk;com.mekiwi.cavedigger;71;2.17
Chupa Chupa VR;Chupa Chupa VR v1+2.0 -VRP;Chupa Chupa VR v1+2.0 -VRP/ChupaChupaVR.apk;com.kan.kikuchi.ChupaChupaVR;1;2.0
Cirque du Soleil;Cirque du Soleil v1001017+1.01.17 -QU;Cirque du Soleil v1001017+1.01.17 -QU/Cirque du Soleil [1.01.17.1001017] S3.0.2.apk;com.felixandpaul.quest.cds_portal;1001017;1.01.17
City Avenger;City Avenger v2+1.0.1 -unknown;City Avenger v2+1.0.1 -unknown/CityAvenger_Quest_v1.0.1.apk;com.Chesstar.CityAvenger.itch;2;1.0.1
Cloudlands 2;Cloudlands 2 v35+1.31 -QU;Cloudlands 2 v35+1.31 -QU/Cloudlands 2 [1.31.35] S2.11.apk;com.Futuretown.Cloudlands2;35;1.31
Coaster Combat;Coaster Combat v708443+1.0 -QU;Coaster Combat v708443+1.0 -QU/Coaster Combat [1.0.708443] S3.0.2.apk;com.forcefieldxr.coastercombatquest;708443;1.0
Color Space;Color Space v316+1.5.3 -QU;Color Space v316+1.5.3 -QU/Color Space [1.5.3.316] S3.0.2.apk;us.lighthaus.colorspace;316;1.5.3
Colorball;Colorball v5+0.3.3 -QU;Colorball v5+0.3.3 -QU/Colorball [0.3.3.5] S3.0.2.apk;at.AppScore.Colorball;5;0.3.3
Contractors;Contractors v61+1.3 -QU;Contractors v61+1.3 -QU/Contractors ['1.3'.61] S3.0.2.apk;com.CaveManStudio.ContractorsVR;61;1.3
Control Tower VR;Control Tower VR v18+0.61 -unknown;Control Tower VR v18+0.61 -unknown/ControlTowerVR v0.61.apk;com.DigitalEmergence.ControlTower_Alpha;18;0.61
Cook-Out;Cook-Out v108112973+1.8.112973 -QU;Cook-Out v108112973+1.8.112973 -QU/Cook-Out [1.8.112973.108112973] S3.0.2.apk;com.resolutiongames.cookinggame;108112973;1.8.112973
Cosmic Sugar;Cosmic Sugar v5+3 -QU;Cosmic Sugar v5+3 -QU/Cosmic Sugar [3.5] S3.0.2.apk;com.LightClinic.CosmicSugar;5;3
Cosmodread;Cosmodread v10014+1.0.0.14 -QU;Cosmodread v10014+1.0.0.14 -QU/Cosmodread [1.0.0.14.10014] S3.0.2.apk;com.WhiteDoorGames.Cosmodread;10014;1.0.0.14
Counter Fight ICHIRAN;Counter Fight ICHIRAN v96+1.1.0_96;Counter Fight ICHIRAN v96+1.1.0_96/Counter Fight ICHIRAN [1.1.0_96] S3.0.2.apk;jp.tricol.IchiranVR;96;1.1.0_96
Counter Fight ICHIRAN;Counter Fight ICHIRAN v96+1.10 -QU;Counter Fight ICHIRAN v96+1.10 -QU/Counter Fight ICHIRAN v96+1.10 -QU.apk;jp.tricol.IchiranVR;96;1.1.0_96
Counter Fight;Counter Fight v1+1.5.0 -unknown;Counter Fight v1+1.5.0 -unknown/counterfight_quest v1.5.0.apk;jp.tricol.counterfight_for_quest;1;1.5.0
Cover Drive Cricket;Cover Drive Cricket v169+1.0.1 -QU;Cover Drive Cricket v169+1.0.1 -QU/Cover Drive Cricket [1.0.1.169] S3.0.2.apk;io.mphillips.CoverDriveCricket21;169;1.0.1
Crashland;Crashland v66+1.01;Crashland v66+1.01/Crashland [1.01.66] S3.0.2.apk;com.LACGames.Crashland;66;1.01
Crazy Croquet VR;Crazy Croquet VR v2+0.2 -QU;Crazy Croquet VR v2+0.2 -QU/Croquet VR [0.2] S3.0.2.apk;de.selfox.crazycroquet;2;0.2
Crazy Kung Fu;Crazy Kung Fu v5+0.63.10 -QU;Crazy Kung Fu v5+0.63.10 -QU/Crazy Kung Fu [0.63.10.5] S3.0.2.apk;com.fieldofvision.crazykungfu;5;0.63.10
Creed - Rise to Glory;Creed - Rise to Glory v247262+1 -QU;Creed - Rise to Glory v247262+1 -QU/Creed - Rise to Glory [1.247262] S3.0.2.apk;com.survios.Creed;247262;1
Crisis VRigade 2;Crisis VRigade 2 v55+1.17 -QU;Crisis VRigade 2 v55+1.17 -QU/Crisis VRigade 2 [1.17.55] S3.0.2.apk;com.sumalab.CrisisVRigade2;55;1.17
Crisis VRigade;Crisis VRigade v1+1.18 -VRP;Crisis VRigade v1+1.18 -VRP/Crisis VRigade v1+1.18 -VRP.apk;com.sumalab.CrisisVRigade;1;1.18
Crop Craze - VR Farming Simulator;Crop Craze - VR Farming Simulator v130+1.3.0 -VRP;Crop Craze - VR Farming Simulator v130+1.3.0 -VRP/Crop Craze - VR Farming Simulator v1.3.1 -VRP.apk;com.PicoPlanetDeveloping.FarmGame;130;1.3.0
Cubism;Cubism v91+1.2.7 -QU;Cubism v91+1.2.7 -QU/Cubism [1.2.7.91] S3.0.2.apk;com.tvb.cubism;91;1.2.7
Custom Home Mapper;Custom Home Mapper v1+0.1 -unknown;Custom Home Mapper v1+0.1 -unknown/Custom Home Mapper v2.3.apk;com.curiousvr.homespace;1;0.1
Cyber Cycle;Cyber Cycle v1+0.1 -unknown;Cyber Cycle v1+0.1 -unknown/Cyber_Cycle_Test_Bld v0.1.apk;com.syntheon.cc2;1;0.1
Cyber Tennis;Cyber Tennis v161+1.6.6 -QU;Cyber Tennis v161+1.6.6 -QU/CYBER TENNIS [1.6.6.161] S3.0.2.apk;jp.co.techarts.cybertennis;161;1.6.6
Dance Central;Dance Central v121011401+1.2.1 -QU (b);Dance Central v121011401+1.2.1 -QU (b)/Dance Central [1.2.1.121011401] S3.0.2.apk;com.HarmonixMusic.DCVRQuest;121011401;1.2.1
Dance Dance Maker;Dance Dance Maker v9+0.9 -unknown;Dance Dance Maker v9+0.9 -unknown/Dance Dance Maker_0.9_Patched.apk;com.novia.vr.ddm;9;0.9
David Slade Mysteries - Case Files;David Slade Mysteries - Case Files v11+2.5a -QU;David Slade Mysteries - Case Files v11+2.5a -QU/DSM - Case Files [2.5a.11] S3.0.2.apk;com.GearWorxProductions.DSMCaseFiles;11;2.5a
Dead Shot Heroes;Dead Shot Heroes v1+2.1.3 -unknown;Dead Shot Heroes v1+2.1.3 -unknown/Dead Shot Heroes v2.1.3.apk;com.omm.dsh;1;2.1.3
Dead and Buried II;Dead and Buried II v3008396+2.0.8396 -QU;Dead and Buried II v3008396+2.0.8396 -QU/Dead and Buried II [2.0.8396.3008396] S2.11.apk;com.oculus.dab2;3008396;2.0.8396
Death Horizon Reloaded;Death Horizon Reloaded v101+0.9.25.8 -QU;Death Horizon Reloaded v101+0.9.25.8 -QU/Death Horizon - Reloaded [0.9.25.8.101] S3.0.2.apk;com.dreamdev.deathhorizon.quest;101;0.9.25.8
Death Lap;Death Lap v936+9.36 -VRP;Death Lap v936+9.36 -VRP/Death Lap v936+9.36 -VRP.apk;com.ozwe.deathlap;936;9.36
Deep Water Solo Climbing;Deep Water Solo Climbing v1+0.1 -unknown;Deep Water Solo Climbing v1+0.1 -unknown/Deep Water Solo Climbing v0.1.0.apk;com.kecoproductions.DeepWaterSolo;1;0.1
Deisim;Deisim v48+1.33.2 -QU;Deisim v48+1.33.2 -QU/Deisim v48+1.33.2 -QU.apk;com.MyronSoftware.Deisim;48;1.33.2
Demeo;Demeo v102113053+1.2.113053 -QU;Demeo v102113053+1.2.113053 -QU/Demeo [1.2.113053.102113053] S3.0.2.apk;com.resolutiongames.demeo;102113053;1.2.113053
Descent Alps;Descent Alps v22+0.4.1 -QU;Descent Alps v22+0.4.1 -QU/DescentAlps [0.4.1.22] S3.0.2.apk;com.Sutur.DescentAlps;22;0.4.1
Directive Nine;Directive Nine v5+0.2.3 -QU;Directive Nine v5+0.2.3 -QU/DirectiveNine [0.2.3.5] S3.0.2.apk;com.rooftoppanda.directivenine;5;0.2.3
Disc Benders - Ace Run;Disc Benders - Ace Run v4+1.3.1 -QU;Disc Benders - Ace Run v4+1.3.1 -QU/Disc Benders - Ace Run [1.3.1.4] S3.0.2.apk;com.FreeFallStudios.DiscBenders;4;1.3.1
DiscGolfVR;DiscGolfVR v1+0.1 -unknown;DiscGolfVR v1+0.1 -unknown/DiscGolfVR v4.5.apk;com.AlexV.DiscGolfVR;1;0.1
Doctor Who The Edge of Time;Doctor Who The Edge of Time v368+368 -QU (b);Doctor Who The Edge of Time v368+368 -QU (b)/Doctor Who The Edge of Time [368] S3.0.2.apk;com.mazetheory.doctorwho;368;368
Dogfish Dessection;Dogfish Dessection v1+1.0 -unknown;Dogfish Dessection v1+1.0 -unknown/Dogfish_Dissection-Quest v1.0.apk;com.VictoryXR.DogfishDissection;1;1.0
Domino's Vice VR;Domino's Vice VR v1+1.0 -unknown;Domino's Vice VR v1+1.0 -unknown/Domino's Vice VR_1.0_Patched.apk;samsapps.games.dominovr;1;1.0
Doom3Quest;Doom3Quest v16+0.2.0 -DrBeef;Doom3Quest v16+0.2.0 -DrBeef/Doom3Quest.apk;com.drbeef.doom3quest;16;0.2.0
Down the Rabbit Hole;Down the Rabbit Hole v429+01.02 -QU;Down the Rabbit Hole v429+01.02 -QU/Down the Rabbit Hole [01.02.429] S3.0.2.apk;com.CortopiaStudios.DTRH;429;01.02
Dr. Zaney's Insane Labs;Dr. Zaney's Insane Labs v2+1.1 -QU;Dr. Zaney's Insane Labs v2+1.1 -QU/Dr. Zaneys Insane Labs - [1.1.2] S3.0.2.apk;com.GearWorxProductions.Dr.ZaneysInsaneLabs;2;1.1
DrakaVR;DrakaVR v1+1 -unknown;DrakaVR v1+1 -unknown/DrakaVR.apk;com.Questeroid.DrakaVR;1;1
Dreadhalls;Dreadhalls v10619+1.6.19 -QU;Dreadhalls v10619+1.6.19 -QU/Dreadhalls.[1.6.19.10619]_patched.apk;com.WhiteDoorGames.DreadhallsQuest;10619;1.6.19
DroneLight;DroneLight v1+0.1 -unknown;DroneLight v1+0.1 -unknown/DroneLight.apk;com.dronelight.map1;1;0.1
Drop Dead - Dual Strike Edition;Drop Dead - Dual Strike Edition v1724091000+1.3.7 -QU;Drop Dead - Dual Strike Edition v1724091000+1.3.7 -QU/Drop Dead - Dual Strike Edition [1.3.7.1724091000] S3.0.2.apk;com.PixelToys.DropDead;1724091000;1.3.7
Drunkn Bar Fight;Drunkn Bar Fight v121+10.21 -QU;Drunkn Bar Fight v121+10.21 -QU/Drunkn Bar Fight [10.21.121] S2.11.apk;com.themunky.drunknbarfightQuest;121;10.21
Dungeon Chess;Dungeon Chess v58+0.0.60 -unknown;Dungeon Chess v58+0.0.60 -unknown/Dungeon Chess v0.060.apk;com.Experiment7.RealDungeonChess;58;0.0.60
Dungeon Train;Dungeon Train v1+0.13.19 -unknown;Dungeon Train v1+0.13.19 -unknown/dungeonTrain v0.19.12.apk;com.brennanhatton.dungeontrain;1;0.13.19
ENHANCE VR;ENHANCE VR v31+2.0.0 -unknown;ENHANCE VR v31+2.0.0 -unknown/ENHANCE VR 2.0.0 Patched.apk;com.Virtuleap.Enhance;31;2.0.0
Electronauts;Electronauts v175667+175667 (b) -QU;Electronauts v175667+175667 (b) -QU/Electronauts [175667.175667] S3.0.2.apk;com.survios.Electronauts;175667;175667
Eleven Table Tennis;Eleven Table Tennis v642+1.642 -QU;Eleven Table Tennis v642+1.642 -QU/Eleven Table Tennis v642+1.642 -QU.apk;quest.eleven.forfunlabs;642;1.642
Elven Assassin;Elven Assassin v122+1.4.2c_OculusQuest -QU;Elven Assassin v122+1.4.2c_OculusQuest -QU/Elven Assassin [1.4.2c_OculusQuest.122] S3.0.2.apk;com.WenklyStudio.ElvenAssassin;122;1.4.2c_OculusQuest
End Space;End Space v26+1.0.6.1 -QU;End Space v26+1.0.6.1 -QU/End Space [1.0.6.1.26] S3.0.2.apk;com.endspace.quest;26;1.0.6.1
Energysaber Masta VR;Energysaber Masta VR v41+1.17 -QU;Energysaber Masta VR v41+1.17 -QU/Energysaber Masta VR [1.17.41] S3.0.2.apk;com.dreamteammobile.LightsaberMastaVR;41;1.17
Epic Roller Coasters;Epic Roller Coasters v5093+7.1.0 -QU;Epic Roller Coasters v5093+7.1.0 -QU/Epic Roller Coasters [7.1.0.5093] S3.0.2.apk;games.b4t.epicrollercoasters.oculus;5093;7.1.0
Escape Legacy;Escape Legacy v37+1.35 -QU;Escape Legacy v37+1.35 -QU/Escape Legacy [1.35.37] S3.0.2.apk;com.StormingTech.EscapeLegacySideQuest;37;1.35
Escape!;Escape! v2+1.01 -unknown;Escape! v2+1.01 -unknown/Escape v1.01.apk;com.Robbin12392.Escape;2;1.01
Espire 1 - VR Operative;Espire 1 - VR Operative v1600+1.8.47 -QU;Espire 1 - VR Operative v1600+1.8.47 -QU/Espire 1 - VR Operative [1.8.47.1600] S3.0.2.apk;com.DigitalLode.Espire1;1600;1.8.47
Evryway Visualiser;Evryway Visualiser v136+0.136 -QU;Evryway Visualiser v136+0.136 -QU/Evryway Visualiser [0.136]_clean.apk;com.evryway.visualiser.oal;136;0.136
Exorcist Legion VR;Exorcist Legion VR v27+1.0.9 -QU;Exorcist Legion VR v27+1.0.9 -QU/Exrcist_Legion v1.0.9.apk;com.wolfandwood.exorcistlegionvr;27;1.0.9
FREEDIVER - Triton Down;FREEDIVER - Triton Down v20+1.0 (b) -QU;FREEDIVER - Triton Down v20+1.0 (b) -QU/FREEDIVER - Triton Down [1.0.20] S3.0.2.apk;com.Archiact.Freediver;20;1.0
FREEDIVER - Triton Down;FREEDIVER - Triton Down v20+1.0 -QU;FREEDIVER - Triton Down v20+1.0 -QU/freediver lightly patched v1.0.apk;com.Archiact.Freediver;20;1.0
Face Your Fears 2;Face Your Fears 2 v487009+1.0.487009 (b) -QU;Face Your Fears 2 v487009+1.0.487009 (b) -QU/Face Your Fears 2 [1.0.487009.487009] S3.0.2.apk;gg.trs.fyf2;487009;1.0.487009
Face Your Fears 2;Face Your Fears 2 v487009+1.0.487009 -QU;Face Your Fears 2 v487009+1.0.487009 -QU/Face Your Fears 2 v1.0.487009.apk;gg.trs.fyf2;487009;1.0.487009
Fail Factory;Fail Factory v54+1.0 -QU;Fail Factory v54+1.0 -QU/Fail Factory [1.0.54] patch+savefix.apk;com.Armature.FailFactory;54;1.0
Falcon Age;Falcon Age v31+1.01 -QU;Falcon Age v31+1.01 -QU/Falcon Age [1.01.31] S3.0.2.apk;com.OuterloopGames.FalconAge;31;1.01
Faraday's Magnets;Faraday's Magnets v5+0.23 -unknown;Faraday's Magnets v5+0.23 -unknown/ScienceVR - Faraday's Magnets [0.23].apk;com.sciencevr.faraday.quest;5;0.23
Fast Formula;Fast Formula v1+1.0 -unknown;Fast Formula v1+1.0 -unknown/Fast Formula_1.0_Patched.apk;com.FastFormula.FastFormula;1;1.0
Fear Dead House;Fear Dead House v11+1.00 -QU;Fear Dead House v11+1.00 -QU/Fear Dead House [1.00.11] S3.0.2.apk;com.quest.tgs.vrghost;11;1.00
Fear Within;Fear Within v1+1.0 -unknown;Fear Within v1+1.0 -unknown/FearWithin1.0.0.2.apk;com.SAAPDigital.FearWithin;1;1.0
FigureOut VR;FigureOut VR v1+1.0 -QU;FigureOut VR v1+1.0 -QU/FigureOutVR [1.0] S3.0.2.apk;com.figureout.questvr;1;1.0
Fingers - Mini Games;Fingers - Mini Games v1+1.02 -unknown;Fingers - Mini Games v1+1.02 -unknown/Fingers - Mini Games v1.02.apk;com.dedm0zaj.FingersMiniGames;1;1.02
Five Nights at Freddys - Help Wanted;Five Nights at Freddys - Help Wanted v219+1.0.6 -QU;Five Nights at Freddys - Help Wanted v219+1.0.6 -QU/Five Nights at Freddys - Help Wanted [1.0.6.219] + DLCunlocker S3.0.2.apk;com.SteelWoolGames.fnafhw;219;1.0.6
Flappy Flappy VR;Flappy Flappy VR v3+1.0 -unknown;Flappy Flappy VR v3+1.0 -unknown/Flappy Flappy VR v1.0.apk;com.FlappyFlappyVR.www.VRmoo.cn;3;1.0
Floor Plan 2;Floor Plan 2 v125+1.0.2.7 -QU;Floor Plan 2 v125+1.0.2.7 -QU/Floor Plan 2 [1.0.2.7.125] S3.0.2.apk;com.turbobutton.fp2;125;1.0.2.7
Flow Weaver;Flow Weaver v46+1.1.0 -QU;Flow Weaver v46+1.1.0 -QU/Flow Weaver [1.1.0.46] S3.0.2.apk;ca.StitchMedia.FlowWeaver;46;1.1.0
Flowborne - Breathing Meditation;Flowborne - Breathing Meditation v38+1.00 -QU;Flowborne - Breathing Meditation v38+1.00 -QU/Flowborne VR [1.00.38] S3.0.2.apk;com.vunderwelten.flowbornevr;38;1.00
Fly XR;Fly XR v1+0.01b -unknown;Fly XR v1+0.01b -unknown/Fly XRv14 [0.01b].apk;com.PlayHop.FlyXR;1;0.01b
Food Flinger;Food Flinger v1+1.0 -unknown;Food Flinger v1+1.0 -unknown/FoodFlinger.apk;com.DashingCape.FoodFlinger;1;1.0
ForeVR Bowl;ForeVR Bowl v215+1.0 -QU;ForeVR Bowl v215+1.0 -QU/ForeVR Bowl v215+1.0 -QU.apk;com.forevr.bowling;215;1.0.215
Forklift Simulator;Forklift Simulator v6+1.0.6 -VRP;Forklift Simulator v6+1.0.6 -VRP/forklift-simulator-beta [1.0.6].apk;com.Chalkbites.ForkliftSimulatorQuest;6;1.0.6
Frog Dissection;Frog Dissection v1+1.0 -unknown;Frog Dissection v1+1.0 -unknown/FrogDissection-Quest.apk;com.VictoryXR.FrogDissectionQuest;1;1.0
Fruit Ninja;Fruit Ninja v547288+1.7.0.547288 -QU;Fruit Ninja v547288+1.7.0.547288 -QU/Fruit Ninja [1.7.0.547288] patch+savefix.apk;com.halfbrick.fruitninjavr;547288;1.7.0.547288
Fujii;Fujii v825+1.0 -QU (b);Fujii v825+1.0 -QU (b)/Fujii [1.0.825] S3.0.2.apk;com.funktroniclabs.fuji;825;1.0
Fun House;Fun House v2+1.1 -QU;Fun House v2+1.1 -QU/Fun House v2+1.1 -QU.apk;com.fairview.funhouse;2;1.1
Futbolin Revolution;Futbolin Revolution v1+0.1 -unknown;Futbolin Revolution v1+0.1 -unknown/Futbolín Revolution 1.0 Patched.apk;com.Pixelfun.FutbolinRevolution;1;0.1
GORN;GORN v1906+1.2.1906 -QU;GORN v1906+1.2.1906 -QU/GORN [1.2.1906] S3.0.2.apk;com.freelives.gorn;1906;1.2.1906
Gadgeteer;Gadgeteer v79+1.0.17 -QU;Gadgeteer v79+1.0.17 -QU/Gadgeteer [1.0.17.79] S3.0.2.apk;com.metanaut.Gadgeteer;79;1.0.17
Ghost Giant;Ghost Giant v32+1.0.32 -QU;Ghost Giant v32+1.0.32 -QU/Ghost Giant [1.0.32] patch+savefix.apk;com.zoink.ghostgiant;32;1.0.32
Gladiatus;Gladiatus v2+1.0 -QU;Gladiatus v2+1.0 -QU/Gladiatus v2+1.0 -QU.apk;com.varonia.gladiatus;2;1.0
Gladius;Gladius v7+1.0 -VRP;Gladius v7+1.0 -VRP/Gladius v7 VRP.apk;com.VirtualAge.GladiusQuest;7;1.0
Glitch Assassin;Glitch Assassin v1+1.0 -unknown;Glitch Assassin v1+1.0 -unknown/Glitch Assassin v1.0.apk;com.LoneWolfInteractive.GlitchAssassin;1;1.0
Gloomy Eyes;Gloomy Eyes v33+33 -QU;Gloomy Eyes v33+33 -QU/Gloomy Eyes 33 Patched.apk;com.arte.gloomy_eyes;33;33
Gravity Lab;Gravity Lab v95+1.14.0 -QU;Gravity Lab v95+1.14.0 -QU/Gravity Lab [1.14.0.95] S3.0.2.apk;com.markschramm.gravitylab;95;1.14.0
Guided Tai Chi;Guided Tai Chi v1235+1.2.35 -unknown;Guided Tai Chi v1235+1.2.35 -unknown/Guided Tai Chi [1.2.35] patch+savefix+90Hz.apk;com.CubicleNinjas.GuidedTaiChi;1235;1.2.35
Gun Club VR;Gun Club VR v228+1.1.82 -QU;Gun Club VR v228+1.1.82 -QU/Gun Club VR [1.1.82.228] S2.11.apk;com.nextgenreality.GunClubVR;228;1.1.82
GunSpinning VR;GunSpinning VR v1+2.0 -unknown;GunSpinning VR v1+2.0 -unknown/GunSpinning VR1.0_Patched.apk;net.demonixis.gunspinningvr;1;2.0
Guns'n'Stories - Bulletproof VR;Guns'n'Stories - Bulletproof VR v155+1.0 (b) -QU;Guns'n'Stories - Bulletproof VR v155+1.0 (b) -QU/GunsnStories - Bulletproof VR [1.0.155] S3.0.2.apk;com.MiroWin.OMT;155;1.0
Half-Life 1 VR;Half-Life 1 VR v23+1.4.5 -DrBeef (with assets, manual install);Half-Life 1 VR v23+1.4.5 -DrBeef (with assets, manual install)/HalfLifeVR.apk;com.drbeef.lambda1vr;23;1.4.5
Hand Physics Lab;Hand Physics Lab v248+1.1.0.0102 -QU;Hand Physics Lab v248+1.1.0.0102 -QU/Hand Physics Lab v248+1.1.0.0102 -QU.apk;com.holonautic.HandPhysicsLab;248;1.1.0.0102
Hand Spell;Hand Spell v1+1.00 -QU;Hand Spell v1+1.00 -QU/Hand Spell [1.00] S3.0.2.apk;com.kosmiq.handspell;1;1.00
Hatsune Miku VR;Hatsune Miku VR v10+3.01 -QU (with DLC);Hatsune Miku VR v10+3.01 -QU (with DLC)/Hatsune Miku VR [3.01.10] S2.11 + DLC Unlocked.apk;jp.co.crypton.mikuvrq;10;3.01
Hermetika VR;Hermetika VR v6+0.6 -unknown;Hermetika VR v6+0.6 -unknown/HermetikaVR.apk;am.benth.hermetikavr;6;0.6
HeroBound 2;HeroBound 2 v8+1.5.1 -unknown;HeroBound 2 v8+1.5.1 -unknown/HeroBound 2.apk;com.oculus.herobound2;8;1.5.1
Holopoint;Holopoint v123+R1.0.14 -QU;Holopoint v123+R1.0.14 -QU/Holopoint [R1.0.14.123] S2.10.apk;com.AlzanStudios.HPPortable;123;R1.0.14
Home Plate Baseball;Home Plate Baseball v42+4.2 -QU;Home Plate Baseball v42+4.2 -QU/Home Plate Baseball [4.2.42] S3.0.2.apk;com.Beep2Bleep.HomePlateBaseball;42;4.2
Homestar VR - Special Edition;Homestar VR - Special Edition v41+1.03 -QU;Homestar VR - Special Edition v41+1.03 -QU/Homestar VR - Special Edition [1.03.41] S3.0.2.apk;com.pocket.homestarvrsp;41;1.03
Homestar VR;Homestar VR v64+1.32 -QU;Homestar VR v64+1.32 -QU/Homestar VR 1.32 Patched.apk;com.pocket.homestarvr;64;1.32
Hoops Madness;Hoops Madness v5+1.0.0 -QU;Hoops Madness v5+1.0.0 -QU/Hoops Madness [1.0.0.5] S3.0.2.apk;com.VRstudios.HoopsMadness;5;1.0.0
House Of Languages;House Of Languages v14+3.3.3 -unknown;House Of Languages v14+3.3.3 -unknown/House Of Languages_3.3.3_v14.apk;com.Fox3DGames.HouseOfLanguages;14;3.3.3
HouseFlipper VR;HouseFlipper VR v86+8.6 -QU;HouseFlipper VR v86+8.6 -QU/HouseFlipper VR [8.6.86] S3.0.2.apk;com.oculus.HouseFlipperVR;86;8.6
Hyper Dash;Hyper Dash v273+1.16.5 -QU;Hyper Dash v273+1.16.5 -QU/Hyper Dash [1.16.5.273] S3.0.2.apk;com.TriangleFactory.HyperDash;273;1.16.5
Hyper Dash;Hyper Dash v274+1.16.5 -QU;Hyper Dash v274+1.16.5 -QU/Hyper Dash [1.16.5.274] S3.0.2.apk;com.TriangleFactory.HyperDash;274;1.16.5
Hyperstacks;Hyperstacks v7+Alpha 0.6.13 -QU;Hyperstacks v7+Alpha 0.6.13 -QU/Hyperstacks [Alpha 0.6.13.7]_clean.apk;com.SquirrelBytes.Hyperstacks;7;Alpha 0.6.13
I Expect You to Die;I Expect You to Die v41516+1.0.141516 -QU;I Expect You to Die v41516+1.0.141516 -QU/I Expect You To Die [1.0.141516] patch+savefix.apk;com.schellgames.ieytdquest;41516;1.0.141516
Imercyve - Living with Intellectual Disability;Imercyve - Living with Intellectual Disability v19+1.0 -QU;Imercyve - Living with Intellectual Disability v19+1.0 -QU/Imercyve - Living with Intellectual Disability [1.0.19] S3.0.2.apk;com.VGH.ID;19;1.0
In Death - Unchained;In Death - Unchained v41945299+1.3.15 -QU;In Death - Unchained v41945299+1.3.15 -QU/In Death - Unchained [1.3.15.41945299] S3.0.2.apk;com.Solfar.InDeath;41945299;1.3.15
Ironlights;Ironlights v142+142 -QU;Ironlights v142+142 -QU/Ironlights [142] S3.0.2.apk;com.emcneill.Ironlights;142;142
Jigsaw 360;Jigsaw 360 v63+3.1.6 -QU;Jigsaw 360 v63+3.1.6 -QU/Jigsaw 360 [3.1.6.63] S3.0.2.apk;com.JumbliVR.Jigsaw360;63;3.1.6
Jigsaw Puzzle VR;Jigsaw Puzzle VR v20+1.04 -QU;Jigsaw Puzzle VR v20+1.04 -QU/JigsawPuzzleVR [1.04.20] S3.0.2.apk;com.Marrsbiz.JigsawPuzzleVR;20;1.04
Job Simulator;Job Simulator v36+1.4.0.4665 -QU;Job Simulator v36+1.4.0.4665 -QU/Job Simulator [1.4.0.4665.36] S2.10.apk;com.owlchemylabs.jobsimulator;36;1.4.0.4665
Journey Of The Gods;Journey Of The Gods v479431+1.0.479431 -QU;Journey Of The Gods v479431+1.0.479431 -QU/Journey Of The Gods [1.0.479431] patch+savefix+90Hz.apk;gg.trs.grappa;479431;1.0.479431
Jurassic World Aftermath;Jurassic World Aftermath v23258+v1.3 -QU;Jurassic World Aftermath v23258+v1.3 -QU/Jurassic World Aftermath [v1.3.23258] S3.0.2.apk;com.coatsink.alone;23258;v1.3
Just Drive;Just Drive v1+1.0 -unknown;Just Drive v1+1.0 -unknown/Just Drive [1.0].apk;com.JustDrive.JustDrive;1;1.0
KOTC VR Basketball;KOTC VR Basketball v1+0.1 -unknown;KOTC VR Basketball v1+0.1 -unknown/《KOTC VR Basketball》1.0_Patched_.apk;com.millennialdave.kotcvrbball;1;0.1
Keep Talking and Nobody Explodes;Keep Talking and Nobody Explodes v59+1.9.22 -QU;Keep Talking and Nobody Explodes v59+1.9.22 -QU/Keep Talking and Nobody Explodes [1.9.22.59] S2.10.apk;com.steelcrategames.keeptalkingandnobodyexplodes;59;1.9.22
Kid Setas;Kid Setas v1+0.1 -unknown;Kid Setas v1+0.1 -unknown/Kid Setas 0.1 Patched.apk;com.realdragonvr.setas;1;0.1
Kingdom of Blades;Kingdom of Blades v1+1.0.0 -unknown;Kingdom of Blades v1+1.0.0 -unknown/Kingdom of Blades 0330_Patched.apk;com.chesstar.KingdomOfBlades.itch;1;1.0.0
Kingspray Graffiti;Kingspray Graffiti v725+71.5 (b) -QU;Kingspray Graffiti v725+71.5 (b) -QU/Kingspray Graffiti [71.5.725] S3.0.2.apk;com.infectiousape.kingspray;725;71.5
Kingspray Graffiti;Kingspray Graffiti v725+71.5 -VRP (save issue);Kingspray Graffiti v725+71.5 -VRP (save issue)/Kingspray Graffiti [v71.5-725] -VRP.apk;com.infectiousape.kingspray;725;71.5
KitchenIslandVR;KitchenIslandVR v2+0 -QU;KitchenIslandVR v2+0 -QU/KitchenIslandVR v2+0 -QU.apk;com.VRBuddyGames.KitchenIslandVR;2;0.2
Knockout League;Knockout League v34+1.0 -QU;Knockout League v34+1.0 -QU/Knockout League [1.0.34] S3.0.2.apk;com.grab.knockout;34;1.0
Laid-Back Camp - Virtual - Lake Motosu;Laid-Back Camp - Virtual - Lake Motosu v3+1.0.0 -VRP;Laid-Back Camp - Virtual - Lake Motosu v3+1.0.0 -VRP/Laid-Back Camp - Virtual - Lake Motosu v3+1.0.0 -VRP.apk;jp.co.gemdrops.lbca_q;3;1.0.0
Laser Blaze;Laser Blaze v1+1.0.0 -unknown;Laser Blaze v1+1.0.0 -unknown/Laser Blaze 1.0 Patched.apk;cz.bkral.LaserBlaze;1;1.0.0
Last Labyrinth;Last Labyrinth v34+1.02 -QU;Last Labyrinth v34+1.02 -QU/Last Labyrinth [1.02.34] patch+savefix+90Hz+CustomRes.apk;jp.co.amata.lastlabyrinth;34;1.02
Layers of Fear VR;Layers of Fear VR v36+2.0 -QU;Layers of Fear VR v36+2.0 -QU/Layers of Fear VR [2.0.36] S3.0.2.apk;com.bloober.layersoffearvr;36;2.0
Legendary Hunter VR;Legendary Hunter VR v2+1.21 -QU;Legendary Hunter VR v2+1.21 -QU/Legendary Hunter VR [1.21] S3.0.2.apk;com.FrozenDreams.legendaryhuntervr;2;1.21
Let's Go Chopping;Let's Go Chopping v2+.2 -unknown;Let's Go Chopping v2+.2 -unknown/LetsGoChoppingEAv2PAID.apk;com.SoaringRocStudio.LetsGoChopping;2;.2
Let's Play with Anna!;Let's Play with Anna! v1+1.0 -unknown;Let's Play with Anna! v1+1.0 -unknown/anna_quest_uncensored.apk;com.vrjcc.AnnaU;1;1.0
Lets Create! Pottery VR;Lets Create! Pottery VR v670+1.12 -QU;Lets Create! Pottery VR v670+1.12 -QU/Lets Create! Pottery VR [1.12.670] S3.0.2.apk;com.idreams.potteryvrq;670;1.12
Lies Beneath;Lies Beneath v55578+1.0-55578 -QU;Lies Beneath v55578+1.0-55578 -QU/Lies Beneath [1.0-55578.55578] S3.0.2.apk;com.Drifter.Kodiak;55578;1.0-55578
Little Witch Academia - VR Broom Racing;Little Witch Academia - VR Broom Racing v707+1.2.0 -QU;Little Witch Academia - VR Broom Racing v707+1.2.0 -QU/Little Witch Academia - VR Broom Racing [1.2.0.707] S2.11.apk;com.UNIVRS.LWAVR;707;1.2.0
LoopSpace;LoopSpace v11+0.9.3 -QU;LoopSpace v11+0.9.3 -QU/LoopSpace v11+0.9.3 -QU.apk;com.Chesstar.LoopSpace.Quest;11;0.9.3
Luna;Luna v8+8 -QU;Luna v8+8 -QU/Luna [8] S3.0.2.apk;com.funomena.luna;8;8
Mare;Mare v31+31 -QU;Mare v31+31 -QU/Mare [31] S3.0.2.apk;com.VisionTrick.Mare;31;31
MarineVerse Cup;MarineVerse Cup v289+0.289 -unknown;MarineVerse Cup v289+0.289 -unknown/MarineVerse Cup [0.289].apk;com.marineverse.cup;289;0.289
Mini Motor Racing X;Mini Motor Racing X v124+1.3.5 -QU;Mini Motor Racing X v124+1.3.5 -QU/Mini Motor Racing X [1.3.5.124] S3.0.2.apk;com.nextgenreality.mmrx;124;1.3.5
Monolith;Monolith v1+0.1 -unknown;Monolith v1+0.1 -unknown/Monolith v0.1.apk;com.n.monolith;1;0.1
Moss;Moss v22600+1.0.0.22600 -Q2Patched-90Hz-CustomRes -QU;Moss v22600+1.0.0.22600 -Q2Patched-90Hz-CustomRes -QU/Moss [1.0.0.22600] patch+savefix+90Hz+CustomRes.apk;com.polyarc.MossGame;22600;1.0.0.22600
Mr. Scribbles;Mr. Scribbles v1+0.1 -unknown;Mr. Scribbles v1+0.1 -unknown/Mr. Scribbles v0.0.10.apk;com.oculus.mrscribbles;1;0.1
Mutated Virus;Mutated Virus v2+2.1 -VRP;Mutated Virus v2+2.1 -VRP/MutatedVirus[2.1].apk;com.AnomosStudios.MutatedVirus;2;2.1
Myst;Myst v264+1.0.2 -QU;Myst v264+1.0.2 -QU/Myst [1.0.2.264] S3.0.2.apk;com.CyanWorlds.Myst;264;1.0.2
Myth - A Frozen Tale;Myth - A Frozen Tale v31+1.0 -QU;Myth - A Frozen Tale v31+1.0 -QU/Myth - A Frozen Tale ['1.0'.31] S3.0.2.apk;com.WaltDisney.MythAFrozenTale;31;1.0
NES Space Quest;NES Space Quest v3+1.0.2 -unknown;NES Space Quest v3+1.0.2 -unknown/NesVR_OculusQuest_Itch_V1.0.2_EndlessCoins.Patched.apk;com.Chesstar.NesVR.QuestItch;3;1.0.2
National Geographic Explore VR;National Geographic Explore VR v674692+1.2.1 -VRP;National Geographic Explore VR v674692+1.2.1 -VRP/National Geographic Explore VR v1.2.1-674692 -VRP.apk;com.forcefieldxr.explorevr;674692;1.2.1
Nature Treks VR;Nature Treks VR v20+1.21 -QU;Nature Treks VR v20+1.21 -QU/Nature Treks VR [1.21.20] S2.11.apk;com.GreenerGames.QuestTreks;20;1.21
Neon Sprint;Neon Sprint v17+1.0.4 -QU;Neon Sprint v17+1.0.4 -QU/Neon Sprint v17+1.0.4 -QU.apk;com.chesstar.NeonSprint.Quest;17;1.0.4
Ninja Legends;Ninja Legends v1084+1.0.1084 -QU;Ninja Legends v1084+1.0.1084 -QU/Ninja Legends [1.0.1084] S3.0.2.apk;com.coinflip.ninja;1084;1.0.1084
Ocean Rift;Ocean Rift v55+1.68 -Q2Patched-90Hz -QU;Ocean Rift v55+1.68 -Q2Patched-90Hz -QU/Ocean Rift [1.68] patch+savefix+90Hz.apk;com.picselica.OceanRiftFullQuest;55;1.68
OceanCraft;OceanCraft v29+v0.3.10 -QU;OceanCraft v29+v0.3.10 -QU/OceanCraft [v0.3.10.29] S3.0.2.apk;com.FlodLab.OceanCraft;29;v0.3.10
OhShape;OhShape v185+1.8.5;OhShape v185+1.8.5/OhShape [1.8.5.185] S3.0.2.apk;com.odders.ohshape;185;1.8.5
Omega Blade;Omega Blade v1203+1.2.0 -QU;Omega Blade v1203+1.2.0 -QU/Omega Blade [1.2.0.1203] S3.0.2.apk;com.paramogames.omegablade;1203;1.2.0
OnStage Simulator;OnStage Simulator v1+0.72 -unknown;OnStage Simulator v1+0.72 -unknown/OnStage Simulator v0.7.2.apk;com.COMPOS3D.OnStage;1;0.72
Onward;Onward v9666+1.0 -QU;Onward v9666+1.0 -QU/Onward [1.0.9666] S3.0.2.apk;com.downpourinteractive.onward;9666;1.0
Operation Serpens;Operation Serpens v210312+1.2103.12 -QU;Operation Serpens v210312+1.2103.12 -QU/Operation Serpens [1.2103.12.210312] S3.0.2.apk;com.GINRATECH.OPERATIONSERPENS;210312;1.2103.12
Oxygen Dreams;Oxygen Dreams v7+1.06 -QU;Oxygen Dreams v7+1.06 -QU/OxygenDreamsQuest [1.06.7] S3.0.2.apk;com.Fguillotine.OxygenDreamsQuest;7;1.06
Painting VR;Painting VR v8+0.2 -QU;Painting VR v8+0.2 -QU/PaintingVr [0.2.8] S3.0.2.apk;com.Oisoi.PaintingVr;8;0.2
Pandemic by Prisms;Pandemic by Prisms v180+0.5.61 -QU;Pandemic by Prisms v180+0.5.61 -QU/PrismsPandemic [0.5.61.180] S3.0.2.apk;com.prismsvr.pandemicbyprisms;180;0.5.61
Pangman;Pangman v11+1.1 -unknown;Pangman v11+1.1 -unknown/Pangman_1.1_Patched.apk;com.ivanovichgames.pangman;11;1.1
Paper Birds;Paper Birds v47+1 -QU;Paper Birds v47+1 -QU/Paper Birds [1.47] S2.11.apk;com.ThreeDAR.PaperBirdsQuest;47;1
Path Of The Warrior;Path Of The Warrior v495+20.01.14.356019 -QU;Path Of The Warrior v495+20.01.14.356019 -QU/Path of the Warrior [20.01.14.356019]_patched.apk;com.twistedpixelgames.POTW_App;495;20.01.14.356019
PePiBo - Peregrino Pinata Bowling;PePiBo - Peregrino Pinata Bowling v2+2 -QU;PePiBo - Peregrino Pinata Bowling v2+2 -QU/PePiBo [2] S3.0.2.apk;com.toritogames.pepibo;2;2
PecoPeco;PecoPeco v6011+0.6.11 -QU;PecoPeco v6011+0.6.11 -QU/PecoPeco [0.6.11.6011] S3.0.2.apk;am.benth.pecopeco;6011;0.6.11
Penn & Teller VR - F U, U, U, & U;Penn & Teller VR - F U, U, U, & U v1960571+1.0 -QU (b);Penn & Teller VR - F U, U, U, & U v1960571+1.0 -QU (b)/Penn & Teller VR - F U, U, U, & U [1.0.1960571] S3.0.2.apk;com.GearboxSoftware.Hawthorn;1960571;1.0
Percussive VR;Percussive VR v2+1.4 -QU;Percussive VR v2+1.4 -QU/Percussive VR [1.4.2] S3.0.2.apk;games.jamhack.PercussiveVR.Oculus;2;1.4
Perpetuum Mobile;Perpetuum Mobile v83+1.5.6 -QU;Perpetuum Mobile v83+1.5.6 -QU/PerpetuumMobile VR [1.5.6.83] S3.0.2.apk;be.PetrusGames.PerpetuumMobile;83;1.5.6
Phantom - Covert Ops;Phantom - Covert Ops v49563+1.1 -QU;Phantom - Covert Ops v49563+1.1 -QU/Phantom - Covert Ops [1.1.49563] S3.0.2.apk;com.nDreams.PhantomQuest;49563;1.1
PhysHand;PhysHand v2+0.1.1 -unknown;PhysHand v2+0.1.1 -unknown/PhysHand v0.1.apk;com.JorgeJGnz.PhysHand;2;0.1.1
Pig Dissection;Pig Dissection v1+1.0 -unknown;Pig Dissection v1+1.0 -unknown/PigDissection-Quest.apk;com.VictoryXR.PigDissection;1;1.0
Pigasus VR Media Player;Pigasus VR Media Player v78+3.4 -QU;Pigasus VR Media Player v78+3.4 -QU/Pigasus VR Media Player [3.4.78].apk;com.hanginghatstudios.pigasus;78;3.4
Pinball FX2 VR;Pinball FX2 VR v15+1.0.0 -QU;Pinball FX2 VR v15+1.0.0 -QU/Pinball-FX2-VR- 1.0.0.15 -patched.apk;com.zenstudios.PinballFX2VRQuest;15;1.0.0
Pipe Dream Co.;Pipe Dream Co. v5+1.11.50 -QU;Pipe Dream Co. v5+1.11.50 -QU/Pipe Dream Co. [1.11.50] S3.0.2.apk;com.FieldOfVision.PipeDreamCo;5;1.11.50
Pistol Whip;Pistol Whip v418+0.6.26.94 -QU;Pistol Whip v418+0.6.26.94 -QU/Pistol Whip [0.6.26.94.418] S2.11.apk;com.cloudheadgames.pistolwhip;418;0.6.26.94
Pixel Ripped 1995;Pixel Ripped 1995 v108+108 -QU;Pixel Ripped 1995 v108+108 -QU/Pixel Ripped 1995 [108] S3.0.2.apk;io.arvore.pixelripped1995;108;108
Please, Don't Touch Anything;Please, Don't Touch Anything v1312+2.1 -unknown;Please, Don't Touch Anything v1312+2.1 -unknown/Dont Touch Anything [2.1.1312].apk;com.ForwardXP.nuke;1312;2.1
Pop Shot;Pop Shot v1+1.0 -unknown;Pop Shot v1+1.0 -unknown/Pop Shot 1.0 Patched.apk;com.PixelBoogie.PopShotQuest;1;1.0
Prison Boss VR;Prison Boss VR v37+1.6.0.16 -QU;Prison Boss VR v37+1.6.0.16 -QU/Prison Boss VR [1.6.0.16.37] S2.11.apk;com.Trebuchet.PrisonBossVR;37;1.6.0.16
Private Agent;Private Agent v5+1.3 -QU;Private Agent v5+1.3 -QU/Private Agent [_1.3_.5] S3.0.2.apk;com.Nottie.PrivateAgent;5;1.3
ProjectZ;ProjectZ v45+1.1.0 -QU;ProjectZ v45+1.1.0 -QU/ProjectZ [1.1.0.45] L3.0.2.apk;com.slindev.projectz;45;1.1.0
Pteranodon's Flight;Pteranodon's Flight v1+1.0 -unknown;Pteranodon's Flight v1+1.0 -unknown/PF Quest.apk;com.VictoryXR.PteranodonsFlight;1;1.0
Pub Darts;Pub Darts v200002+1.0 -QU;Pub Darts v200002+1.0 -QU/Pub Darts [1.0.200002] S3.0.2.apk;com.Ardooly.PubDarts;200002;1.0
Puzzle Bobble VR - Vacation Odyssey;Puzzle Bobble VR - Vacation Odyssey v247407+1.0 -QU;Puzzle Bobble VR - Vacation Odyssey v247407+1.0 -QU/Puzzle Bobble VR - Vacation Odyssey [1.0.247407] S3.0.2.apk;com.survios.bam;247407;1.0
Puzzling Places;Puzzling Places v2+1.0 -unknown;Puzzling Places v2+1.0 -unknown/Puzzling Places v1.0.1.apk;com.RealitiesIO.puzzlingPlacesPrototype;2;1.0
Quest for Runia;Quest for Runia v13+1.0 -QU;Quest for Runia v13+1.0 -QU/QuestForRunia [1.0.13] S3.0.2.apk;com.Cykyria.QuestForRunia;13;1.0
QuestZDoom Pack launcher;QuestZDoom Pack launcher v1+1.0.3 -VRP (install this too);QuestZDoom Pack launcher v1+1.0.3 -VRP (install this too)/questzdoom_launcher_1.03.apk;com.Baggyg.QuestZDoom_Launcher;1;1.0.3
QuestZDoom Pack;QuestZDoom Pack v25+1.1.7 -VRP;QuestZDoom Pack v25+1.1.7 -VRP/questzdoom-1.1.7.apk;com.drbeef.questzdoom;25;1.1.7
RESONARK X LITE;RESONARK X LITE v10100002+1.0.1b -QU;RESONARK X LITE v10100002+1.0.1b -QU/ResonarkXLite [1.0.1b.10100002] S3.0.2.apk;com.sepnekoya.ResonarkXLite;10100002;1.0.1b
RUSH;RUSH v282+1.2.1 -VRP;RUSH v282+1.2.1 -VRP/Rush v23+1.2.1 -VRP.apk;com.nextgenreality.rush;282;1.2.1
Raccoon Lagoon;Raccoon Lagoon v235238+1.0 -QU (b);Raccoon Lagoon v235238+1.0 -QU (b)/Raccoon Lagoon [1.0.235238] S3.0.2.apk;com.hiddenpath.phoenix;235238;1.0
Racket - NX;Racket - NX v122+2.2.14 -QU;Racket - NX v122+2.2.14 -QU/Racket - Nx [2.2.14.122] S3.0.2.apk;com.onehamsa.RNXQ;122;2.2.14
Racket Fury - Table Tennis VR;Racket Fury - Table Tennis VR v712+7.1.2 -QU;Racket Fury - Table Tennis VR v712+7.1.2 -QU/Racket Fury - Table Tennis VR [7.1.2.712] S3.0.2.apk;com.RacketFury.RF_GearVR;712;7.1.2
Radial-G - Proteus;Radial-G - Proteus v29+0.1 -QU;Radial-G - Proteus v29+0.1 -QU/Radial-G - Proteus [0.1.29] S3.0.2.apk;com.Things3D.RadialGProteus;29;0.1
Range Day VR;Range Day VR v14+1.18 -QU;Range Day VR v14+1.18 -QU/RangeDay VR [1.18.14] S3.0.2.apk;com.InvidiousStudios.RangedayVRQ;14;1.18
Real Fit VR;Real Fit VR v23+2021.3.1615462334 -QU;Real Fit VR v23+2021.3.1615462334 -QU/Real Fit VR [2021.3.1615462334] S3.0.2.apk;co.realfit.RealFit;23;2021.3.1615462334
Real VR Fishing;Real VR Fishing v109+1.518 -QU;Real VR Fishing v109+1.518 -QU/Real VR Fishing [1.518.109] S3.0.2.apk;com.Miragesoft.RealVrFishingQ;109;1.518
RealFit;RealFit v1+0.1 -VRP;RealFit v1+0.1 -VRP/realfit-quest-halloween-2020-10-29 v1+0.1 -VRP.apk;co.realfit.RealFit;1;0.1
Realms of Eternity;Realms of Eternity v1+0.5.7 -unknown;Realms of Eternity v1+0.5.7 -unknown/Realms Of Eternity v0.5.7.apk;com.VRKemono.RealmsofEternity;1;0.5.7
Red Matter;Red Matter v32+1.0.009 -Q2Patched-90Hz -QU;Red Matter v32+1.0.009 -Q2Patched-90Hz -QU/Red Matter [1.0.009] patch+savefix+90Hz.apk;com.VerticalRobot.RedMatter;32;1.0.009
Reflex Unit 2;Reflex Unit 2 v405+4.3 -QU;Reflex Unit 2 v405+4.3 -QU/Reflex Unit 2 [4.3.405] S3.0.2.apk;com.robosarugames.reflexunit2Lab;405;4.3
Refuge VR;Refuge VR v1+0.1 -unknown;Refuge VR v1+0.1 -unknown/Refuge.VR.apk;com.Meditation.RefugeVRv1;1;0.1
Resilience;Resilience v20+1.0.8042 -QU;Resilience v20+1.0.8042 -QU/Resilience 1.0.v8042.20+1.0 -QU.apk;com.scale1.resilience;20;1.0.8042
Rest In Pieces;Rest In Pieces v37+1.35 -QU;Rest In Pieces v37+1.35 -QU/RIP [1.35.37] S3.0.2.apk;com.StormingTech.RestInPiecesSQ;37;1.35
Return to Castle Wolfenstein;Return to Castle Wolfenstein v45+1.1.7 -DrBeef;Return to Castle Wolfenstein v45+1.1.7 -DrBeef/rtcwquest-v1.1.7.apk;com.drbeef.rtcwquest;45;1.1.7
Revolver Widow;Revolver Widow v3+1.2 -QU;Revolver Widow v3+1.2 -QU/Revolver Widow [1.2.3] S3.0.2.apk;com.StudioPoncho.Pinkertons;3;1.2
Rez Infinite;Rez Infinite v41+41.0 -unknown;Rez Infinite v41+41.0 -unknown/Rez Infinite [41.0] patched.apk;com.enhanceexperience.rezquest;41;41.0
Rhythm 'n Bullets;Rhythm 'n Bullets v18+1.10 -QU;Rhythm 'n Bullets v18+1.10 -QU/Rhythm n Bullets - [1.10.18] S3.0.2.apk;com.db.groovebullet;18;1.10
Richies Plank Experience;Richies Plank Experience v65+1.8.47 -QU;Richies Plank Experience v65+1.8.47 -QU/Richies Plank Experience [1.8.47.65] S2.11.apk;com.ToastVR.RichiesPlankExperience;65;1.8.47
Robo Recall;Robo Recall v47091+1.0 -Q2Patched-90Hz -QU;Robo Recall v47091+1.0 -Q2Patched-90Hz -QU/Robo Recall [1.0] patch+savefix+90Hz.apk;com.YourCompany.RoboRecall;47091;1.0
Rodent People - Origins;Rodent People - Origins v13+0.58 -QU;Rodent People - Origins v13+0.58 -QU/Rodent People - Origins [v0.58.13] S3.0.2.apk;com.ZenRepublic.RodentPeopleOrigins;13;v0.58
République VR;République VR v127622+1.2 -QU (b);République VR v127622+1.2 -QU (b)/Republique VR ['1.2'.127622] S3.0.2.apk;com.camouflaj.republiquevr;127622;1.2
SETVR;SETVR v37+1.61 -QU;SETVR v37+1.61 -QU/SETVR [_1.61_.37] S3.0.2.apk;com.DVNCTech.SETVR;37;1.61
SKYBOX VR Video Player;SKYBOX VR Video Player v342+1.0.3 -QU;SKYBOX VR Video Player v342+1.0.3 -QU/SKYBOX VR Video Player [1.0.3.342] S3.0.2.apk;xyz.skybox.player.ovr;342;1.0.3
SPHERES;SPHERES v38+1.37 -QU;SPHERES v38+1.37 -QU/SPHERES [1.37.38] S3.0.2.apk;com.Novelab.Spheres;38;1.37
SUPERHOT VR;SUPERHOT VR v140+1.14 -QU;SUPERHOT VR v140+1.14 -QU/SUPERHOT VR [1.14.140] S3.0.2.apk;unity.SUPERHOT_Team.SUPERHOT_VR_QA;140;1.14
Sairento VR - Untethered;Sairento VR - Untethered v203+1.9.4 -QU;Sairento VR - Untethered v203+1.9.4 -QU/Sairento VR _ Untethered [1.9.4] patch+savefix+90Hz.apk;com.mixedrealms.sairentovruntethered;203;1.9.4
SculptrVR;SculptrVR v181+2.88 -QU;SculptrVR v181+2.88 -QU/SculptrVR [2.88.181] S3.0.2.apk;com.sculptrvrinc.sculptrvrapp;181;2.88
Secret of Harrow Manor 2;Secret of Harrow Manor 2 v24+0.24 -unknown;Secret of Harrow Manor 2 v24+0.24 -unknown/Secret_of_Harrow_Manor_2.v0.24.apk;com.OnlyHuman.SoHM2vr;24;0.24
Sep's Diner;Sep's Diner v7+7555 -QU;Sep's Diner v7+7555 -QU/Seps Diner - [7555] S3.0.2.apk;com.scale1.sepsdinerSolo;7;7555
SetVR;SetVR v1+0.1 -unknown;SetVR v1+0.1 -unknown/setvr.apk;com.DVNCTech.SETVRearlyaccess;1;0.1
Shadow Point;Shadow Point v43+1.1 (b) -QU;Shadow Point v43+1.1 (b) -QU/Shadow Point [1.1.43] S3.0.2.apk;com.coatsink.nexus;43;1.1
Shelley's Creation;Shelley's Creation v4+0.75 -QU;Shelley's Creation v4+0.75 -QU/Shelleys Creation - [0.75.4] S3.0.2.apk;com.sciencevr.shelley.quest;4;0.75
Shinobi Breaker;Shinobi Breaker v35+1.1 -QU;Shinobi Breaker v35+1.1 -QU/Shinobi Breaker [1.1.35] S3.0.2.apk;com.Donuts.InfinityBreaker;35;1.1
Shooting Therapy;Shooting Therapy v2+0 -QU;Shooting Therapy v2+0 -QU/Shooting Therapy v2+0 -QU.apk;com.NoFlinch.ShootingTherapy;2;0.2
Shoottris;Shoottris v3+1.011 -QU;Shoottris v3+1.011 -QU/Shoottris [1.011.3] S3.0.2.apk;com.palvesoft.ShoottrisQuest;3;1.011
Shooty Fruity;Shooty Fruity v18+1.0 -QU;Shooty Fruity v18+1.0 -QU/Shooty Fruity [1.0.18] S2.11.apk;com.ndreams.shootyfruity;18;1.0
Shooty Skies Overdrive;Shooty Skies Overdrive v78450+1.03.78450 -QU;Shooty Skies Overdrive v78450+1.03.78450 -QU/Shooty Skies Overdrive [1.03.78450] S2.10.apk;com.mightygamesgroup.shootyvr;78450;1.03.78450
Shuttle Commander;Shuttle Commander v64+0.64 -QU (b);Shuttle Commander v64+0.64 -QU (b)/Shuttle Commander [0.64.64] S3.0.2.apk;com.ivre.ssc;64;0.64
Skyworld - Kingdom Brawl;Skyworld - Kingdom Brawl v32+1.22 -QU;Skyworld - Kingdom Brawl v32+1.22 -QU/Skyworld - Kingdom Brawl [1.22.32] S3.0.2.apk;com.vertigogames.skyworldbrawl;32;1.22
SlashMates;SlashMates v1+0.04 -unknown;SlashMates v1+0.04 -unknown/New SlashMates-0.04.apk;com.VRight.Slashmates;1;0.04
Smashmania;Smashmania v1+0.4 -unknown;Smashmania v1+0.4 -unknown/Smashmania 0.4 Patched.apk;ltd.getschwifty.smashmania.demo;1;0.4
Snake In a Box;Snake In a Box v56+5.6 -unknown;Snake In a Box v56+5.6 -unknown/SnakeInABox.apk;com.dofdev.SnakeInABox;56;5.6
Snow Fortress;Snow Fortress v2+1.33 -unknown;Snow Fortress v2+1.33 -unknown/Snow Fortress Quest Edition.apk;com.mythicalcitygames.snowfortress;2;1.33
Snowman VR;Snowman VR v1+0.6.0 -VRP;Snowman VR v1+0.6.0 -VRP/Snowman VR.apk;co.xocus.snowman;1;0.6.0
Solicitude Wake-up;Solicitude Wake-up v13+1.3 -QU;Solicitude Wake-up v13+1.3 -QU/Solicitude Wake-up [1.3.13] S3.0.2.apk;com.JRProduction.SolicitudeWakeupQuest;13;1.3
Song Beater;Song Beater v422+4.2 -QU;Song Beater v422+4.2 -QU/Song Beater [4.2.422] S3.0.2.apk;com.Playito.SongBeater;422;4.2
Space Channel 5 VR;Space Channel 5 VR v68514+1.0.3 -QU;Space Channel 5 VR v68514+1.0.3 -QU/Space Channel 5 VR Kinda Funky News Flash! [1.0.3.68514] S3.0.2.apk;com.grounding.ch5vrquest;68514;1.0.3
Space Junk;Space Junk v13+1.2 -QU;Space Junk v13+1.2 -QU/Space Junk [1.2.13] S3.0.2.apk;com.cestrian.spacejunk;13;1.2
Space Pilot Alliance;Space Pilot Alliance v1+2.0 -unknown;Space Pilot Alliance v1+2.0 -unknown/Space Pilot Alliance 2.6 Patched.apk;com.curiousvr.spacepilotalliance;1;2.0
Space Pirate Trainer;Space Pirate Trainer v164+1.64 -QU;Space Pirate Trainer v164+1.64 -QU/Space Pirate Trainer Quest [1.64.164] patch+savefix+90Hz+CustomRes.apk;com.iillusions.spacepiratetrainerquest;164;1.64
Space Shooter;Space Shooter v14+1.01 -QU;Space Shooter v14+1.01 -QU/Space Shooter [1.01.14] S3.0.2.apk;vr.tgs.spaceshooter;14;1.01
Space Slurpies;Space Slurpies v7+1.0 -QU;Space Slurpies v7+1.0 -QU/Space Slurpies [1.0.7] S3.0.2.apk;com.StarcadeArcadeLLC.SpaceSlurpies;7;1.0
Space Walk VR Experience;Space Walk VR Experience v700107+7.0.107.02 -QU;Space Walk VR Experience v700107+7.0.107.02 -QU/SpaceWalk Experience [7.0.107.02.700107] S3.0.2.apk;com.FTM.SpaceWalkQuest2OC;700107;7.0.107.02
Spaceteam VR;Spaceteam VR v2346+1.0 -unknown;Spaceteam VR v2346+1.0 -unknown/Spaceteam_VR v1.02346 _ScriptPatched.apk;com.CooperativeInnovations.Spaceteam;2346;1.0
Special Delivery;Special Delivery v30+1.1 -QU;Special Delivery v30+1.1 -QU/Special Delivery [1.1.30] S3.0.2.apk;com.MeerkatGaming.SD_Quest;30;1.1
Speed Cube;Speed Cube v9+0.7.1 -QU;Speed Cube v9+0.7.1 -QU/Speed Cube [0.7.1.9] S3.0.2.apk;com.Aligator.SpeedCube;9;0.7.1
Spice & Wolf VR;Spice & Wolf VR v9+1.04 -QU;Spice & Wolf VR v9+1.04 -QU/Spice Wolf VR [1.04.9] S3.0.2.apk;com.SpicyTails.SaW;9;1.04
Sport Mode;Sport Mode v24+0.2.1 -QU;Sport Mode v24+0.2.1 -QU/Sport Mode [0.2.1.24] S3.0.2.apk;com.Exo.Playground2;24;0.2.1
Sports Scramble;Sports Scramble v88+1.0 -unknown;Sports Scramble v88+1.0 -unknown/Sports Scramble v1.0.88 Patched 2020-07-05.apk;com.Armature.SportsScramble;88;1.0
Squid Seastar;Squid Seastar v1+0.1 -unknown;Squid Seastar v1+0.1 -unknown/Squid-Seastar-Quest.apk;com.VictoryXR.SquidDissection;1;0.1
Star Chart;Star Chart v18529+1.7.7 -VRP;Star Chart v18529+1.7.7 -VRP/Star Chart.apk;com.escapistgames.starchartvr.quest;18529;1.7.7
Star Wars - Tales from the Galaxy's Edge;Star Wars - Tales from the Galaxy's Edge v291854+1.0.4-185011.cl.291854 -QU (v.2);Star Wars - Tales from the Galaxy's Edge v291854+1.0.4-185011.cl.291854 -QU (v.2)/Star Wars - Tales from the Galaxys Edge [1.0.4+185011.cl.291854] S3.0.2.apk;com.ilmxlab.tales;291854;1.0.4+185011.cl.291854
Star Wars Pinball VR;Star Wars Pinball VR v10699+1.1 -QU;Star Wars Pinball VR v10699+1.1 -QU/Star Wars Pinball VR [1.1.10699] S3.0.2.apk;com.YourCompany.SWP_VR;10699;1.1
StardustVR;StardustVR v2+1.0 -QU;StardustVR v2+1.0 -QU/StardustVR v2+1.0.apk;com.FrozenDreams.stardustvr;2;1.0
Steamliner;Steamliner v1+1.2.5 -VRP;Steamliner v1+1.2.5 -VRP/Steamliner_Quest.apk;com.Diamond.Steamliner;1;1.2.5
Stride;Stride v22+1.0 -VRP (beta);Stride v22+1.0 -VRP (beta)/com.JoyWay.Stride.apk;com.JoyWay.Stride;22;1.0
Supermedium;Supermedium v1+1.0 -unknown;Supermedium v1+1.0 -unknown/Supermedium 1.0 Patched.apk;com.Supermedium.Supermedium;1;1.0
Supermedium;Supermedium v1+3 -unknown;Supermedium v1+3 -unknown/Supermedium [3].apk;com.Supermedium.Supermedium;1;3
Swarm;Swarm v730+730 -QU;Swarm v730+730 -QU/Swarm [730] S3.0.2.apk;com.sketchbox.Grapple;730;730
Sweet Escape VR;Sweet Escape VR v2+0.03 -unknown;Sweet Escape VR v2+0.03 -unknown/Sweet Escape VR 0.03 Patched.apk;com.realitysmash.sweetescape;2;0.03
Symphony of Stars;Symphony of Stars v173+1.73 -unknown;Symphony of Stars v173+1.73 -unknown/Symphony of Stars_1.73_Patched.apk;com.OnlyHuman.Ensign2vr;173;1.73
Synth Riders;Synth Riders v270+2.3.9.a8 -QU;Synth Riders v270+2.3.9.a8 -QU/Synth Riders [2.3.9.a8.270] S3.0.2.apk;com.kluge.SynthRiders;270;2.3.9.a8
TOKYO CHRONOS;TOKYO CHRONOS v31+1.0.4 -QU;TOKYO CHRONOS v31+1.0.4 -QU/TOKYO CHRONOS [1.0.4.31] S3.0.2.apk;com.MyDearest.ChronosQuest;31;1.0.4
Tetris Effect;Tetris Effect v38+1.0 -QU;Tetris Effect v38+1.0 -QU/Tetris Effect [1.0.38] S3.0.2.apk;com.enhanceexperience.tetriseffect;38;1.0
The Brookhaven Experiment;The Brookhaven Experiment v109+1.0259 -unknown;The Brookhaven Experiment v109+1.0259 -unknown/The.Brookhaven.Experiment Quest v1.0259.apk;com.Phosphor.Brookhaven;109;1.0259
The Climb 2;The Climb 2 v554+1.1 -QU;The Climb 2 v554+1.1 -QU/The Climb 2 [1.1.554] S3.0.2.apk;com.crytek.climb2;554;1.1
The Climb;The Climb v663+663.0 -QU;The Climb v663+663.0 -QU/The Climb [663.0] S3.0.2.apk;com.crytek.climb;663;663.0
The Curious Tale of the Stolen Pets;The Curious Tale of the Stolen Pets v25+1.06 -QU;The Curious Tale of the Stolen Pets v25+1.06 -QU/The Curious Tale of the Stolen Pets [1.06.25] S3.0.2.apk;com.fasttravelgames.diorama;25;1.06
The Exorcist - Legion VR;The Exorcist - Legion VR v37+1.2.0 -QU;The Exorcist - Legion VR v37+1.2.0 -QU/The Exorcist - Legion VR [1.2.0.37] S3.0.2.apk;com.wolfandwood.exorcistlegionvr;37;1.2.0
The Fight;The Fight v2+1.08 -QU;The Fight v2+1.08 -QU/The Fight [1.08.2] S3.0.2.apk;com.adamstanulewicz.TheFight;2;1.08
The Final Overs;The Final Overs v9+1.44 -QU;The Final Overs v9+1.44 -QU/TheFinalOvers [1.44.9] S3.0.2.apk;com.Mixeal.TheFinalOvers;9;1.44
The Island Odyssey! Hi Spec;The Island Odyssey! Hi Spec v1207+1.2.0.7 -unknown;The Island Odyssey! Hi Spec v1207+1.2.0.7 -unknown/TheIsland.apk;com.VRGameStudio.TheIsland;1207;1.2.0.7
The Knight of Queen;The Knight of Queen v10260+1.2.6 -QU;The Knight of Queen v10260+1.2.6 -QU/THE KNIGHT OF QUEEN [1.2.6.10260] S3.0.2.apk;com.VR_RPG_INC.THE_KNIGHT_OF_QUEEN_QUEST;10260;1.2.6
The Last place;The Last place v2+0.2 -unknown;The Last place v2+0.2 -unknown/The last place 0.2 Patched.apk;br.com.mashimobi.thelastplace;2;0.2
The Line;The Line v47+47 -QU;The Line v47+47 -QU/The Line [47] S3.0.2.apk;io.arvore.theline;47;47
The Purge Day;The Purge Day v90+1.0 -unknown;The Purge Day v90+1.0 -unknown/The Purge Day (com.RedLimbStudio.ThePurageDay) v1.0.apk;com.RedLimbStudio.ThePurageDay;90;1.0
The Room VR - A Dark Matter;The Room VR - A Dark Matter v5011+1.02 -QuestUndeground;The Room VR - A Dark Matter v5011+1.02 -QuestUndeground/The Room VR [1.02] patch+savefix.apk;com.FireproofStudios.TheRoomVR;5011;1.02
The Thrill Of The Fight;The Thrill Of The Fight v200131001+200131.1q -VRP;The Thrill Of The Fight v200131001+200131.1q -VRP/The Thrill Of The Fight v200131001 -VRP.apk;com.fyian.TheThrillOfTheFight;200131001;200131.1q
The Under Presents;The Under Presents v181+1.260 -QU;The Under Presents v181+1.260 -QU/The Under Presents v1.260.apk;com.TenderClaws.TheUnderPresents.Quest;181;1.260
The VR Titty Bar;The VR Titty Bar v1+0.1 -unknown;The VR Titty Bar v1+0.1 -unknown/VR tittybar V1.apk;com.ApexVR.ttBAR;1;0.1
The Walking Dead - Saints & Sinners;The Walking Dead - Saints & Sinners v19283909+192839 -QU;The Walking Dead - Saints & Sinners v19283909+192839 -QU/The Walking Dead - Saints & Sinners [2021.02.10 - build 192839.19283909] S3.0.2.apk;com.SDI.TWD;19283909;Shipping Stage / 2021.02.10 / build 192839
The Wizards - Dark Times;The Wizards - Dark Times v8+1.08 -QU;The Wizards - Dark Times v8+1.08 -QU/The Wizards - Dark Times [1.08] S3.0.2.apk;com.CarbonStudio.DarkTimes;8;1.08
The Wizards;The Wizards v14+1.11 -QU;The Wizards v14+1.11 -QU/The Wizards [1.11.14] patch+savefix+90Hz+CustomRes.apk;com.CarbonStudio.TheWizards;14;1.11
Thumper;Thumper v25+1.00 -QU;Thumper v25+1.00 -QU/Thumper [1.00.25] S3.0.2.apk;com.Drool.Thumper.quest;25;1.00
Tilt Brush;Tilt Brush v141+23.2-28f36f08b -QU;Tilt Brush v141+23.2-28f36f08b -QU/Tilt Brush [23.2-28f36f08b] patch+savefix+90Hz.apk;com.google.tiltbrush;141;23.2-28f36f08b
Time Stall;Time Stall v631960+1.0 -QU (b);Time Stall v631960+1.0 -QU (b)/Time Stall ['1.0'.631960] S3.0.2.apk;com.forcefieldxr.timestall;631960;1.0
Titans of Space PLUS;Titans of Space PLUS v62+1.0 -QU;Titans of Space PLUS v62+1.0 -QU/Titans of Space PLUS v1.0.62.apk;com.drashvr.titansofspacevr6dof;62;1.0
To The Top;To The Top v20+0.20 -QU;To The Top v20+0.20 -QU/TO THE TOP [0.20] S3.0.2.apk;com.electrichatgames.tothetop_al;20;0.20
Together VR;Together VR v2+1.5 -unknown;Together VR v2+1.5 -unknown/TogetherVRMv1.1.apk;com.AuroraGames.TogetherVRM;2;1.5
Topgolf with Pro Putt;Topgolf with Pro Putt v463+463 -QU;Topgolf with Pro Putt v463+463 -QU/Topgolf with Pro Putt [463] S3.0.2.apk;com.golfscope.proputt;463;463
Touring Karts PRO;Touring Karts PRO v7+1.0 -QU;Touring Karts PRO v7+1.0 -QU/Touring Karts PRO [_1.0_.7] S3.0.2.apk;com.ivanovichgames.touringkartsPRO;7;1.0
Toy Clash;Toy Clash v42+1.4.0r6 -unknown;Toy Clash v42+1.4.0r6 -unknown/Toy Clash v1.4.0r6.apk;com.fiveminlab.toyclash;42;1.4.0r6
Traffic Jams;Traffic Jams v21050311+1.0.21050311 -QU;Traffic Jams v21050311+1.0.21050311 -QU/Traffic Jams [1.0.21050311] S3.0.2.apk;nl.littlechicken.trafficjams.quest;21050311;1.0.21050311
Trash Gun;Trash Gun v11+0.11 -QU;Trash Gun v11+0.11 -QU/TrashGun [0.11] S3.0.2.apk;com.JohnRayGames.TrashGun;11;0.11
Travel The Words!;Travel The Words! v3+1.0 -QU;Travel The Words! v3+1.0 -QU/TravelTheWords - Full [1.0.3].apk;com.Studio8ight.TTW.Full;3;1.0
Tribe XR - DJ in VR;Tribe XR - DJ in VR v101+0.09.6 -QU;Tribe XR - DJ in VR v101+0.09.6 -QU/Tribe XR - DJ in VR [0.09.6.101] S3.0.2.apk;com.TribeXR.TribeXR;101;0.09.6
TripeaksDreamland VR;TripeaksDreamland VR v6+1.0 -QU;TripeaksDreamland VR v6+1.0 -QU/TriPeaksDreamland VR [01.00.6] S3.0.2.apk;de.DanielAli.TripeaksDLVRQuest;6;1.0
Triton;Triton v1+1.0 -unknown;Triton v1+1.0 -unknown/Triton VR SQ1.1.apk;com.TetraStudios.TritonVR;1;1.0
Trover Saves the Universe;Trover Saves the Universe v21+1.0 -QU;Trover Saves the Universe v21+1.0 -QU/Trover [1.0.21] patch+savefix+90Hz+CustomRes.apk;com.SquanchGames.Trover;21;1.0
Tsuro - The Game of The Path;Tsuro - The Game of The Path v53+1.14.0 -QU;Tsuro - The Game of The Path v53+1.14.0 -QU/Tsuro - The Game of The Path [1.14.0.53] S3.0.2.apk;com.Thunderbox.TsuroVR;53;1.14.0
Ultra Height - Mist City Climb;Ultra Height - Mist City Climb v2+1.7 -VRP;Ultra Height - Mist City Climb v2+1.7 -VRP/vr ultra height 1.7 new.apk;com.UltraFunGames.UltraHeightMistCityClimb;2;1.7
Ultrawings;Ultrawings v422+2.02 -QU;Ultrawings v422+2.02 -QU/Ultrawings v2.02.422.apk;com.BitPlanet.Ultrawings.Quest;422;2.02
Unstung;Unstung v351+1.2.0 -QU;Unstung v351+1.2.0 -QU/Unstung [1.2.0.351] S3.0.2.apk;com.Neomajika.Unstung;351;1.2.0
Until You Fall;Until You Fall v163081+1.0.6.163081 -QU;Until You Fall v163081+1.0.6.163081 -QU/Until You Fall [1.0.6.163081 (Release_1.0.6)] S3.0.2.apk;com.schellgames.untilyoufall;163081;1.0.6.163081 (Release_1.0.6)
VR Aim Trainer;VR Aim Trainer v1+1.0 -unknown;VR Aim Trainer v1+1.0 -unknown/VR Aim Trainer 1.0 Patched.apk;com.aim.vraimtrainer;1;1.0
VR Workout;VR Workout v4+0.9.8j -unknown;VR Workout v4+0.9.8j -unknown/VRWorkout v0.9.8a_Patched.apk;org.godotengine.vrworkout;4;0.9.8j
VRIT;VRIT v9+0.2 -QU;VRIT v9+0.2 -QU/VRIT v9+0.2 -QU.apk;com.Wasplay.VRIT;9;0.2
VRIT;VRIT v9+0.2 -QU;VRIT v9+0.2 -QU/VRIT [_0.2_.9] S3.0.2.apk;com.Wasplay.VRIT;9;0.2
VRKarts Sprint;VRKarts Sprint v28+1.18 -QU;VRKarts Sprint v28+1.18 -QU/VRKarts_Sprint [1.18.28] patch+savefix+90Hz+CustomRes.apk;com.viewpointgames.vrkarts_sprint_quest;28;1.18
VRtuos Pro;VRtuos Pro v1+2.0.3 -unknown;VRtuos Pro v1+2.0.3 -unknown/VRtuos Pro 2.0 Patched.apk;com.PavelMarceluch.VRtuosPro;1;2.0.3
Vacation Simulator;Vacation Simulator v84+1.3.0-38033 -QU;Vacation Simulator v84+1.3.0-38033 -QU/Vacation Simulator [1.3.0-38033.84] S3.0.2.apk;com.owlchemylabs.vacationsimulator;84;1.3.0-38033
Vader Immortal - Episode I;Vader Immortal - Episode I v236952+1.1.0 -QU;Vader Immortal - Episode I v236952+1.1.0 -QU/Vader Ep1 [1.1.0] patch+savefix.apk;com.ILMxLAB.VaderImmortal.ep1;236952;1.1.0
Vader Immortal - Episode II;Vader Immortal - Episode II v236948+2.0.2 -QU;Vader Immortal - Episode II v236948+2.0.2 -QU/Vader Episode 2 [2.0.2] patch+savefix.apk;com.ILMxLAB.VaderImmortal.ep2;236948;2.0.2
Vader Immortal - Episode III;Vader Immortal - Episode III v236944+3.0.2 -QU;Vader Immortal - Episode III v236944+3.0.2 -QU/Vader Episode 3 [3.0.2] patch+savefix.apk;com.ILMxLAB.VaderImmortal.ep3;236944;3.0.2
Vanishing Grace;Vanishing Grace v33+1.0.2 -QU;Vanishing Grace v33+1.0.2 -QU/Vanishing Grace [1.0.2.33] S3.0.2.apk;com.MontePerdido.VanishingGrace;33;1.0.2
Verto Studio VR;Verto Studio VR v251+2.5.1 -QU;Verto Studio VR v251+2.5.1 -QU/Verto Studio VR [2.5.1.251].apk;com.vertostudio.vertostudiovr;251;2.5.1
ViFit;ViFit v1+1.0.0 -unknown;ViFit v1+1.0.0 -unknown/ViFit v1.0.0.apk;com.VifitTraining.Vifit;1;1.0.0
Viking Days;Viking Days v21+1.0 -unknown;Viking Days v21+1.0 -unknown/Viking Days (com.vrmonkey.VikingDays) v1.0 patched.apk;com.vrmonkey.VikingDays;21;1.0
Virtual Virtual Reality;Virtual Virtual Reality v11+1.8.13 -QU;Virtual Virtual Reality v11+1.8.13 -QU/Virtual Virtual Reality [1.8.13.11].apk;com.TenderClaws.VVR.Quest;11;1.8.13
Void Racer - Extreme;Void Racer - Extreme v121+1.21 -QU;Void Racer - Extreme v121+1.21 -QU/Void Racer - Extreme [1.21.121] S3.0.2.apk;com.coplanar.vre;121;1.21
Volleyball Fever;Volleyball Fever v1+1.5.1 -QU;Volleyball Fever v1+1.5.1 -QU/Volleyball Fever [1.5.1] S3.0.2.apk;io.neuston.volleyballfever;1;1.5.1
Voxel Works;Voxel Works v9+0.3.8 -unknown;Voxel Works v9+0.3.8 -unknown/New Voxel Works Quest v0.3.8.apk;org.dammertz.vr.VoxelWorksQuest;9;0.3.8
Waifu's Spooky Space Station;Waifu's Spooky Space Station v11+1.0b -QU;Waifu's Spooky Space Station v11+1.0b -QU/Waifu's Spooky Space Station v11+1.0b -QU.apk;com.MiraiMadaGames.WSS;11;1.0b
Walkabout Mini Golf;Walkabout Mini Golf v1660+1.66 -QU;Walkabout Mini Golf v1660+1.66 -QU/Walkabout Mini Golf [1.66.1660] S3.0.2.apk;com.MightyCoconut.WalkaboutMiniGolf;1660;1.66
Waltz of the Wizard - Extended Edition;Waltz of the Wizard - Extended Edition v414+1.6.1.414 -QU;Waltz of the Wizard - Extended Edition v414+1.6.1.414 -QU/Waltz of the Wizard - Extended Edition [1.6.1.414] S2.11.apk;com.Aldin.WotW;414;1.6.1.414
Wander;Wander v3409+0.3409 -QU;Wander v3409+0.3409 -QU/Wander [0.3409] S3.0.2.apk;com.parkline.wander;3409;0.3409
Wands;Wands v788+1.6.2 -VRP;Wands v788+1.6.2 -VRP/Wands v1.6.2 -VRP.apk;com.CortopiaStudios.Wands;788;1.6.2
Wands;Wands v858+1.8.0 -QU (Q2only);Wands v858+1.8.0 -QU (Q2only)/Wands [1.8.0.858] S3.0.2.apk;com.CortopiaStudios.Wands;858;1.8.0
Warhammer 40000 - Battle Sister;Warhammer 40000 - Battle Sister v12351239+1.1.0 -QU;Warhammer 40000 - Battle Sister v12351239+1.1.0 -QU/Warhammer 40000 - Battle Sister [1.1.0.12351239] S3.0.2.apk;com.PixelToys.BattleSisters;12351239;1.1.0
Warlike Space;Warlike Space v4+1.4 -QU;Warlike Space v4+1.4 -QU/WarlikeSpace [1.4] S3.0.2.apk;com.EVR.WarlikeSpace;4;1.4
Warplanes - WW1 Fighters;Warplanes - WW1 Fighters v232+2.3.2 -QU;Warplanes - WW1 Fighters v232+2.3.2 -QU/Warplanes - WW1 Fighters [2.3.2.232] S3.0.2.apk;com.HomeNetGames.WW1oculus;232;2.3.2
Where Thoughts Go;Where Thoughts Go v38+1.26 -QU;Where Thoughts Go v38+1.26 -QU/Where Thoughts Go [1.26.38] S3.0.2.apk;com.feels.WhereThoughtsGo.Quest;38;1.26
Whirligig VR Media Player;Whirligig VR Media Player v25+4.84 -unknown;Whirligig VR Media Player v25+4.84 -unknown/Whirligig VR Media Player v4.84.apk;com.Whirligig.Whirligig;25;4.84
White Hole;White Hole v11+1.12 -QU;White Hole v11+1.12 -QU/WhiteHole [1.12.11] S3.0.2.apk;Fenrir.WhiteHole;11;1.12
Witchblood;Witchblood v183732+1.0 -unknown;Witchblood v183732+1.0 -unknown/Witchblood v1.0 Patched.apk;com.hiddenpath.Witchblood;183732;1.0
Wolves in the Walls;Wolves in the Walls v1375+1.1375 -VRP;Wolves in the Walls v1375+1.1375 -VRP/Wolves in the Walls v1.1375 -VRP.apk;com.fable.wolvesquest;1375;1.1375
Wonderglade;Wonderglade v109088216+1.9.88216 -QU;Wonderglade v109088216+1.9.88216 -QU/Wonderglade [1.9.88216.109088216] S3.0.2.apk;com.resolutiongames.wondergladesantacruz;109088216;1.9.88216
Wraith - The Oblivion - Afterlife;Wraith - The Oblivion - Afterlife v104+1.0 -QU;Wraith - The Oblivion - Afterlife v104+1.0 -QU/Wraith - The Oblivion - Afterlife [1.0.104] S3.0.2.apk;com.fasttravelgames.jukebox;104;1.0
X-BOOSTER;X-BOOSTER v100013+1.51 -QU;X-BOOSTER v100013+1.51 -QU/X-BOOSTER [1.51.100013] S3.0.2.apk;com.NiVision.XBOOSTER;100013;1.51
Yupitergrad;Yupitergrad v33+2.0.0 -QU;Yupitergrad v33+2.0.0 -QU/Yupitergrad [2.0.0.33] S3.0.2.apk;com.Gamedust.Yupitergrad;33;2.0.0
Zero Caliber - Reloaded;Zero Caliber - Reloaded v264+1.0 -QU;Zero Caliber - Reloaded v264+1.0 -QU/Zero Caliber - Reloaded v264+1.0 -QU.apk;com.XrealGames.ZcReloaded;264;1.0.264
Zombie World VR;Zombie World VR v4+1.0 -unknown;Zombie World VR v4+1.0 -unknown/Zombie World VR_1.0_Patched.apk;com.Appalga.ZombieWorldVR;4;1.0
Zombieland - Headshot Fever;Zombieland - Headshot Fever v1172+1.2.5 -QU;Zombieland - Headshot Fever v1172+1.2.5 -QU/Zombieland - Headshot Fever [1.2.5.1172] S3.0.2.apk;com.XRGames.ZombielandVR;1172;1.2.5
Zooma - Deluxe Edition;Zooma - Deluxe Edition v712+1.1.3 -unknown;Zooma - Deluxe Edition v712+1.1.3 -unknown/Zooma - Deluxe Edition v1.1.3.apk;com.GizmoVRLTD.Zooma;712;1.1.3
Zooma VR;Zooma VR v433+1.1.3 -QU;Zooma VR v433+1.1.3 -QU/Zooma [1.1.3.433] S3.0.2.apk;com.GizmoVRLTD.Zooma;433;1.1.3
exVRience Golf Club;exVRience Golf Club v68+1 -QU;exVRience Golf Club v68+1 -QU/exVRience Golf Club [1.68] S3.0.2.apk;com.exvrience.exvriencegolfclubq;68;1
Running Rclone command: sync "VRP-mirror13:Quest Games/.meta/thumbnails" "C:\Users\Oscar\Desktop\Rookie\androidsideloader\thumbnails"
Rclone error:
Rclone Output:
Running Rclone command: sync "VRP-mirror13:Quest Games/.meta/notes" "C:\Users\Oscar\Desktop\Rookie\androidsideloader\notes"
Rclone error:
Rclone Output:
Running command -s 192.168.0.101:5555 shell input keyevent KEYCODE_WAKEUP
Running command -s 192.168.0.101:5555 shell input keyevent KEYCODE_WAKEUP
Running command -s 192.168.0.101:5555 shell input keyevent KEYCODE_WAKEUP
Running command -s 192.168.0.101:5555 shell pm list packages -3
package:com.aim.vraimtrainer
package:com.CooperativeInnovations.Spaceteam
package:com.Gamedust.Yupitergrad
package:com.FireproofStudios.TheRoomVR
package:aaa.QuestAppLauncher.App
package:com.freelives.gorn
package:io.arvore.theline
package:com.crytek.climb
package:com.schellgames.untilyoufall
package:com.VerticalRobot.RedMatter
package:com.infectiousape.kingspray
package:com.Trebuchet.PrisonBossVR
package:com.TenderClaws.VVR.Quest
package:com.zoink.ghostgiant
package:com.Overrungames.Arcaxer
package:com.facebook.horizon
package:com.DigitalLode.Espire1
package:com.Drool.Thumper.quest
package:com.resolutiongames.demeo
package:com.resolutiongames.ignis
package:com.owlchemylabs.vacationsimulator
package:com.Pixelfun.FutbolinRevolution
package:com.cvr.highseas2
package:com.WenklyStudio.ElvenAssassin
package:com.holomia.missionxlite
package:com.ILMxLAB.VaderImmortal.ep1
package:com.ILMxLAB.VaderImmortal.ep2
package:com.figureout.questvr
package:com.VRKemono.RealmsofEternity
package:com.PicoPlanetDeveloping.FarmGame
package:VirtualDesktop.Android
package:de.erthu.advr
package:io.arvore.pixelripped1995
package:com.survios.Electronauts
package:com.themunky.drunknbarfightQuest
package:com.cloudheadgames.pistolwhip
package:com.odders.ohshape
package:com.beatgames.beatsaber
package:com.ViteiBackroom.Powder
package:com.enhanceexperience.tetriseffect
package:com.Sutur.DescentAlpsPreRelease
package:com.oculus.environment.prod.adobe
package:com.oculus.environment.prod.japan
package:com.tvb.cubism
package:com.halfbrick.fruitninjavr
package:com.MyronSoftware.Deisim
package:ca.StitchMedia.FlowWeaver
package:com.resolutiongames.wondergladesantacruz
package:com.oculus.environment.prod.spacestation
package:com.CortopiaStudios.Wands
package:com.emcneill.Ironlights
package:com.YourCompany.SWP_VR
package:com.ForwardXP.nuke
package:com.GreenerGames.QuestTreks
package:com.schellgames.ieytdquest
package:com.owlchemylabs.jobsimulator
package:com.polyarc.MossGame
package:com.SDI.TWD
package:com.markschramm.gravitylab
package:com.Armature.SportsScramble
package:com.melscience.melchemistryvr
package:com.coplanar.vre
package:com.coatsink.alone
package:com.coatsink.nexus
package:com.TenderClaws.TheUnderPresents.Quest
package:com.ivanovichgames.pangman
package:com.holonautic.HandPhysicsLab
package:com.whalerockindustries.testedvr
package:com.HighVoltage.Crossbow
package:com.parkline.wander
package:com.Miragesoft.RealVrFishingQ
package:com.fasttravelgames.diorama
package:com.drbeef.lambda1vr
package:com.metanaut.Gadgeteer
package:com.brennanhatton.dungeontrain
package:com.CortopiaStudios.DTRH
package:com.Thunderbox.TsuroVR
package:com.VRstudios.HoopsMadness
package:com.coinflip.ninja
package:com.hiddenpath.phoenix
package:com.scale1.sepsdinerSolo
package:com.voidroom.TeaForGod
package:com.forevr.bowling
package:com.weloveoculus.BMBF
package:com.kluge.SynthRiders
package:com.oculus.environment.prod.cyberhome
package:Settings.OculusQuest2
package:com.BigBoxVR.PopulationONE
package:com.oculus.dab2
package:com.iillusions.spacepiratetrainerquest
package:com.mixedrealms.sairentovruntethered
package:com.Armature.FailFactory
package:com.RacketFury.RF_GearVR
package:com.fyian.TheThrillOfTheFight
package:com.funktroniclabs.fuji
package:com.AlzanStudios.HPPortable
package:com.gravitysketch.gravitysketch
package:quest.eleven.forfunlabs
package:com.oculus.tv
package:com.ToastVR.RichiesPlankExperience
package:com.nextgenreality.GunClubVR
package:com.Mixeal.TheFinalOvers
package:com.Supermedium.Supermedium
package:com.enhanceexperience.rezquest
package:com.drbeef.quake2quest
package:com.chesstar.HiBow.Launcher
package:com.mightygamesgroup.shootyvr
package:com.drashvr.titansofspacevr6dof
package:com.Ikimasho.StarShaman
package:com.ilmxlab.tales
package:com.fasttravelgames.jukebox
package:com.PixelToys.DropDead
package:com.DashingCape.FoodFlinger
package:io.neuston.volleyballfever
package:com.forcefieldxr.timestall
package:com.Drifter.Kodiak
package:unity.SUPERHOT_Team.SUPERHOT_VR_QA
package:us.lighthaus.colorspace
package:com.UNIVRS.LWAVR
package:com.MiroWin.OMT
package:com.harmonixmusic.kata
package:com.fasttravelgames.apexconstruct
package:com.ndreams.shootyfruity
package:com.FlodLab.OceanCraft
package:com.nextgenreality.rush
package:com.onehamsa.RNXQ
package:com.YourCompany.RoboRecall
package:com.Chesstar.NesVR.QuestItch
package:com.Aldin.WotW
package:com.resolutiongames.codenamelazarus
package:com.AoQ.AttackOnQuest
package:com.forcefieldxr.explorevr
package:com.CyanWorlds.Myst
package:gg.trs.grappa
package:com.facebook.arvr.quillplayer
package:com.truantpixel.twomdquest
package:nl.littlechicken.trafficjams.quest
package:com.TriangleFactory.HyperDash
package:io.github.sds100.keymapper
package:com.SquirrelBytes.Hyperstacks
package:org.dammertz.vr.VoxelWorksQuest
package:com.SquanchGames.Trover
package:com.MightyCoconut.WalkaboutMiniGolf
package:jp.co.crypton.mikuvrq
package:com.Solfar.InDeath
package:com.picselica.OceanRiftFullQuest
package:com.TribeXR.TribeXR
package:com.CarbonStudio.TheWizards

View File

@@ -1 +1 @@
2.1
2.15