├── .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 | ![example](extras/wipnode.gif) 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') 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 | } --------------------------------------------------------------------------------