├── .github
└── workflows
│ ├── gitflow-badges.yml
│ ├── gitflow-linux.yml
│ ├── gitflow-mac-big-sur.yml
│ ├── gitflow-mac-catalina-bare.yml
│ └── gitflow-mac-catalina.yml
├── .gitignore
├── LICENSE
├── README.md
├── extras
├── 1.png
├── 2.png
├── 3.png
├── apk-uninstaller.sh
├── c
├── com.sample.android.apk
├── connectviawifi.sh
├── create_badgelist.sh
├── hz.png
├── k
├── motd
├── qu_found.png
├── qu_hz.png
├── qu_resolution.png
├── testgitflow.sh
├── udev.sh
├── update1.png
├── update2.png
├── username.png
├── web.jpg
└── wipnode.gif
├── install
├── mac_aapt_lib
└── aapt
├── sideload
├── sideload-browser
├── sideload-change-rate
├── sideload-change-res
├── sideload-change-settings
├── sideload-change-username
├── sideload-check-updates
├── sideload-gui
├── sideload-mount
├── sideload-updatebadges
├── sideload-wifi
└── sideloader-config
/.github/workflows/gitflow-badges.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow to help you get started with Actions
2 |
3 | name: CI-BADGES
4 |
5 | # Controls when the action will run. Triggers the workflow on push or pull request
6 | # events but only for the main branch
7 | on:
8 | push:
9 | branches:
10 | - main
11 | - development
12 | pull_request:
13 | branches:
14 | - development
15 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
16 | jobs:
17 | # This workflow contains a single job called "build"
18 | build-badges:
19 | # The type of runner that the job will run on
20 | runs-on: ubuntu-latest
21 | # Steps represent a sequence of tasks that will be executed as part of the job
22 | steps:
23 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
24 | - uses: actions/checkout@v2
25 |
26 | # Runs a single command using the runners shell
27 | - name: Run install
28 | run: $GITHUB_WORKSPACE/install local
29 | - name: Run sideload-mount
30 | run: sideload-mount mount
31 | - name: updatebadges
32 | run: sideload-updatebadges
33 | - name: Upload Build Artifact
34 | uses: actions/upload-artifact@v2
35 | with:
36 | name: badges
37 | path: /tmp/badges
38 |
39 |
40 |
41 |
42 | #- name: Run sideload
43 | # run: cd extras && sideload
44 | #- name: Run sideload-browser
45 | # run: sideload-browser
46 | #- name: Run ww-mount
47 | # run: whitewhidow-mount /tmp/mnt
48 | #- name: Run sideload
49 | # run: cd /tmp/mnt && cd "$(ls -d */|head -n 1)" && sideload
--------------------------------------------------------------------------------
/.github/workflows/gitflow-linux.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow to help you get started with Actions
2 |
3 | name: CI-LINUX
4 |
5 | # Controls when the action will run. Triggers the workflow on push or pull request
6 | # events but only for the main branch
7 | on:
8 | push:
9 | branches:
10 | - main
11 | - development
12 | pull_request:
13 | branches:
14 | - main
15 | - development
16 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
17 | jobs:
18 | # This workflow contains a single job called "build"
19 | build-linux:
20 | # The type of runner that the job will run on
21 | runs-on: ubuntu-latest
22 | # Steps represent a sequence of tasks that will be executed as part of the job
23 | steps:
24 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
25 | - uses: actions/checkout@v2
26 |
27 | # Runs a single command using the runners shell
28 | - name: Run install
29 | run: $GITHUB_WORKSPACE/install local
30 | - name: Run sideload-mount
31 | run: sideload-mount mount
32 | - name: Run sideload-browser
33 | run: sideload-browser
34 | - name: Run local sideload
35 | run: cd extras && sideload
36 | - name: Run remote sideload
37 | run: cd /tmp/mnt && cd "Little Witch Academia - VR Broom Racing v1.0.1-639" && /usr/local/bin/sideload "Little Witch Academia VR [v1.0.1-639].apk"
38 | - name: check-updates
39 | run: sideload-check-updates
40 |
41 |
42 | #- name: Run sideload
43 | # run: cd extras && sideload
44 | #- name: Run sideload-browser
45 | # run: sideload-browser
46 | #- name: Run ww-mount
47 | # run: whitewhidow-mount /tmp/mnt
48 | #- name: Run sideload
49 | # run: cd /tmp/mnt && cd "$(ls -d */|head -n 1)" && sideload
--------------------------------------------------------------------------------
/.github/workflows/gitflow-mac-big-sur.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow to help you get started with Actions
2 |
3 | name: CI-BIG-SUR
4 |
5 | # Controls when the action will run. Triggers the workflow on push or pull request
6 | # events but only for the main branch
7 | on:
8 | push:
9 | branches:
10 | - main
11 | pull_request:
12 | branches:
13 | - main
14 | - development
15 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
16 | jobs:
17 | build-mac-big-sur:
18 | # The type of runner that the job will run on
19 | runs-on: macos-11.0
20 | # Steps represent a sequence of tasks that will be executed as part of the job
21 | steps:
22 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
23 | - uses: actions/checkout@v2
24 | #- name: remove xcode
25 | # run: sudo mv /Library/Developer/CommandLineTools/ /Library/Developer/CommandLineTools2 && sudo mkdir /Library/Developer/CommandLineTools/
26 | #- name: Remove brew
27 | # run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)"
28 | # Runs a single command using the runners shell
29 | - name: Run install
30 | run: $GITHUB_WORKSPACE/install local
31 | - name: Run sideload-mount
32 | run: sideload-mount mount
33 |
34 |
35 |
--------------------------------------------------------------------------------
/.github/workflows/gitflow-mac-catalina-bare.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow to help you get started with Actions
2 |
3 | name: CI-CATALINA-BARE
4 |
5 | # Controls when the action will run. Triggers the workflow on push or pull request
6 | # events but only for the main branch
7 | on:
8 | push:
9 | branches:
10 | - main
11 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
12 | jobs:
13 |
14 |
15 |
16 | build-mac-catalina-bare:
17 | # The type of runner that the job will run on
18 | runs-on: macOS-latest
19 | # Steps represent a sequence of tasks that will be executed as part of the job
20 | steps:
21 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
22 | - uses: actions/checkout@v2
23 |
24 | # Runs a single command using the runners shell
25 | - name: remove xcode
26 | run: sudo mv /Library/Developer/CommandLineTools/ /Library/Developer/CommandLineTools2 && sudo mkdir /Library/Developer/CommandLineTools/
27 | - name: Remove brew
28 | run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)"
29 | - name: Run install
30 | run: $GITHUB_WORKSPACE/install local
31 | - name: Run sideload-mount
32 | run: sideload-mount mount
33 | - name: Run sideload-browser
34 | run: sideload-browser
35 | - name: Run local sideload
36 | run: cd extras && sideload
37 | - name: Run remote sideload
38 | run: cd /tmp/mnt && cd "Little Witch Academia - VR Broom Racing v1.0.1-639" && /usr/local/bin/sideload "Little Witch Academia VR [v1.0.1-639].apk"
39 | - name: check-updates
40 | run: sideload-check-updates
41 |
--------------------------------------------------------------------------------
/.github/workflows/gitflow-mac-catalina.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow to help you get started with Actions
2 |
3 | name: CI-CATALINA
4 |
5 | # Controls when the action will run. Triggers the workflow on push or pull request
6 | # events but only for the main branch
7 | on:
8 | push:
9 | branches:
10 | - main
11 | pull_request:
12 | branches:
13 | - main
14 | - development
15 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
16 | jobs:
17 |
18 |
19 |
20 | build-mac-catalina:
21 | # The type of runner that the job will run on
22 | runs-on: macOS-latest
23 | # Steps represent a sequence of tasks that will be executed as part of the job
24 | steps:
25 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
26 | - uses: actions/checkout@v2
27 |
28 | # Runs a single command using the runners shell
29 | - name: Run install
30 | run: $GITHUB_WORKSPACE/install local
31 | - name: Run sideload
32 | run: cd extras && sideload
33 | - name: Run sideload-mount
34 | run: sideload-mount mount
35 | - name: Run sideload-browser
36 | run: sideload-browser
37 | - name: Run local sideload
38 | run: cd extras && sideload
39 | - name: Run remote sideload
40 | run: cd /tmp/mnt && cd "Little Witch Academia - VR Broom Racing v1.0.1-639" && /usr/local/bin/sideload "Little Witch Academia VR [v1.0.1-639].apk"
41 | - name: check-updates
42 | run: sideload-check-updates
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /ignore/
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 WhiteWhidow
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | update 01.12.2020
2 | # DEVELOPMENT MOVED TO [whitewhidow/quest-sidenoder](https://github.com/whitewhidow/quest-sidenoder)
3 |
4 | ---
5 | ---
6 | ---
7 |
8 | # Quest-sideloader-linux (& mac osx)
9 | Quest Sideloader for Linux and Mac with integrated drive access to app library.
10 |
11 |
17 |
38 | # Install / Update:
39 | Latest Stable:
40 | ```
41 | curl -fsSL https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/main/install | /bin/bash -s -- main
42 | ```
43 | Latest Dev:
44 | ```
45 | curl -fsSL https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/development/install | /bin/bash -s -- development
46 | ```
47 |
48 |
49 |
50 | # Usage:
51 | ```
52 | sideload-gui
53 | ```
54 | ### Features include:
55 | - Cloud folder included
56 | - Wireless ADB supported
57 | - Browse and sideload APK's
58 | - Automatically check drive for updates
59 | - Change username (global and APK specific)
60 | - Switch refreshrate 90Hz/72Hz (global and APK specific)
61 | - Change texture resolution (global and APK specific)
62 |
63 | # Extra:
64 |
100 |
101 | Linux udev rules?
102 |
103 | In case your distro need a special udev rule to allow permissions to the adb device:
104 | ```
105 | sudo ./extras/udev.sh $USER
106 | ```
107 |
108 |
109 |
110 |
111 |
112 | Please feel free to ask for help when encountering any issues.
113 |
114 | # WIP: CROSS PLATFORM NODE VERSION
115 | https://github.com/whitewhidow/quest-sidenoder
116 | 
117 | Looking for content or support? Find me @ https://t.me/whitewhidow_q2_working
118 |
119 | Copyright (c) 2020 WhiteWhidow/branchBit
120 |
121 | Permission is hereby granted, free of charge, to any person
122 | obtaining a copy of this software and associated documentation
123 | files (the "Software"), to deal in the Software without
124 | restriction, including without limitation the rights to use,
125 | copy, modify, merge, publish, distribute, sublicense, and/or sell
126 | copies of the Software, and to permit persons to whom the
127 | Software is furnished to do so, subject to the following
128 | conditions:
129 |
130 | The above copyright notice and this permission notice shall be
131 | included in all copies or substantial portions of the Software.
132 |
133 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
134 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
135 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
136 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
137 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
138 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
139 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
140 | OTHER DEALINGS IN THE SOFTWARE.
141 |
--------------------------------------------------------------------------------
/extras/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/1.png
--------------------------------------------------------------------------------
/extras/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/2.png
--------------------------------------------------------------------------------
/extras/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/3.png
--------------------------------------------------------------------------------
/extras/apk-uninstaller.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo UNFINISHED
4 | exit
5 |
6 |
7 |
8 | ## DIALOG STUFF
9 | #w=$(xdpyinfo | awk '/dimensions/{print $2}'|cut -f1 -dx); \
10 | #h=$(xdpyinfo | awk '/dimensions/{print $2}'|cut -f2 -dx); \
11 | w=600
12 | h=400
13 |
14 | TERMINAL=$(tty) #Gather current terminal session for appropriate redirection
15 | HEIGHT=20
16 | WIDTH=76
17 | CHOICE_HEIGHT=16
18 | BACKTITLE="www.github.com/whitewhidow/quest-sideloader-linux"
19 | TITLE="Quest APK UnInstaller"
20 | ## DIALOG STUFF
21 |
22 |
23 | APKS="
24 | aaaaaa d ada
25 | asdasd adad.sd a.d
26 | adasda da
27 | asdad
28 | "
29 |
30 | while [ "$RUN" != "FINISHED" ]; do
31 | while [ "$CHOICE" != "CONFIRMED" ]; do
32 | SELECTED=$(echo "${APKS}" | zenity --list --column="$MENU" --text="Select a package to remove" --width="$w" --height="$h")
33 |
34 | if [ -z $SELECTED ]; then
35 | exit
36 | fi
37 | echo $SELECTED
38 |
39 | zenity --question --text="Are you sure you want to remove $SELECTED ?" --width="$w" --height="$h"
40 | if [ $? = 0 ]; then
41 | CHOICE="CONFIRMED"
42 | echo "yes"
43 | else
44 | echo "no"
45 | fi
46 | done
47 |
48 |
49 |
50 | zenity --question --text="Would you like to restart and remove another package ?" --width="$w" --height="$h"
51 | if [ $? = 0 ]; then
52 | CHOICE="NOTCONFIRMED"
53 | else
54 | RUN="FINISHED"
55 | fi
56 | done
57 | exit
58 |
59 |
--------------------------------------------------------------------------------
/extras/c:
--------------------------------------------------------------------------------
1 | W1dISVRFV0hJRE9XX1FVRVNUXQp0eXBlID0gZHJpdmUKc2NvcGUgPSBkcml2ZQpyb290X2ZvbGRl
2 | cl9pZCA9IDFfcHF3dm85VXJMQVlpUmVlLU01VkFLaXhHakw1LXBoUgpzZXJ2aWNlX2FjY291bnRf
3 | ZmlsZSA9IFhYWAoK
4 |
--------------------------------------------------------------------------------
/extras/com.sample.android.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/com.sample.android.apk
--------------------------------------------------------------------------------
/extras/connectviawifi.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 |
4 | # the below if, so you add can this script to your udev for automatic wireless connection !! , RUN+="path/to/connectviawifi.sh sleep"
5 | if [ $# -eq 1 ]
6 | then
7 | sleep 3
8 | fi
9 |
10 |
11 | DEVICES=$(adb devices)
12 | DEVICECHECK=$(($(echo "$DEVICES" | grep device | wc -l)-1))
13 | ##echo "$DEVICECHECK Device found"
14 | if [ "$DEVICECHECK" == 2 ]
15 | then
16 | echo "2 Devices found, you are most likely connected via wifi AND usb."
17 | exit 1
18 | fi
19 | if [ "$DEVICECHECK" == 0 ]
20 | then
21 | echo "No device connected, please connect usb."
22 | exit 1
23 | fi
24 |
25 |
26 | DEVICE=$(echo "$DEVICES" | tail -1)
27 |
28 | if [[ $DEVICE == 192* ]]
29 | then
30 | echo "1 Device found, already connected via wifi."
31 | exit 1
32 | fi
33 |
34 |
35 | WIFIIP=$(adb shell ip addr show wlan0 2> /dev/null | grep 'inet ' | cut -d' ' -f6|cut -d/ -f1 | sed '/^$/d') 2> /dev/null
36 |
37 |
38 | if [ -z "$WIFIIP" ]
39 | then
40 | echo "NO USB DEVICE DETECTED, THAT HAS WIFI ENABLED, PLEASE CONNECT USB DEVICE THAT HAS WIFI ENABLED"
41 | exit 1
42 | fi
43 |
44 |
45 | [[ $a == z* ]]
46 |
47 |
48 | echo "HMD IP Found: $WIFIIP"
49 |
50 |
51 |
52 | WIFISTART=$(adb tcpip 5555)
53 |
54 | WIFICHECK=$(adb connect $WIFIIP:5555)
55 |
56 | if [ "$WIFICHECK" == "connected to $WIFIIP:5555" ]
57 | then
58 | sleep 1
59 | adb devices 2> /dev/null
60 | sleep 1
61 | echo "ADB over WIFI established on ip $WIFIIP , GOOD TO GO, YOU CAN UNPLUG NOW"
62 | exit 1
63 | fi
64 |
--------------------------------------------------------------------------------
/extras/create_badgelist.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 |
4 |
5 |
6 | ORIPATH=$PWD
7 | cd /tmp/mnt
8 | echo '' > "$ORIPATH/badgelist.txt"
9 | COUNT=0
10 | ALLCOUNT=$(ls -l | grep "^d" | wc -l)
11 | for d in ./*; do
12 | ((COUNT++))
13 | PERCENT=$(awk "BEGIN {print int(100/$ALLCOUNT*$COUNT)}")
14 | if [[ -d "$d" ]]; then
15 | cd "$d"
16 | if [ ! "$(ls -la ./*-version.txt 2> /dev/null )" ]; then
17 | echo -e "Generating for $d\n"
18 | APKNAME=$(ls -t | grep -e "./*\.apk") && APKNAME=${APKNAME#/}
19 | #echo -e "AAPKNAME: $APKNAME \n\n"
20 |
21 | pv "$APKNAME" > "/tmp/$APKNAME"
22 | echo "transfer done, now badging"
23 | BADGING=$(aapt dump badging "/tmp/$APKNAME")
24 | rm "/tmp/$APKNAME"
25 | #sleep 10
26 | PACKAGEVERSION=$(echo "$BADGING" | grep versionCode= | sed -E "s/.*Code='(.*)' version.*/\1/")
27 | PACKAGENAME=$(echo "$BADGING" | grep package:\ name | awk '/package/{gsub("name=|'"'"'",""); print $2}')
28 | #echo "ectracted packageversin $PACKAGEVERSION \n"
29 | #echo "now writing"
30 | echo "# synced:$PACKAGENAME ($COUNT / $ALLCOUNT)"
31 | echo "$PACKAGEVERSION" > "$PACKAGENAME-version.txt"
32 | #cat "$PACKAGENAME-version.txt"
33 | echo "$PACKAGENAME|$PACKAGEVERSION|$d/$APKNAME" >> "$ORIPATH/badgelist.txt"
34 | echo "$PERCENT"
35 | echo "# $COUNT / $ALLCOUNT"
36 | else
37 | echo "skipping $d\n"
38 | APKNAME=$(ls -t | grep -e "./*\.apk") && APKNAME=${APKNAME#/}
39 | FILE=$(ls -t *-version.txt 2> /dev/null )
40 | PACKAGENAME=$(echo "$FILE" | sed -e 's/\/\(.*\)-version/\1/' | rev | cut -c13- | rev)
41 | echo "# synced:$PACKAGENAME ($COUNT / $ALLCOUNT)"
42 | if [ "$PACKAGENAME" != "" ]; then
43 | echo "$PACKAGENAME|$(cat "$FILE")|$d/$APKNAME" >> "$ORIPATH/badgelist.txt"
44 | fi
45 | #cat "$(ls -t *_version.txt 2> /dev/null )"
46 | echo "$PERCENT"
47 | echo "# $COUNT / $ALLCOUNT ($PERCENT%)"
48 | fi
49 | cd ../
50 | fi
51 | done
52 |
53 | mkdir -p /tmp/badges/
54 | cp "$ORIPATH/badgelist.txt" /tmp/badges 2> /dev/null
55 |
--------------------------------------------------------------------------------
/extras/hz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/hz.png
--------------------------------------------------------------------------------
/extras/k:
--------------------------------------------------------------------------------
1 | ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAgInByb2plY3RfaWQiOiAiYnJhbmNoYml0
2 | LTIwMDcwOSIsCiAgInByaXZhdGVfa2V5X2lkIjogIjJiNTE0MjU5ZGRmOWZmMGFjMWFmNjRlZmEz
3 | NzNlYzA4ZTMyZWVlZGMiLAogICJwcml2YXRlX2tleSI6ICItLS0tLUJFR0lOIFBSSVZBVEUgS0VZ
4 | LS0tLS1cbk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFR
5 | RE8rYmFCdnp6OVhMWHJcblNON3hrM2U1a2RXVkhweTlUVDdTL1RibVdEZFo4c1EybFJMZXpOMWdD
6 | ZlltRDVLSFB5THVTVnNPamU2ZW1XMzlcbldjU0s5TUFVZFVwVjRoS3kxL0JUb3hGQTEzQk03NXpr
7 | MjZRc3VaVnBPakdNanY4VHBEdDNxR0pIVkJpa1pCcFhcbm1rTDkyQ3FOZ01HcmlhSTJtZ2d4Q08z
8 | MGRmWVJjMjRzZE9XMUsrSVlOQ0JJQS9qQ0svaUVmVEVQR2JsM1gwVmxcbi9URFlKY0l3S2szbEtt
9 | N3pualR3bFZRdmVKL3ovRGRWTzkvY0ZDenpJL0tFbUxxR2NLaE1NY0hBM3J4TXVqNjdcbko0cE8r
10 | UDFvQmhzUjRRNCtCT1lQb2xpdW1DN1lWZDJ2b3htTzJqM1RGUUREUy9WMmNrWVRJNGhXWkdhN2h0
11 | ZXlcblVCWG00bk12QWdNQkFBRUNnZ0VBQkU4dHJoamh0N0s0OU91Zy9LMmgxZ0xEekNXRmhPbDVU
12 | K0pHeE5mOFd3cVRcbmJFR0JVWk01WHJrR1gzZCtpUU5YQWxnVHBjTnR2dTZaM0NjRTBSSFVkL2lU
13 | TWlPUldSam0zNDdyR29zQnd4QlFcbkYzRzlRdE1nV2I4RTdoVENHZElYRE9BOEg1a1FKRWdUUmxT
14 | blpXcWRSREgwbGxJNHh1TkJIV2crc0JMT3EwRk9cbjUzSzd6ejB2anpSQXlLNEd0Tm9Kem5vV3Rv
15 | a09MbFBFbDdOMnpSekRORlFxWGhCWUNmZ1lLa0lXTEtwRWtaa3ZcbitDbnlxUnVVUFpaSkZ4aklG
16 | N0lLVGpzcDFvRXFEeFNYRm9jdEpzeDZ5Qk1xSDY1UHVZRUNGNE1uNDRjeVpaRTBcbmRjTTZoT3NF
17 | NG5udHBNaWQyZ3FYM2NIa2ZxOTVDZ0RTM0Exb2wvRkFDUUtCZ1FEd0NtOVdidDJGMmNzNlk3T2Zc
18 | bmJva0YxbEkrWnBjeEFPNUhpdHlvdnZHYmNac2RJVHNjTlRPTG0zdHd3VGM1RDRlZi94ZGxHOEtX
19 | WHhCNHVkVXlcbndRandySWpJdXJmNVp1N0FqaFJVbHRUUUxiS29QMklRckpIOEo3Z0FhQnJNZ1hZ
20 | QmEvVG1Nd1dRTnp0MkloKzFcbncxVnZiY3hDZDRueTlZMmZCaEVkODQ4QUJ3S0JnUURjdkg4VjVL
21 | ZFQwbUVGUEc4N25OcWp5Und2UEFTeWFxR1pcblRPZVhGK0RpaDRUVnVyTzhmK3ArM1lzZ1c3RkZK
22 | WnA2QUxNWmRuS0xBa3R5QnpNZ0hrODd2MGRtZHpCUldFNDZcbmhOUTdRak56d3J0WmhmWWt1RzNV
23 | ZzViSDl4emUzYWdLUEd3RGZWQVNXOUNEZGVEOWNTMHRvaHBZUGZyZUQ3dFZcbmxyYTdxUTlabVFL
24 | QmdRRFdEN2d5VURQa3hkRGloVDhPRXJqSEo5VzRLQ3owV213a0NNVzNCbkRYdW53bGdoa0Fcbmtz
25 | RWc0c3MyUmxoRTNvQ0lRaWhPMW02MVFwbWh6N2M4eDhCOVFKL0t3aGlHcFRDTkx5Y2FPRmdZUG1o
26 | d2VmV3VcbkFQYys4dnk0QUI3RitUMlBEd01hdHExamFwM3dQNFlmeGM1T3pJKzNSbnNTMjhBcjdI
27 | RWZVTEJaeVFLQmdIN0VcbjZwK2lMODdkOWNaU0RQZkpmMitzNGpqbVdUUTJOUlNickMyRUV5MUY4
28 | eTNrQ2JGcUxUd3E4K25qZncxZEtUaUVcbkNsZkhSTVU4emlOd3F4WDVFandZQUdPQ2RBZGpsWm5h
29 | Q3lEMVJpTm5aTDFuU0JPU3I5RHF1YitoMWJ6UXc5OE5cbkVHTjRwbkhFdFIycXAwb21vM0dmdFUy
30 | VVd1MEpUK2M1cFR4bFBXR1JBb0dBVGJXOVcyNFl5b1d0TVAyUlIwaVBcbmFhSURFS0xnTTdtVzdF
31 | T0pJbkwydWhMSkZVSUQzNktDR3ZZdWJHRkJ3MzQwT25ZTG96ZjlIaHFoQUxNU0VFRXRcbjNqalNC
32 | VEVFSklVU2xySHJsNWtvRlZkbHk0WnhYc0NsSzVmeFhnSVNFVHRsV2dnL0YrK1hWTDAxOFQxbkVr
33 | WmJcbitzQklqNmJZNDJFVStmdktlWnFEYXdNPVxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVxu
34 | IiwKICAiY2xpZW50X2VtYWlsIjogInJjbG9uZS1sb2NhbEBicmFuY2hiaXQtMjAwNzA5LmlhbS5n
35 | c2VydmljZWFjY291bnQuY29tIiwKICAiY2xpZW50X2lkIjogIjExMDcyNjc4OTk5MTExNTMwNzUx
36 | NyIsCiAgImF1dGhfdXJpIjogImh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi9h
37 | dXRoIiwKICAidG9rZW5fdXJpIjogImh0dHBzOi8vb2F1dGgyLmdvb2dsZWFwaXMuY29tL3Rva2Vu
38 | IiwKICAiYXV0aF9wcm92aWRlcl94NTA5X2NlcnRfdXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFw
39 | aXMuY29tL29hdXRoMi92MS9jZXJ0cyIsCiAgImNsaWVudF94NTA5X2NlcnRfdXJsIjogImh0dHBz
40 | Oi8vd3d3Lmdvb2dsZWFwaXMuY29tL3JvYm90L3YxL21ldGFkYXRhL3g1MDkvcmNsb25lLWxvY2Fs
41 | JTQwYnJhbmNoYml0LTIwMDcwOS5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIKfQo=
42 |
--------------------------------------------------------------------------------
/extras/motd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/motd
--------------------------------------------------------------------------------
/extras/qu_found.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/qu_found.png
--------------------------------------------------------------------------------
/extras/qu_hz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/qu_hz.png
--------------------------------------------------------------------------------
/extras/qu_resolution.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/qu_resolution.png
--------------------------------------------------------------------------------
/extras/testgitflow.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | echo 'test'
3 | echo "::error::Something went wrong"
4 | exit 1
5 |
--------------------------------------------------------------------------------
/extras/udev.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | echo "SUBSYSTEM==\"usb\", ATTR{idVendor}==\"2833\", ATTR{idProduct}==\"0186\", MODE=\"0666\", OWNER=\"$1\"" > /etc/udev/rules.d/51-android.rules
3 | udevadm control --reload-rule
4 |
--------------------------------------------------------------------------------
/extras/update1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/update1.png
--------------------------------------------------------------------------------
/extras/update2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/update2.png
--------------------------------------------------------------------------------
/extras/username.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/username.png
--------------------------------------------------------------------------------
/extras/web.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/web.jpg
--------------------------------------------------------------------------------
/extras/wipnode.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/extras/wipnode.gif
--------------------------------------------------------------------------------
/install:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | clear
3 | printf "\n"
4 | printf "\n"
5 | printf "\n"
6 | echo -e "===================================================================="
7 | echo -e "= Quest(1/2) sideloader for Linux & Mac(OSX) ======================="
8 | echo -e "===================================================================="
9 | echo -e "========================================= by Whitewhidow/BranchBit ="
10 | echo -e "===================================== support:contact@branchbit.be ="
11 | echo -e "============================== https://t.me/whitewhidow_q2_working ="
12 | echo -e "================ www.github.com/whitewhidow/quest-sideloader-linux ="
13 | echo -e "===================================================================="
14 | printf "\n"
15 | case "$OSTYPE" in
16 | linux*) OSTYPE="linux" ;;
17 | darwin*) OSTYPE="mac" ;;
18 | *) echo "unknown OS: $OSTYPE DETECTED" && echo "please submit a ticket om github?" && sleep 30 && exit ;;
19 | esac
20 |
21 |
22 |
23 |
24 | function failed(){
25 | LINE="\n\nInstall seems to have failed with the following reason:\n\n$1.\n\nPlease paste the terminal output to github,\nI will gladly assist! \n"
26 | echo -e "$LINE"
27 | read -p "Press [ENTER] to continue." < "$(tty 0>&2)"
28 | exit 1
29 | }
30 |
31 |
32 |
33 | echo "CHECKING AND INSTALLING DEPENDENCIES:"
34 |
35 |
36 | if [ $OSTYPE == "mac" ]; then
37 |
38 | echo "Checking brew for mac."
39 | if ! command -v brew &> /dev/null; then
40 | echo "-> Please wait while we attempt to install missing 'brew' package. (requires sudo)"
41 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" && echo "Brew installed."
42 | fi
43 | if ! command -v git &> /dev/null; then
44 | failed "Brew could not be installed ?"
45 | else
46 | echo "Brew installed at $(which brew)"
47 | fi
48 |
49 |
50 | echo "Checking xcode command line tools for mac."
51 | echo "test: $(xcode-select -p)"
52 | if ! xcode-select -p 1>/dev/null ; then
53 | echo "-> Please wait while we attempt to install xcode command line tools"
54 | xcode-select --install && echo "Xcode command line tools installed."
55 | fi
56 | if ! xcode-select -p 1>/dev/null ; then
57 | echo 'STILL NOT INSTALLED XCODE SHIT'
58 | exit 1
59 | else
60 | echo "Xcode installed"
61 | fi
62 |
63 |
64 | echo "Checking OSXFUSE for mac."
65 | [ -f "/usr/local/include/osxfuse/fuse.h" ] && OLDFUSE=true
66 | if [[ -z $OLDFUSE ]]; then
67 | brew cask install osxfuse
68 | [ -f "/usr/local/include/osxfuse/fuse.h" ] && NEWFUSE=true
69 | fi
70 |
71 | fi
72 |
73 |
74 |
75 |
76 |
77 |
78 | echo "Checking git installation."
79 | if ! command -v git &> /dev/null; then
80 | echo "-> Please wait while we attempt to install missing 'git' package. (requires sudo)"
81 | (sudo apt install git 2> /dev/null || brew install git ) && echo "Git installed."
82 | fi
83 | if ! command -v git &> /dev/null; then
84 | failed "Git could not be installed ?"
85 | else
86 | echo "Git installed at $(which git)"
87 | fi
88 |
89 |
90 |
91 | echo "Checking dialog installation."
92 | if ! command -v dialog &> /dev/null; then
93 | echo "-> Please wait while we attempt to install missing 'dialog' package. (requires sudo)"
94 | (sudo apt install dialog 2> /dev/null || brew install dialog )
95 | fi
96 | if ! command -v dialog &> /dev/null; then
97 | failed "Dialog could not be installed ?"
98 | else
99 | echo "Dialog installed at $(which dialog)"
100 | fi
101 |
102 |
103 |
104 |
105 | echo "Checking unzip installation."
106 | if ! command -v unzip &> /dev/null; then
107 | echo "-> Please wait while we attempt to install missing 'unzip' package. (requires sudo)"
108 | (sudo apt install unzip 2> /dev/null || brew install unzip )
109 | fi
110 | if ! command -v unzip &> /dev/null; then
111 | failed "Unzip could not be installed ?"
112 | else
113 | echo "Unzip installed at $(which unzip)"
114 | fi
115 |
116 |
117 |
118 | echo "Checking adb."
119 | if ! command -v adb &> /dev/null; then
120 | if [ "$OSTYPE" == "mac" ]; then
121 | brew cask install android-platform-tools
122 | fi
123 |
124 | if [ "$OSTYPE" == "linux" ]; then
125 | echo "-> Please wait while we attempt to install missing 'adb' package. (requires sudo)"
126 | sudo apt install android-tools-adb 2> /dev/null
127 | fi
128 | fi
129 |
130 | if ! command -v adb &> /dev/null; then
131 | failed "Adb could not be installed ?"
132 | else
133 | echo "Adb installed at $(which adb)"
134 | fi
135 |
136 |
137 |
138 |
139 |
140 | echo "Checking aapt."
141 | if ! command -v aapt &> /dev/null; then
142 | if [ "$OSTYPE" == "linux" ]; then
143 | echo "-> Please wait while we attempt to install missing 'aapt' package. (requires sudo)"
144 | sudo apt install android-sdk-build-tools
145 | fi
146 | if [ "$OSTYPE" == "mac" ]; then
147 | echo "-> Please wait while we attempt to install missing 'aapt' package. (requires sudo)"
148 | curl -s https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/main/mac_aapt_lib/aapt -o aapt
149 | #https://dl.androidaapt.com/aapt-macos.zip
150 | chmod +x ./aapt
151 | sudo cp ./aapt /usr/local/bin/
152 | fi
153 | fi
154 |
155 | if ! command -v aapt &> /dev/null; then
156 | failed "Aapt could not be installed ?"
157 | else
158 | echo "Aapt installed at $(which aapt)"
159 | fi
160 |
161 |
162 | echo "Checking pv."
163 | if ! command -v pv &> /dev/null; then
164 | echo "-> Please wait while we attempt to install missing 'pv' package. (requires sudo)"
165 | (sudo apt install pv 2> /dev/null || brew install pv)
166 | fi
167 | if ! command -v pv &> /dev/null; then
168 | failed "pv could not be installed !"
169 | else
170 | echo "pv installed at $(which pv)"
171 | fi
172 |
173 |
174 | echo "Checking wmctrl."
175 | if ! command -v wmctrl &> /dev/null; then
176 | echo "-> Please wait while we attempt to install missing 'wmctrl' package. (requires sudo)"
177 | (sudo apt install wmctrl 2> /dev/null || (brew cask install xquartz && brew install wmctrl))
178 | fi
179 | if ! command -v wmctrl &> /dev/null; then
180 | failed "Wmctrl could not be installed !"
181 | else
182 | echo "Wctrl installed at $(which wmctrl)"
183 | fi
184 |
185 |
186 |
187 |
188 | echo "Checking rclone."
189 | #big sur maybe needs instead : https://rclone.org/install/#macos-installation-from-precompiled-binary-using-curl
190 |
191 | if ! command -v rclone &> /dev/null; then
192 | echo "-> Please wait while we attempt to install missing 'rclone' package. (requires sudo)"
193 | curl --silent https://rclone.org/install.sh | sudo bash > /dev/null
194 | if [ $OSTYPE == "mac" ]; then
195 | brew install rclone
196 | fi
197 | fi
198 | if ! command -v rclone &> /dev/null; then
199 | failed "Rclone could not be installed ?"
200 | else
201 | echo "Rclone installed at $(which rclone)"
202 | RCLONEINSTALLED=true
203 | fi
204 |
205 |
206 |
207 | BRANCH="main"
208 | if [ ! -z "$1" ]; then
209 | BRANCH="$1"
210 | fi
211 | if [[ "$BRANCH" == "local" ]]; then
212 | echo -ne ""
213 | fi
214 |
215 |
216 | echo "Fetching newest version ($BRANCH)."
217 |
218 |
219 | OLDPATH="$PWD"
220 |
221 | if [[ "$BRANCH" == "local" ]]; then
222 | cd $OLDPATH
223 | else
224 | cd /tmp
225 | rm -rf ./quest-sideloader-linux
226 | git clone https://github.com/whitewhidow/quest-sideloader-linux.git
227 | cd quest-sideloader-linux
228 | git checkout $BRANCH
229 | fi
230 |
231 |
232 |
233 | echo "Copying executables to PATH (requires sudo)"
234 | sudo cp ./install /usr/local/bin/sideload-update
235 | sudo cp ./sideloader-config /usr/local/bin/sideloader-config
236 |
237 | sudo cp ./sideload /usr/local/bin/sideload
238 |
239 | sudo cp ./sideload-browser /usr/local/bin/sideload-browser
240 | sudo cp ./sideload-gui /usr/local/bin/sideload-gui
241 | sudo cp ./sideload-mount /usr/local/bin/sideload-mount
242 | sudo cp ./sideload-wifi /usr/local/bin/sideload-wifi
243 |
244 | sudo cp ./sideload-change-settings /usr/local/bin/sideload-change-settings
245 | sudo cp ./sideload-change-username /usr/local/bin/sideload-change-username
246 | sudo cp ./sideload-change-rate /usr/local/bin/sideload-change-rate
247 | sudo cp ./sideload-change-res /usr/local/bin/sideload-change-res
248 |
249 | sudo cp ./sideload-check-updates /usr/local/bin/sideload-check-updates
250 | sudo cp ./sideload-updatebadges /usr/local/bin/sideload-updatebadges
251 |
252 |
253 |
254 | VERSION=$(git rev-parse HEAD)
255 | mkdir -p $HOME/quest-sideloader-linux
256 | touch $HOME/quest-sideloader-linux/sideloader-version.txt
257 | echo "$VERSION" > $HOME/quest-sideloader-linux/sideloader-version.txt
258 |
259 | cd $OLDPATH
260 |
261 |
262 | # IF INSTALL SUCCESS AND INSTALLED NEW OSXFUSE
263 | if [ ! -z $NEWFUSE ]; then
264 | SUCCESS="\n\n -> Install was almost successfull.\n\nHowever your system will need to reboot because (you are one mac osx) and we have just installed OSXFUSE.\n\n -> Please reboot and re-run this installer.\n\n\n"
265 | echo -e "$SUCCESS"
266 | else
267 | # IF INSTALL SUCCESS AND NO NEW OSXFUSE INSTALLED
268 |
269 | [ -z $CI ] && dialog --title "Success" --yesno "\n\n -> Install seems to have been successfull\n\nStart sideload-gui now?\n\n" 0 0
270 | if [ $? = 0 ]; then
271 | exec /usr/local/bin/sideload-gui
272 | fi
273 |
274 | fi
275 |
276 |
277 |
278 |
279 | exit 0
280 |
281 |
282 |
283 |
--------------------------------------------------------------------------------
/mac_aapt_lib/aapt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/71ce76a853f4948f0f59abfa1894c29be98d6986/mac_aapt_lib/aapt
--------------------------------------------------------------------------------
/sideload:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 |
4 | #intro
5 |
6 | osCheck
7 |
8 | #versionCheck
9 |
10 | packageCheck
11 |
12 | while test $# -gt 0; do
13 | case "$1" in
14 | --nogui)
15 | NOGUIFLAG=--nogui
16 | NOGUI=1
17 | shift
18 | ;;
19 | *)
20 | break
21 | ;;
22 | esac
23 | done
24 |
25 |
26 | if [ $# -eq 0 ]; then
27 | echo "No arguments supplied"
28 | exit
29 | else
30 | APKNAME=$1
31 | fi
32 |
33 |
34 | clearLog
35 |
36 |
37 | [[ ! -f $APKNAME ]] && error "$APKNAME is not a valid path to an apk" || ok "APK selected: $APKNAME"
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | #start
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | if [ $OSTYPE == "mac" ]; then
60 | if ! command -v aapt &> /dev/null; then
61 | warning "PLEASE INSTALL aapt from androidaapt.com, WE WILL JUST DOWNLOAD LOCALLY FOR NOW, NO WORRIES !"
62 | info "DOWNLOADING https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/main/mac_aapt_lib/aapt"
63 | curl -s https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/main/mac_aapt_lib/aapt -o aapt
64 | chmod +x ./aapt
65 | AAPT="./aapt"
66 | warning "PLEASE INSTALL aapt from androidaapt.com to avoid this download in the future !!"
67 | fi
68 | fi
69 |
70 |
71 |
72 |
73 |
74 | #device test
75 | deviceCheck
76 |
77 |
78 |
79 | #aapt test and packagename setup
80 | if ([[ "$PWD" == *"/tmp/"* ]] || [[ "$PWD" == *"ftp:host"* ]]); then
81 | MOUNTCOPY=1
82 | info "MOUNT DETECTED, WILL COPY APK TO TEMP DIR, TO SUCCESSFULLY RUN AAPT AGAINST IT."
83 | pv "$APKNAME" > "/tmp/$APKNAME"
84 | PACKAGENAME=$($AAPT dump badging "/tmp/$APKNAME" | grep package:\ name | awk '/package/{gsub("name=|'"'"'",""); print $2}') || echo "DUMP FAILED"
85 | PACKAGEVERSION=$($AAPT dump badging "/tmp/$APKNAME" | grep versionCode= | sed -E "s/.*Code='(.*)' version.*/\1/")
86 | #rm "/tmp/$APKNAME"
87 | else
88 | PACKAGENAME=$($AAPT dump badging "$APKNAME" | grep package:\ name | awk '/package/{gsub("name=|'"'"'",""); print $2}')
89 | PACKAGEVERSION=$($AAPT dump badging "$APKNAME" | grep versionCode= | sed -E "s/.*Code='(.*)' version.*/\1/")
90 | fi
91 |
92 | if [[ "$PACKAGENAME" == "" ]]; then
93 | error "Package info could not be detected via aapt"
94 | dialogLog
95 | exit 0
96 | fi
97 |
98 | ok "Package info detected: $PACKAGENAME, VERSION: $PACKAGEVERSION"
99 | #end aapt test and packagename setup
100 |
101 |
102 |
103 |
104 | # $ADB shell dumpsys package my.package | grep versionName
105 |
106 |
107 |
108 | #obb test
109 | OBBCOUNT=$(find ./ -name "*.pak" -o -name "*.obb" | wc -l)
110 | OBBLOCS=$(find ./ -name "*.pak" -o -name "*.obb" | sed 's/.\/\//.\//')
111 | if [[ $OBBCOUNT -gt 0 ]] ; then
112 | for file in $OBBLOCS; do
113 | [[ ! -e $file ]] && continue
114 | ok "OBB FOUND: $file"
115 | done
116 | fi
117 | #end obb test
118 |
119 |
120 | [ -z $CI ] && OLDVERSION=$($ADB shell dumpsys package $PACKAGENAME)
121 | regex="versionCode=([0-9]*)"
122 | if [[ $OLDVERSION =~ $regex ]]; then
123 | OLDVERSION=${BASH_REMATCH[1]}
124 | if [ "$OLDVERSION" -lt "$PACKAGEVERSION" ]; then
125 | DIRECTION='up'
126 | fi
127 | if [ "$OLDVERSION" -gt "$PACKAGEVERSION" ]; then
128 | DIRECTION='down'
129 | fi
130 | if [ "$OLDVERSION" == "$PACKAGEVERSION" ]; then
131 | DIRECTION='same'
132 | fi
133 | else
134 | DIRECTION='none'
135 | fi
136 |
137 | #versionName=1.3.6.3 | cut -c 13-
138 |
139 |
140 | #ask verification
141 |
142 |
143 |
144 |
145 | #printf "\n"
146 | #echo -e "${BLUE}"
147 |
148 | if [ "$DIRECTION" == 'up' ]; then
149 | LINE="YOU ARE ABOUT TO UPGRADE: [$PACKAGENAME] \n\nFROM VERSION [$OLDVERSION] TO VERSION [$PACKAGEVERSION] \n\nAND COPY $OBBCOUNT OBB/PAK FILES ONTO [$DEVICE] !"
150 | fi
151 | if [ "$DIRECTION" == 'down' ]; then
152 | LINE="YOU ARE ABOUT TO DOWNGRADE: [$PACKAGENAME]\n\nFROM VERSION [$OLDVERSION] TO VERSION [$PACKAGEVERSION] \n\nAND COPY $OBBCOUNT OBB/PAK FILES ONTO [$DEVICE] !"
153 | fi
154 | if [ "$DIRECTION" == 'same' ]; then
155 | LINE="YOU ARE ABOUT TO REINSTALL VERSION [$OLDVERSION] OF [$PACKAGENAME] \n\nAND COPY $OBBCOUNT OBB/PAK FILES ONTO [$DEVICE] !"
156 | fi
157 | if [ "$DIRECTION" == 'none' ]; then
158 | LINE="YOU ARE ABOUT TO INSTALL: [$PACKAGENAME] VERSION [$PACKAGEVERSION] \n\nAND COPY $OBBCOUNT OBB /PAKFILES ONTO [$DEVICE] !"
159 | fi
160 | #echo -e "${GREEN}$LINE\n\n"
161 |
162 |
163 |
164 | dialog --title "Continue?" --yesno "$LINE \nVERIFY THE ABOVE INFO, AND CONFIRM THAT YOU WANT TO PROCEED" 0 0
165 | if [ "$?" == 0 ]; then
166 | echo -ne ''
167 | else
168 | info "Action was canceled by user"
169 | dialogLog
170 | exit 0
171 | fi
172 | #read -p "VERIFY THE ABOVE INFO, AND CLICK ANY KEY TO CONINUE, or CTRL+C to Cancel"
173 | echo ''
174 |
175 |
176 |
177 |
178 |
179 |
180 | printf "\n"
181 | printf "\n"
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 | info "(Re)Installing $PACKAGENAME, (please wait)"
199 | dialog --title "Remove save and cache data?" --yesno "Should we also clear any possible cache and savedata for this package?" 0 0
200 | if [ "$?" == 0 ]; then
201 | [ -z $CI ] && [ -z $LOCAL ] && $ADB uninstall "$PACKAGENAME" > /dev/null
202 | else
203 | [ -z $CI ] && [ -z $LOCAL ] && $ADB uninstall -k "$PACKAGENAME" > /dev/null
204 | fi
205 |
206 | [ -z $CI ] && [ -z $LOCAL ] && $ADB install -g -d "$APKNAME" > /dev/null
207 | ok "(Re)Installed $PACKAGENAME"
208 | #uninstall and install
209 |
210 |
211 |
212 |
213 | #copy and move obb
214 | for file in $OBBLOCS; do
215 | [[ ! -e $file ]] && continue # continue, if file does not exist
216 | HASOBBS=true
217 |
218 | file=$(echo "$file" | sed 's/.\/\//.\//')
219 |
220 | OBBFILE=$(echo "$file" | cut -c 3-)
221 | OBBNAME=$(echo $OBBFILE | awk -F'/' '{print $2}')
222 | OBBNAME=${OBBNAME#/}
223 | OBBFILE=${OBBFILE#/}
224 | OBBFILENAME=$(echo "$OBBFILE" | sed 's:.*/::' | sed 's/.\/\//.\//')
225 |
226 |
227 | info "Removing old OBB file: $OBBFILE (in case previously installed)"
228 | [ -z $CI ] && [ -z $LOCAL ] && $ADB shell rm -r $STORAGE/obb/$PACKAGENAME 2> /dev/null
229 | [ -z $CI ] && [ -z $LOCAL ] && $ADB shell rm -r $STORAGE/Android/obb/$PACKAGENAME 2> /dev/null
230 | ok "Removed old OBB file: $OBBFILE"
231 |
232 | info "Pushing new OBB file: $OBBFILE to $STORAGE/Download/obb/$PACKAGENAME"
233 |
234 | #echo "PACKAGENAME:$PACKAGENAME"
235 | #echo "OBBFILE:$OBBFILE"
236 | #echo "OBBFILENAME:$OBBFILENAME"
237 |
238 | if ([[ "$PWD" == *"/tmp/"* ]] || [[ "$PWD" == *"ftp:host"* ]]); then
239 | info "MOUNT DETECTED, WILL COPY OBB TO TEMP DIR, TO SUCCESSFULLY COPY TO HMD."
240 | pv "$OBBFILE" > "/tmp/$OBBFILENAME"
241 | $ADB push "/tmp/$OBBFILENAME" $STORAGE/Download/obb/$PACKAGENAME/$OBBFILENAME
242 | rm "/tmp/$OBBFILENAME"
243 | else
244 | [ -z $CI ] && [ -z $LOCAL ] && $ADB push "$OBBFILE" $STORAGE/Download/obb/$PACKAGENAME/$OBBFILENAME
245 | fi
246 |
247 | ok "Pushed new OBB file: $OBBFILE"
248 | done
249 |
250 |
251 |
252 | if [[ $HASOBBS == true ]] ; then
253 | info "Moving OBB files to correct directory: $STORAGE/Android/obb/$PACKAGENAME, please be patient, this step has no progress indicator"
254 | #echo "$ADB shell mv $STORAGE/Download/obb/$PACKAGENAME/ $STORAGE/Android/obb/$PACKAGENAME/"
255 | [ -z $CI ] && $ADB shell mv $STORAGE/Download/obb/$PACKAGENAME/ $STORAGE/Android/obb/$PACKAGENAME/
256 | info "Moved OBB files to correct directory"
257 | fi
258 | #end copy and move obb
259 |
260 |
261 |
262 |
263 | ok ""
264 | ok "APK Installed and $OBBCOUNT OBB files copied."
265 | ok "Prompting settings."
266 |
267 | ok ""
268 | ok "DONE, sideload process finished"
269 |
270 | dialogLog
--------------------------------------------------------------------------------
/sideload-browser:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 |
4 | osCheck
5 |
6 | versionCheck
7 |
8 | packageCheck
9 |
10 |
11 |
12 |
13 | while test $# -gt 0; do
14 | case "$1" in
15 | --nogui)
16 | NOGUI=1
17 | shift
18 | ;;
19 | *)
20 | break
21 | ;;
22 | esac
23 | done
24 |
25 |
26 |
27 | SELECTION=$HOME
28 | MOUNTSUCCESS=false
29 | #check already mounted set $MOUNTSUCCESS
30 | if [ "$(ls -A $MNTLOC/ 2>/dev/null)" ]; then
31 | MOUNTSUCCESS=true
32 | SELECTION=$MNTLOC
33 | ok "Drive mounted at: $MNTLOC ($(ls $MNTLOC | wc -l) folders available)\n\n"
34 | fi
35 |
36 |
37 |
38 |
39 | # if not $MOUNTSUCCESS, ask
40 | [ -z $CI ] && [[ $MOUNTSUCCESS == false ]] && dialog --title "Continue?" --yesno "Would you like to mount the drive directly? [!BETA!]" 0 0
41 | if [ $? = 0 ]; then
42 | sideload-mount mount && SELECTION=$MNTLOC
43 | fi
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | [ "$MOUNTSUCCESS" == false ] && EXTRALINE="Having_trouble_mounting_the_drive???"
53 | cd "$SELECTION"
54 | while [ -z $CI ] && true; do
55 | ORISELECTION=$SELECTION
56 | # check empty ?
57 |
58 | let i=0
59 | items=()
60 | gitems=()
61 | VAR=$(ls -t -d ./*/ 2> /dev/null)
62 | echo "$VAR" >/tmp/dirs
63 | while read line; do
64 | let i=$i+1
65 |
66 | [[ "$VAR" != '' ]] && items+=( "$line" )
67 | [[ "$VAR" != '' ]] && [[ "$(echo "$line" | grep -i "$SEARCH")" == *"$line"* ]] && gitems+=("$line" "$line")
68 |
69 | done < /tmp/dirs
70 |
71 | VAR=$(ls -t ./*.apk 2> /dev/null)
72 | echo "$VAR" >/tmp/apks
73 | while read line; do
74 | let i=$i+1
75 | [[ "$VAR" != '' ]] && items+=( "$line" )
76 | [[ "$VAR" != '' ]] && gitems+=("$line" "$line")
77 | done < /tmp/apks
78 |
79 | #dialog --default-item "$OLDRES" --menu "Please choose a resolution:" 0 0 0 "1024" "1024" "1208" "1208" "1536" "1536" "2048" "2048" "2560" "2560" "3072" "3072"
80 |
81 |
82 | #SELECTION=$(dialog --title "List file of directory" --fselect "$SELECTION/" 20 0 --output-fd 1)
83 | SELECTION=$(dialog --extra-button --extra-label "search" --no-tags --default-item "$OLDRES" --title "Current dir: $PWD" --menu "Please select to an APK file to sideload:" 0 0 0 $([ "$MOUNTSUCCESS" == false ] && echo -e "$EXTRALINE") $([ "$MOUNTSUCCESS" == false ] && echo -e "$EXTRALINE") "../ (Directory up)" "../ (Directory up)" "${gitems[@]}" "../ (Directory up)" "../ (Directory up)" --output-fd 1)
84 |
85 | [ $? -eq 3 ] && SEARCH=$(dialog --title "Search" --inputbox "Please enter a searchterm" 0 0 --output-fd 1) && continue
86 |
87 | CLEANFOLDER=$(echo "$SELECTION" | sed -e 's/\\/\\\\/g' -e 's/&/\&/g' -e 's/\</g' -e 's/>/\>/g')
88 |
89 | #echo $SELECTION
90 |
91 | [[ "$SELECTION" == *"trouble_mounting"* ]] && dialog --title "Where are the files?" --msgbox "Please contact me if you are experiencing issues mounting the drive.\n\nhttps://github.com/whitewhidow/quest-sideloader-linux/\nor\nhttps://t.me/whitewhidow" 0 0 && continue
92 |
93 | [[ "$SELECTION" == "../"* ]] && cd ../ && continue
94 |
95 | [[ -z $SELECTION ]] && exec /usr/local/bin/sideload-gui
96 |
97 | [ $? -eq 0 ] && exec /usr/local/bin/sideload-gui
98 |
99 |
100 |
101 |
102 | if [[ "$SELECTION" == *".apk" ]]; then
103 | #zenity --question --width=800 --text="Select $SELECTION and start sideload? ?"
104 | dialog --title "Continue?" --yesno "Select $SELECTION and start sideload? ?" 0 0
105 | if [ $? = 0 ]; then
106 |
107 | /usr/local/bin/sideload "$SELECTION" # | tee /tmp/sideload.log
108 |
109 |
110 | #ISSUETEXT="If any error has occured, please provide me with a copy of the terminal window response at \nhttps://github.com/whitewhidow/quest-sideloader-linux/issues\nor find me at t.me/whitewhidow_q2_working\n\nAnd i will gladly assist you!"
111 | #zenity --info --width=800 --text="The sideloading process has finished, please inspect the output in the terminal!\n\n$ISSUETEXT"
112 |
113 | #echo -e "\nThe sideloading process has finished, please inspect the output above for any errors."
114 | #echo -e "\n$ISSUETEXT"
115 | #echo -e ''
116 | #read -p "Press enter to sideload another app. or CTRL+C to close the sideloader."
117 | exec /usr/local/bin/sideload-gui
118 | continue
119 | else
120 | echo -ne ''
121 | fi
122 | else
123 | #cd "$SELECTION" 2>/dev/null && echo "cd to $SELECTION" || zenity --warning --width=800 --text="$SELECTION is not a valid APK or valid directory"
124 | cd "$SELECTION" 2>/dev/null || dialog --title "Invalid" --msgbox "$SELECTION is not a valid APK or valid directory" 0 0
125 | #SELECTION=$ORISELECTION
126 | fi
127 | done
128 |
129 | exit 0
130 |
--------------------------------------------------------------------------------
/sideload-change-rate:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 |
4 | while test $# -gt 0; do
5 | case "$1" in
6 | --askpackage)
7 | ASKPACKAGE=1
8 | shift
9 | ;;
10 | --packagename*)
11 | PACKAGENAME=`echo $1 | sed -e 's/^[^=]*=//g'`
12 | shift
13 | ;;
14 | --rate*)
15 | RATE=`echo $1 | sed -e 's/^[^=]*=//g'`
16 | shift
17 | ;;
18 | *)
19 | break
20 | ;;
21 | esac
22 | done
23 |
24 |
25 | clearLog
26 | deviceCheck
27 | if [ $ASKPACKAGE ]; then
28 | while [ -z $PACKAGENAME ] && [ -z $CI ]; do
29 | PACKAGENAME=$(dialog --title "Packagename" --inputbox "Please enter a packagename:" 0 0 --output-fd 1)
30 | done
31 | fi
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | HZONE=FALSE
42 | HZTWO=FALSE
43 |
44 | if [ -z $PACKAGENAME ]; then
45 | [ -z $CI ] && OLDRATE=$($ADB shell getprop debug.oculus.refreshRate)
46 | [ -z $CI ] && [ "$OLDRATE" == "72" ] && ok "Current global refreshRate (setprop) detected as \"$OLDRATE\"" && HZONE=TRUE
47 | [ -z $CI ] && [ "$OLDRATE" == "90" ] && ok "Current global refreshRate (setprop) detected as \"$OLDRATE\"" && HZTWO=TRUE
48 | [ -z $CI ] && [ "$OLDRATE" == "" ] && ok "Current global refreshRate (setprop) not set"
49 | fi
50 |
51 | if [ ! -z $PACKAGENAME ]; then
52 |
53 | [ -z $CI ] && [[ "$($ADB shell settings put global 90hz_$PACKAGENAME)" == 0 ]] && ok "$PACKAGENAME refreshRate (putglobal) detected as \"72\"" && HZONE=TRUE
54 | [ -z $CI ] && [[ "$($ADB shell settings put global 90hz_$PACKAGENAME)" == 1 ]] && ok "$PACKAGENAME refreshRate (putglobal) detected as \"90\"" && HZTWO=TRUE
55 | [ -z $CI ] && [[ "$($ADB shell settings put global 90hz_$PACKAGENAME)" == '' ]] && ok "$PACKAGENAME refreshRate (putglobal) not set"
56 |
57 | fi
58 |
59 |
60 |
61 |
62 |
63 |
64 | while [[ $RATE != "72" ]] && [[ $RATE != "90" ]] && [ -z $CI ]; do
65 | RATE=$(dialog --menu "Please choose a refreshrate:" 0 0 0 72 "72 Hertz" 90 "90 Hertz" --output-fd 1)
66 | done
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | if [ -z $PACKAGENAME ]; then
76 | $ADB shell setprop debug.oculus.refreshRate "$RATE"
77 | ok "Current global refreshRate (setprop) changed to \"$RATE\""
78 | fi
79 |
80 |
81 |
82 | if [ ! -z $PACKAGENAME ]; then
83 | [[ $RATE == "72" ]] && $ADB shell settings put global 90hz_$PACKAGENAME 0
84 | [[ $RATE == "90" ]] && $ADB shell settings put global 90hz_$PACKAGENAME 1
85 | ok "$PACKAGENAME refreshRate (putglobal) changed to \"$RATE\""
86 | fi
87 |
88 | dialogLog
--------------------------------------------------------------------------------
/sideload-change-res:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 |
4 | while test $# -gt 0; do
5 | case "$1" in
6 | --askpackage)
7 | ASKPACKAGE=1
8 | shift
9 | ;;
10 | --packagename*)
11 | PACKAGENAME=`echo $1 | sed -e 's/^[^=]*=//g'`
12 | shift
13 | ;;
14 | --res*)
15 | RES=`echo $1 | sed -e 's/^[^=]*=//g'`
16 | shift
17 | ;;
18 | *)
19 | break
20 | ;;
21 | esac
22 | done
23 |
24 |
25 | clearLog
26 | deviceCheck
27 | if [ $ASKPACKAGE ]; then
28 | while [ -z $PACKAGENAME ] && [ -z $CI ]; do
29 | PACKAGENAME=$(dialog --title "Packagename" --inputbox "Please enter a packagename:" 0 0 --output-fd 1)
30 | done
31 | fi
32 |
33 |
34 |
35 | if [ -z $PACKAGENAME ]; then
36 | [ -z $CI ] && OLDRES=$($ADB shell getprop debug.oculus.textureWidth)
37 | [ -z $CI ] && [ "$OLDRES" != "" ] && ok "Current global texturesize (setprop) detected as $OLDRES x $OLDRES"
38 | [ -z $CI ] && [ "$OLDRES" == "" ] && ok "Current global texturesize (setprop) not set"
39 |
40 | fi
41 |
42 | if [ ! -z $PACKAGENAME ]; then
43 | [ -z $CI ] && OLDRES=$($ADB shell get global texture_size_$PACKAGENAME)
44 | [ -z $CI ] && [ "$OLDRES" != "" ] && ok "$PACKAGENAME texturesize (putglobal) detected as $OLDRES x $OLDRES"
45 | [ -z $CI ] && [ "$OLDRES" == "" ] && ok "$PACKAGENAME texturesize (putglobal) not set"
46 |
47 | fi
48 |
49 |
50 |
51 |
52 |
53 |
54 | while [[ -z $RES ]] && [ -z $CI ]; do
55 | RES=$(dialog --default-item "$OLDRES" --menu "Please choose a resolution:" 0 0 0 "1024" "1024" "1208" "1208" "1536" "1536" "2048" "2048" "2560" "2560" "3072" "3072" --output-fd 1)
56 | done
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | if [ -z $PACKAGENAME ]; then
66 | $ADB shell setprop debug.oculus.textureHeight $RES
67 | $ADB shell setprop debug.oculus.textureWidth $RES
68 | ok "Current global resolution (setprop) changed to $RES x $RES"
69 | fi
70 |
71 |
72 |
73 | if [ ! -z $PACKAGENAME ]; then
74 | $ADB shell settings put global texture_size_$PACKAGENAME $RES
75 | ok "$PACKAGENAME resolution changed to $RES x $RES"
76 | fi
77 |
78 | dialogLog
--------------------------------------------------------------------------------
/sideload-change-settings:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 | while test $# -gt 0; do
4 | case "$1" in
5 | --nogui)
6 | NOGUIFLAG=--nogui
7 | NOGUI=1
8 | shift
9 | ;;
10 | *)
11 | break
12 | ;;
13 | esac
14 | done
15 |
16 |
17 | versionCheck
18 |
19 | packageCheck
20 |
21 | deviceCheck
22 |
23 | # while-menu-dialog: a menu driven system information program
24 |
25 | DIALOG_CANCEL=1
26 | DIALOG_ESC=255
27 | HEIGHT=0
28 | WIDTH=0
29 |
30 | display_result() {
31 | dialog --title "$1" \
32 | --no-collapse \
33 | --msgbox "$result" 0 0
34 | }
35 |
36 | while true; do
37 | exec 3>&1
38 | selection=$(dialog \
39 | --backtitle "https://github.com/whitewhidow/quest-sideloader-linux" \
40 | --title "Main Menu" \
41 | --clear \
42 | --cancel-label "Exit" \
43 | --menu "Please select:" $HEIGHT $WIDTH 20 \
44 | "00" "Mount cloud drive " \
45 | "10" "Browse and sideload apps " \
46 | "20" "Switch on wireless ADB " \
47 | "30" "Change global username" \
48 | "40" "Change apk specific username (crack only)" \
49 | "50" "Change global refresh rate" \
50 | "60" "Change apk specific refresh rate (crack only)" \
51 | "70" "Change global resolution" \
52 | "80" "Change apk specific resolution (crack only)" \
53 | 2>&1 1>&3)
54 | exit_status=$?
55 | exec 3>&-
56 | case $exit_status in
57 | $DIALOG_CANCEL)
58 | clear
59 | #echo "Program terminated."
60 | exit
61 | ;;
62 | $DIALOG_ESC)
63 | clear
64 | echo "Program aborted." >&2
65 | exit 1
66 | ;;
67 | esac
68 | case $selection in
69 | 0 )
70 | clear
71 | echo "Program terminated."
72 | ;;
73 | 00 )
74 | clear
75 | sideload-mount mount
76 | read -p 'Press any key to continue ' x
77 | ;;
78 | 10 )
79 | clear
80 | sideload-browser $NOGUIFLAG
81 | read -p 'Press any key to continue ' x
82 | ;;
83 | 20 )
84 | clear
85 | echo "I WILL FINISH THIS WHEN MY CAT STOPS ANNOYING ME"
86 | read -p 'Press any key to continue ' x
87 | ;;
88 | 30 )
89 | clear
90 | sideload-change-username $NOGUIFLAG
91 | read -p 'Press any key to continue ' x
92 | ;;
93 | 40 )
94 | clear
95 | sideload-change-username --askpackage $NOGUIFLAG
96 | read -p 'Press any key to continue ' x
97 | ;;
98 | 50 )
99 | clear
100 | sideload-change-rate $NOGUIFLAG
101 | read -p 'Press any key to continue ' x
102 | ;;
103 | 60 )
104 | clear
105 | sideload-change-rate --askpackage $NOGUIFLAG
106 | read -p 'Press any key to continue ' x
107 | ;;
108 | 70 )
109 | clear
110 | sideload-change-res $NOGUIFLAG
111 | read -p 'Press any key to continue ' x
112 | ;;
113 | 80 )
114 | clear
115 | sideload-change-res --askpackage $NOGUIFLAG
116 | read -p 'Press any key to continue ' x
117 | ;;
118 | 2 )
119 | result=$(df -h)
120 | display_result "Disk Space"
121 | ;;
122 | 3 )
123 | if [[ $(id -u) -eq 0 ]]; then
124 | result=$(du -sh /home/* 2> /dev/null)
125 | display_result "Home Space Utilization (All Users)"
126 | else
127 | result=$(du -sh $HOME 2> /dev/null)
128 | display_result "Home Space Utilization ($USER)"
129 | fi
130 | ;;
131 | esac
132 | done
--------------------------------------------------------------------------------
/sideload-change-username:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 |
4 | while test $# -gt 0; do
5 | case "$1" in
6 | --askpackage)
7 | ASKPACKAGE=1
8 | shift
9 | ;;
10 | --packagename*)
11 | PACKAGENAME=`echo $1 | sed -e 's/^[^=]*=//g'`
12 | shift
13 | ;;
14 | --username*)
15 | NAME=`echo $1 | sed -e 's/^[^=]*=//g'`
16 | shift
17 | ;;
18 | *)
19 | break
20 | ;;
21 | esac
22 | done
23 |
24 |
25 | clearLog
26 |
27 | deviceCheck
28 |
29 |
30 |
31 | if [ $ASKPACKAGE ]; then
32 | while [ -z $PACKAGENAME ] && [ -z $CI ]; do
33 | PACKAGENAME=$(dialog --title "Packagename" --inputbox "Please enter a packagename:" 0 0 --output-fd 1)
34 | done
35 | fi
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | if [ -z $PACKAGENAME ]; then
45 | [ -z $CI ] && OLDUSER=$($ADB shell settings get global username)
46 | ok "Current global username detected as \"$OLDUSER\""
47 | fi
48 |
49 | if [ ! -z $PACKAGENAME ]; then
50 | [ -z $CI ] && OLDUSER=$($ADB shell settings get global username_$PACKAGENAME)
51 | ok "$PACKAGENAME username detected as \"$OLDUSER\""
52 | fi
53 |
54 |
55 |
56 | while [ -z $NAME ] && [ -z $CI ]; do
57 | NAME=$(dialog --title "Username" --inputbox "Please enter a username" 0 0 --output-fd 1)
58 | done
59 |
60 |
61 |
62 |
63 | if [ -z $PACKAGENAME ]; then
64 | [ -z $CI ] && $ADB shell settings put global username $NAME
65 | [ -z $CI ] && $ADB shell "echo '{\"username\":\"$NAME\"}' > /sdcard/user.json"
66 | [ -z $CI ] && $ADB shell "echo '{\"username\":\"$NAME\"}' > /sdcard/qq1091481055.json"
67 | ok "Global username changed to \"$NAME\""
68 | fi
69 |
70 |
71 | if [ ! -z $PACKAGENAME ]; then
72 | [ -z $CI ] && $ADB shell settings put global username_$PACKAGENAME $NAME
73 | ok "$PACKAGENAME username changed to \"$NAME\""
74 | fi
75 |
76 |
77 | dialogLog
--------------------------------------------------------------------------------
/sideload-check-updates:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 |
4 |
5 | ## rclone mount BRANCHBIT:q2_working_confirmed /tmp/mnt &
6 |
7 |
8 | clearLog
9 | deviceCheck
10 |
11 |
12 | if [ "$(ls -A $MNTLOC/ 2>/dev/null)" ]; then
13 | ok "Drive mounted at: $MNTLOC ($(ls $MNTLOC | wc -l) folders available)\n\n"
14 | else
15 | error "Cannot use this function when drive is not mounted"
16 | dialogLog
17 | exit 0
18 | fi
19 |
20 |
21 |
22 | #[ -z $CI ] && zenity --question --width=800 --text="Update and use local versionlist? ($(date -r "/tmp/badgelist.txt" +"%Y-%m-%d %H:%M:%S")) ($(cat "/tmp/badgelist.txt" | wc -l) items)\n\n
23 | # If not we will use the remote one from ($(date -r "$MNTLOC/badgelist.txt" +"%Y-%m-%d %H:%M:%S")) ($(cat "$MNTLOC/badgelist.txt" | wc -l) items) and copy to local."
24 | #if [ $? != 0 ]; then
25 | # [ -z $CI ] && cp $MNTLOC/badgelist.txt "/tmp/badgelist.txt"
26 | #else
27 | # [ -z $CI ] && sideload-updatebadges
28 | # echo -n ''
29 | #fi
30 |
31 | cp $MNTLOC/badgelist.txt "/tmp/badgelist.txt"
32 |
33 |
34 | INSTALLEDPACKAGES="$($ADB shell cmd package list packages -3 | cut -f 2 -d":")"
35 |
36 | info "CHECKING INSTALLED APPS:"
37 | info "=========================="
38 | info "$INSTALLEDPACKAGES"
39 | info "=========================="
40 | info "CHECKING DRIVE FOR UPDATES:"
41 | info "=========================="
42 | IFS='
43 | '
44 | for line in $INSTALLEDPACKAGES; do
45 | PACKAGETOCHECK="$line"
46 | #echo "CHECKING $PACKAGETOCHECK"
47 | OLDVERSION=$($ADB shell dumpsys package $PACKAGETOCHECK)
48 | regex="versionCode=([0-9]*)"
49 |
50 | [[ $OLDVERSION =~ $regex ]]
51 | VERSIONTOCHECK=${BASH_REMATCH[1]}
52 | #echo "${BASH_REMATCH[0]}"
53 | #echo old version: $VERSIONTOCHECK
54 | #echo "$line"
55 |
56 | while read badgeline; do
57 | #echo "checking $line against $PACKAGETOCHECK"
58 | if [[ "$badgeline" == *"$PACKAGETOCHECK"* ]]; then
59 | #echo "MATCH"
60 | APKNAME=${badgeline%%|*}
61 | APKLOC=${badgeline##*|}
62 | APKVERSION=${badgeline#*|}
63 | APKVERSION=${APKVERSION%|*}
64 | #echo "INSTALLED: $APKNAME"
65 | #echo "LOCATION ON DRIVE: $APKLOC"
66 | #echo "VERSION ON DRIVE: $APKVERSION"
67 | if [[ "$APKVERSION" -gt "$VERSIONTOCHECK" ]]; then
68 | ok "[+] NEWER VERSION OF $(echo "$APKNAME") FOUND, CURRENT: ($(echo "$VERSIONTOCHECK")), DRIVE: ($(echo "$APKVERSION"))"
69 | elif [[ "$APKVERSION" -lt "$VERSIONTOCHECK" ]]; then
70 | ok "[-] OLDER VERSION OF $(echo "$APKNAME") FOUND, CURRENT: ($(echo "$VERSIONTOCHECK")), DRIVE: ($(echo "$APKVERSION"))"
71 | elif [[ "$APKVERSION" -eq "$VERSIONTOCHECK" ]]; then
72 | ok "[=] SAME VERSION OF $(echo "$APKNAME") FOUND, CURRENT: ($(echo "$VERSIONTOCHECK")), DRIVE: ($(echo "$APKVERSION"))"
73 | fi
74 | fi
75 | #echo "$line"
76 | done <"/tmp/badgelist.txt"
77 |
78 | done
79 |
80 | info "==========================\n"
81 |
82 | dialogLog
83 | exit 0
--------------------------------------------------------------------------------
/sideload-gui:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 | while test $# -gt 0; do
4 | case "$1" in
5 | --nogui)
6 | NOGUIFLAG=--nogui
7 | NOGUI=1
8 | shift
9 | ;;
10 | *)
11 | break
12 | ;;
13 | esac
14 | done
15 |
16 |
17 | versionCheck
18 | packageCheck
19 |
20 | wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz
21 | clear
22 | intro
23 | sleep 1
24 | clear
25 |
26 | #deviceCheck
27 |
28 | # while-menu-dialog: a menu driven system information program
29 |
30 | DIALOG_CANCEL=1
31 | DIALOG_ESC=255
32 | HEIGHT=0
33 | WIDTH=0
34 |
35 | display_result() {
36 | dialog --title "$1" \
37 | --no-collapse \
38 | --msgbox "$result" 0 0
39 | }
40 |
41 | while true; do
42 | exec 3>&1
43 | selection=$(dialog \
44 | --backtitle "https://github.com/whitewhidow/quest-sideloader-linux" \
45 | --title "Sideloader Toolkit Main Menu" \
46 | --clear \
47 | --no-tags \
48 | --exit-label "Close" \
49 | --cancel-label "Exit" \
50 | --menu "$VERSIONCOMPLAINT Please select:" $HEIGHT $WIDTH 20 \
51 | "00" "Mount cloud drive " \
52 | "05" "Check cloud drive for updated versions " \
53 | "15" "Browse and sideload apps " \
54 | "20" "Switch on wireless ADB " \
55 | "30" "Change global username " \
56 | "40" "Change apk specific username (crack only) " \
57 | "50" "Change global refresh rate " \
58 | "60" "Change apk specific refresh rate (crack only) " \
59 | "70" "Change global resolution " \
60 | "80" "Change apk specific resolution (crack only) " \
61 | 2>&1 1>&3)
62 | exit_status=$?
63 | exec 3>&-
64 | case $exit_status in
65 | $DIALOG_CANCEL)
66 | clear
67 | #echo "Program terminated."
68 | exit
69 | ;;
70 | $DIALOG_ESC)
71 | clear
72 | echo "Program aborted." >&2
73 | exit 1
74 | ;;
75 | esac
76 | case $selection in
77 | 0 )
78 | clear
79 | echo "Program terminated."
80 | ;;
81 | 00 )
82 | clear
83 | sideload-mount mount
84 | ;;
85 | 05 )
86 | clear
87 | sideload-check-updates
88 | ;;
89 | 10 )
90 | clear
91 | sideload-browser
92 | exit
93 | ;;
94 | 15 )
95 | clear
96 | sideload-browser --nogui
97 | ;;
98 | 20 )
99 | clear
100 | sideload-wifi
101 | ;;
102 | 30 )
103 | clear
104 | sideload-change-username
105 | ;;
106 | 40 )
107 | clear
108 | sideload-change-username --askpackage
109 | ;;
110 | 50 )
111 | clear
112 | sideload-change-rate
113 | ;;
114 | 60 )
115 | clear
116 | sideload-change-rate --askpackage
117 | ;;
118 | 70 )
119 | clear
120 | sideload-change-res
121 | ;;
122 | 80 )
123 | clear
124 | sideload-change-res --askpackage
125 | ;;
126 | 2 )
127 | result=$(df -h)
128 | display_result "Disk Space"
129 | ;;
130 | 3 )
131 | if [[ $(id -u) -eq 0 ]]; then
132 | result=$(du -sh /home/* 2> /dev/null)
133 | display_result "Home Space Utilization (All Users)"
134 | else
135 | result=$(du -sh $HOME 2> /dev/null)
136 | display_result "Home Space Utilization ($USER)"
137 | fi
138 | ;;
139 | esac
140 | done
--------------------------------------------------------------------------------
/sideload-mount:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 | osCheck
4 |
5 | if [ ${EUID:-$(id -u)} -eq 0 ]; then
6 | echo "PLEASE DO NOT RUN THIS SCRIPT USING ROOT"
7 | exit 1
8 | fi
9 |
10 | clearLog
11 |
12 | #MOUNTSUCCESS=false # nog gecomment wnat andere check nie in orde
13 | #check already mounted set $MOUNTSUCCESS
14 | if [ "$(ls -A $MNTLOC/ 2>/dev/null)" ]; then
15 | MOUNTSUCCESS=true
16 | ok "Drive mounted at: $MNTLOC ($(ls $MNTLOC | wc -l) folders available)\n\n"
17 | dialogLog
18 | exit 0
19 | fi
20 |
21 |
22 |
23 | info "Starting mount process"
24 |
25 | CLOC="/tmp/c"
26 | KLOC="/tmp/k"
27 | curl --silent https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/main/extras/c -o "$CLOC" > /dev/null
28 | curl --silent https://raw.githubusercontent.com/whitewhidow/quest-sideloader-linux/main/extras/k -o "$KLOC" > /dev/null
29 | cr=`echo $'\n.'`
30 | cr=${cr%.}
31 | C=$(cat $CLOC | base64 --decode)
32 | k=$(cat $KLOC | base64 --decode)
33 | C=$(echo "${C/XXX/$KLOC}" )
34 | $(echo "$C" > $CLOC)
35 | $(echo "$k" > $KLOC)
36 |
37 |
38 | sleep 1
39 |
40 |
41 | if [ $(rclone --config=$CLOC listremotes | wc -l) != "1" ]; then
42 | error "Something is wrong, we cannot seem to find the remote"
43 | error "If you report this at github.com/whitewhidow/quest-sideloader-linux, I will be happy to help"
44 | read -p "$cr$cr Press [ENTER] to continue. $cr$cr" < "$(tty 0>&2)"
45 | exit 1
46 | else
47 | ok "Mount-config detected successfully: $(rclone --config=$CLOC listremotes)"
48 | fi
49 |
50 |
51 | #has path
52 | fusermount -uz $MNTLOC 2> /dev/null
53 | umount $MNTLOC 2> /dev/null
54 | rm -r $MNTLOC > /dev/null 2> /dev/null
55 | mkdir -p $MNTLOC > /dev/null
56 | REM=$(rclone --config=$CLOC listremotes)
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | nohup rclone mount -vv --no-modtime --read-only --config=$CLOC $REM $MNTLOC &
65 |
66 | x=1
67 | while [ $x -le 8 ] && [ -z $MOUNTSUCCESS ]
68 | do
69 | info "Checking if drive is mounted (attempt $x/8)"
70 | sleep 3
71 | x=$(( $x + 1 ))
72 | if [ "$(ls -A $MNTLOC)" ]; then
73 | MOUNTSUCCESS=true
74 | fi
75 | done
76 |
77 |
78 | if [ -z $MOUNTSUCCESS ] && [ $OSTYPE == "mac" ]; then
79 | info "Re-attempting with Cmount for bullshit osx"
80 | nohup rclone cmount -vv --no-modtime --read-only --config=$CLOC $REM $MNTLOC &
81 | x=1
82 | while [ $x -le 8 ] && [ -z $MOUNTSUCCESS ]
83 | do
84 | info "Checking if drive is mounted (attempt $x/8)"
85 | sleep 3
86 | x=$(( $x + 1 ))
87 | if [ "$(ls -A $MNTLOC)" ]; then
88 | MOUNTSUCCESS=true
89 | fi
90 | done
91 | fi
92 |
93 | if [ ! -z $MOUNTSUCCESS ]; then
94 | ok "Drive mounted at: $MNTLOC ($(ls $MNTLOC | wc -l) folders available)\n\n"
95 | else
96 | error "Something is wrong, we cannot seem to mount the drive."
97 | error "If you report this at github.com/whitewhidow/quest-sideloader-linux, I will be happy to help"
98 | dialogLog
99 | exit 1
100 | fi
101 |
102 | dialogLog
103 | exit 0
104 |
--------------------------------------------------------------------------------
/sideload-updatebadges:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 |
4 | ## rclone mount BRANCHBIT:q2_working_confirmed /tmp/mnt &
5 |
6 | ORIBADGES=$(cat "$MNTLOC/badgelist.txt")
7 | echo "loaded $(echo "$ORIBADGES" | wc -l) remote badges"
8 |
9 | echo "copying remote ori badges to local"
10 | cp "$MNTLOC/badgelist.txt" "/tmp/badgelist.txt"
11 |
12 | LOCALBADGES=$(cat "/tmp/badgelist.txt")
13 | echo "loaded $(echo "$LOCALBADGES" | wc -l) local badges"
14 |
15 | echo -ne '' > "/tmp/newbadges.txt"
16 |
17 |
18 | #cd $MNTLOC
19 | COUNT=0
20 | ALLCOUNT=$(ls -l $MNTLOC | grep "^d" | wc -l)
21 |
22 |
23 | for d in $MNTLOC/*; do
24 |
25 | ((COUNT++))
26 | [[ "$COUNT" -lt "3" ]] && continue
27 | PERCENT=$(awk "BEGIN {print int(100/$ALLCOUNT*$COUNT)}")
28 | if [[ -d "$d" ]]; then
29 |
30 |
31 | if [[ "$ORIBADGES" == *"${d##*/}"* ]] && [[ "$ORIBADGES" != "" ]]; then
32 | [ ! -z $CI ] && echo "skipping $d already in badgelist"
33 | continue
34 | else
35 | [ ! -z $CI ] && echo "$d not in badgelist"
36 | fi
37 |
38 |
39 | APKNAME=$(ls -t "$d" | grep -e "./*\.apk") && APKNAME=${APKNAME#/}
40 |
41 | [[ "$APKNAME" == '' ]] && echo -e "\nEMPTY APK NAME ???\n"
42 |
43 | pv "$d/$APKNAME" > "/tmp/$APKNAME"
44 | echo "transfer done, now badging"
45 | BADGING=$(aapt dump badging "/tmp/$APKNAME")
46 | rm "/tmp/$APKNAME"
47 |
48 |
49 | PACKAGEVERSION=$(echo "$BADGING" | grep versionCode= | sed -E "s/.*Code='(.*)' version.*/\1/")
50 | PACKAGENAME=$(echo "$BADGING" | grep package:\ name | awk '/package/{gsub("name=|'"'"'",""); print $2}')
51 | #echo "now writing"
52 | #echo "# synced from without badgefile:$PACKAGENAME ($COUNT / $ALLCOUNT)"
53 |
54 | echo "updating local and remote BADGEFILES"
55 | echo "$PACKAGENAME|$PACKAGEVERSION|${d##*/}/$APKNAME" >>"/tmp/badgelist.txt" 2> /dev/null # to local tmp (user & ci)
56 | echo "$PACKAGENAME|$PACKAGEVERSION|${d##*/}/$APKNAME" >>"/tmp/newbadges.txt" 2> /dev/null # to local new (ci)
57 | echo "$PACKAGENAME|$PACKAGEVERSION|${d##*/}/$APKNAME" >>"$MNTLOC/badgelist.txt" 2> /dev/null # to drive (ww)
58 |
59 | echo "$PERCENT"
60 |
61 |
62 | fi
63 | done
64 |
65 | cp "tmp/badgelist.txt" /tmp/mnt 2>/dev/null # to drive (ww)
66 |
67 | mkdir -p /tmp/badges
68 | cp "/tmp/badgelist.txt" /tmp/badges 2>/dev/null #copy to build folder
69 | cp "/tmp/newbadges.txt" /tmp/badges 2>/dev/null #copy to build folder
70 |
71 |
--------------------------------------------------------------------------------
/sideload-wifi:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | source sideloader-config
3 | osCheck
4 |
5 | clearLog
6 | deviceCheck
7 |
8 |
9 |
10 | if [[ $DEVICE == 192* ]]
11 | then
12 | ok "Already connected via wifi."
13 | $ADB devices
14 | dialogLog
15 | exit 0
16 | fi
17 |
18 |
19 | info "Attempting to find the ip of your quest."
20 | WIFIIP=$($ADB shell ip addr show wlan0 2> /dev/null | grep 'inet ' | cut -d' ' -f6|cut -d/ -f1 | sed '/^$/d') 2> /dev/null
21 |
22 |
23 | if [ -z "$WIFIIP" ]
24 | then
25 | error "Please connect your quest to the same wifi network as this computer."
26 | dialogLog
27 | exit 0
28 | fi
29 |
30 |
31 | info "Found the ip of your quest [$DEVICE]."
32 |
33 | info "Attempting to change adb to TCPIP mode."
34 | WIFISTART=$($ADB tcpip 5555 | tee /dev/tty)
35 |
36 | sleep 2
37 | info "Attempting to connect adb to [$WIFIIP] over TCPIP."
38 | WIFICHECK=$($ADB connect $WIFIIP:5555 | tee /dev/tty)
39 |
40 | if [ "$WIFICHECK" == "connected to $WIFIIP:5555" ]
41 | then
42 | ok "ADB over WIFI established successfully [$WIFIIP]"
43 | ok "You may now unplug your cable"
44 | adb devices
45 | dialogLog
46 | exit 0
47 | else
48 | error "ADB over WIFI could not be established.
49 | dialogLog"
50 | exit 1
51 | fi
52 |
53 | exit 0
54 |
--------------------------------------------------------------------------------
/sideloader-config:
--------------------------------------------------------------------------------
1 | #some settings
2 | ADB=adb # LOCATION TO ADB EXECUTABLE
3 | AAPT=aapt # LOCATION TO AAPT EXECUTABLE
4 | MNTLOC=/tmp/mnt
5 |
6 |
7 |
8 | #some colors
9 | RED='\033[0;31m'
10 | ORANGE='\033[0;40m'
11 | GREEN='\033[0;32m'
12 | PURPLE='\033[0;35m'
13 | BLUE='\033[0;34m'
14 | NC='\033[0m'
15 | HASOBBS=false
16 |
17 |
18 |
19 | #some helper functions
20 | function info(){
21 | echo -e "[INFO ] $1" | tee -a /tmp/sideload-log.txt
22 | }
23 | function ok(){
24 | echo -e "[OK ] $1" | tee -a /tmp/sideload-log.txt
25 | #echo -e "${GREEN}[\u2714 ] $1 ${PURPLE}"
26 | }
27 | function error(){
28 | echo -e "[ERROR] $1" | tee -a /tmp/sideload-log.txt
29 | #echo -e "${RED}[\u2716 ] $1 ${PURPLE}"
30 | }
31 | function warning(){
32 | echo -e "[WARNING] $1" | tee -a /tmp/sideload-log.txt
33 | }
34 |
35 |
36 | function intro() {
37 | printf "\n"
38 | printf "\n"
39 | printf "\n"
40 | echo -e "===================================================================="
41 | echo -e "= Quest(1/2) sideloader for Linux & Mac(OSX) ======================="
42 | echo -e "===================================================================="
43 | echo -e "========================================= by Whitewhidow/BranchBit ="
44 | echo -e "===================================== support:contact@branchbit.be ="
45 | echo -e "============================== https://t.me/whitewhidow_q2_working ="
46 | echo -e "================ www.github.com/whitewhidow/quest-sideloader-linux ="
47 | echo -e "===================================================================="
48 | printf "\n"
49 | }
50 |
51 | function osCheck() {
52 | case "$OSTYPE" in
53 | linux*) OSTYPE="linux" ;;
54 | darwin*) OSTYPE="mac" ;;
55 | *) echo "unknown OS: $OSTYPE DETECTED" && echo "please submit a ticket om github?\n\n" ;;
56 | esac
57 | }
58 |
59 |
60 | #inform the user of updates
61 | function versionCheck() {
62 | #echo "Checking latest version online"
63 | VERSION=$(cat "$HOME/quest-sideloader-linux/sideloader-version.txt")
64 | NEWVERSION=$(git ls-remote https://github.com/whitewhidow/quest-sideloader-linux.git | grep "refs/heads/main" | cut -f 1)
65 |
66 | if [[ "$NEWVERSION" != "$VERSION" ]]; then
67 | VERSIONCOMPLAINT="\nYOU ARE NOT RUNNING THE LATEST STABLE VERSION\nPLEASE TRY UPGRADING IF YOU EXPERIENCE ANY ISSUES (OR TRY THE LATEST DEV)\n\n"
68 | echo -e "$VERSIONCOMPLAINT"
69 | fi
70 | }
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 | function packageCheck() {
79 | command -v adb &> /dev/null && ADBINSTALLED=true
80 | command -v aapt &> /dev/null && AAPTINSTALLED=true
81 | command -v rclone &> /dev/null && RCLONEINSTALLED=true
82 | command -v unzip &> /dev/null && UNZIPINSTALLED=true
83 | if [[ "$ADBINSTALLED" ]] && [[ "$AAPTINSTALLED" ]] && [[ "$RCLONEINSTALLED" ]] && [[ "$UNZIPINSTALLED" ]] && [[ $(which sideload) == *"sideload"* ]] && [[ $(which sideload-gui) == *"sideload-gui"* ]] && [[ $(which sideload-update) == *"sideload-update"* ]]; then
84 | echo -ne ''
85 | else
86 | error 'Not all packages are present, please rerun installer'
87 | fi
88 | }
89 |
90 |
91 | function deviceCheck() {
92 | info "Device detection"
93 | DEVICES=$($ADB devices 2> /dev/null)
94 | DEVICECHECK=$(($(echo "$DEVICES" | grep device | wc -l)-1))
95 | if [ "$DEVICECHECK" == 2 ]
96 | then
97 |
98 | DEVICE=$(echo "$DEVICES" | tail -1 | sed 's/device//' 2> /dev/null)
99 | echo "DEVICE: $DEVICE"
100 | #exit
101 | if [[ "$DEVICE" == *"192"* ]]; then
102 | ADB+=" -e"
103 | else
104 | error "Multiple devices found, make sure there is only ONE adb connection (check using \"adb devices\")."
105 | [ -z $CI ] && [ -z $LOCAL ] && exec /usr/local/bin/sideload-gui
106 | fi
107 |
108 |
109 |
110 | #error "Multiple devices found, make sure there is only ONE adb connection (check using \"adb devices\")."
111 | #[ -z $CI ] && [ -z $LOCAL ] && exec /usr/local/bin/sideload-gui
112 | fi
113 |
114 | if [ "$DEVICECHECK" == 0 ]
115 | then
116 | error "No device connected, make sure there is ONE adb connection (check using \"adb devices\")."
117 | dialogLog
118 | [ -z $CI ] && [ -z $LOCAL ] && exec /usr/local/bin/sideload-gui
119 | fi
120 |
121 | DEVICE=$(echo "$DEVICES" | tail -1 | sed 's/device//' 2> /dev/null)
122 | ok "Device detected: $DEVICE"
123 |
124 | [ -z $CI ] && STORAGE=$($ADB shell 'echo $EXTERNAL_STORAGE' 2> /dev/null)
125 | ok "Storage detected: $STORAGE"
126 | }
127 |
128 | function clearLog(){
129 | echo '' > "/tmp/sideload-log.txt"
130 | clear
131 | }
132 | function dialogLog(){
133 | # --msgbox?
134 | [ -z $CI ] && dialog --title "Results:" --exit-label "OK" --hline "Please confirm the above output" --msgbox "$(cat "/tmp/sideload-log.txt")" 0 0
135 | clear
136 | }
--------------------------------------------------------------------------------