rclone_script-install-dialog.sh 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154
  1. #!/bin/bash
  2. # define colors for output
  3. NORMAL="\Zn"
  4. BLACK="\Z0"
  5. RED="\Z1"
  6. GREEN="\Z2"
  7. YELLOW="\Z3\Zb"
  8. BLUE="\Z4"
  9. MAGENTA="\Z5"
  10. CYAN="\Z6"
  11. WHITE="\Z7"
  12. BOLD="\Zb"
  13. REVERSE="\Zr"
  14. UNDERLINE="\Zu"
  15. # global variables
  16. url="https://raw.githubusercontent.com/Jandalf81/rclone_script"
  17. branch="beta"
  18. # configuration variables
  19. remotebasedir=""
  20. shownotifications=""
  21. backtitle="RCLONE_SCRIPT installer"
  22. ##################
  23. # WELCOME DIALOG #
  24. ##################
  25. dialog \
  26. --backtitle "${backtitle}" \
  27. --title "Welcome" \
  28. --ascii-lines \
  29. --colors \
  30. --no-collapse \
  31. --cr-wrap \
  32. --yesno \
  33. "\nThis script will configure RetroPie so that your savefiles and statefiles will be ${YELLOW}synchronized with a remote destination${NORMAL}. Several packages and scripts will be installed, see\n\n https://github.com/Jandalf81/rclone_script/blob/master/ReadMe.md\n\nfor a rundown. In short, any time you ${GREEN}start${NORMAL} or ${RED}stop${NORMAL} a ROM the savefiles and savestates for that ROM will be ${GREEN}down-${NORMAL} and ${RED}uploaded${NORMAL} ${GREEN}from${NORMAL} and ${RED}to${NORMAL} a remote destination. To do so, RetroPie will be configured to put all savefiles and statefiles in distinct directories, seperated from the ROMS directories. If you already have some savefiles there, you will need to ${YELLOW}move them manually${NORMAL} after installation.\n\nAre you sure you wish to continue?" \
  34. 20 90 2>&1 > /dev/tty \
  35. || exit
  36. ####################
  37. # DIALOG FUNCTIONS #
  38. ####################
  39. # Warn the user if they are using the BETA branch
  40. function dialogBetaWarning ()
  41. {
  42. dialog \
  43. --backtitle "${backtitle}" \
  44. --title "Beta Warning" \
  45. --ascii-lines \
  46. --colors \
  47. --no-collapse \
  48. --cr-wrap \
  49. --yesno \
  50. "\n${RED}${UNDERLINE}WARNING!${NORMAL}\n\nYou are about to install a beta version!\nAre you ${RED}REALLY${NORMAL} sure you want to continue?" \
  51. 10 50 2>&1 > /dev/tty \
  52. || exit
  53. }
  54. # Build progress from array $STEPS()
  55. # INPUT
  56. # $steps()
  57. # OUTPUT
  58. # $progress
  59. function buildProgress ()
  60. {
  61. progress=""
  62. for ((i=0; i<=${#steps[*]}; i++))
  63. do
  64. progress="${progress}${steps[i]}\n"
  65. done
  66. }
  67. # Show Progress dialog
  68. # INPUT
  69. # 1 > Percentage to show in dialog
  70. # $backtitle
  71. # $progress
  72. function dialogShowProgress ()
  73. {
  74. local percent="$1"
  75. buildProgress
  76. clear
  77. clear
  78. echo "${percent}" | dialog \
  79. --stdout \
  80. --colors \
  81. --ascii-lines \
  82. --no-collapse \
  83. --cr-wrap \
  84. --backtitle "${backtitle}" \
  85. --title "Installer" \
  86. --gauge "${progress}" 36 90 0 \
  87. 2>&1 > /dev/tty
  88. sleep 1
  89. }
  90. # Show summary dialog
  91. function dialogShowSummary ()
  92. {
  93. # list all remotes and their type
  94. remotes=$(rclone listremotes -l)
  95. # get line wiht RETROPIE remote
  96. retval=$(grep -i "^retropie:" <<< ${remotes})
  97. remoteType="${retval#*:}"
  98. remoteType=$(echo ${remoteType} | xargs)
  99. dialog \
  100. --backtitle "${backtitle}" \
  101. --title "Summary" \
  102. --ascii-lines \
  103. --colors \
  104. --no-collapse \
  105. --cr-wrap \
  106. --yesno \
  107. "\n${GREEN}All done!${NORMAL}\n\nFrom now on, all your saves and states will be synchronized each time you start or stop a ROM.\n\nAll system will put their saves and states in\n Local: \"${YELLOW}~/RetroPie/saves/<SYSTEM>${NORMAL}\"\n Remote: \"${YELLOW}retropie:${remotebasedir}/<SYSTEM>\" (${remoteType})${NORMAL}\nIf you already have some saves in the ROM directories, you need to move them there manually now! Afterward, you should ${red}reboot${NORMAL} your RetroPie. Then, you should start a full sync via\n ${YELLOW}RetroPie / RCLONE_SCRIPT menu / 1 Full sync${NORMAL}\n\nCall\n ${YELLOW}RetroPie / RCLONE_SCRIPT menu / 9 uninstall${NORMAL}\nto remove all or parts of this script.\n\n${RED}Reboot RetroPie now?${NORMAL}" 25 90
  108. case $? in
  109. 0) sudo shutdown -r now ;;
  110. esac
  111. }
  112. ##################
  113. # STEP FUNCTIONS #
  114. ##################
  115. # Initialize array $STEPS()
  116. # OUTPUT
  117. # $steps()
  118. function initSteps ()
  119. {
  120. steps[1]="1. RCLONE"
  121. steps[2]=" 1a. Test for RCLONE binary [ waiting... ]"
  122. steps[3]=" 1b. Get RCLONE binary [ waiting... ]"
  123. steps[4]=" 1c. Test RCLONE remote [ waiting... ]"
  124. steps[5]=" 1d. Create RCLONE remote [ waiting... ]"
  125. steps[6]="2. PNGVIEW"
  126. steps[7]=" 2a. Test for PNGVIEW binary [ waiting... ]"
  127. steps[8]=" 2b. Get PNGVIEW source [ waiting... ]"
  128. steps[9]=" 2c. Compile PNGVIEW [ waiting... ]"
  129. steps[10]="3. IMAGEMAGICK"
  130. steps[11]=" 3a. Test for IMAGEMAGICK [ waiting... ]"
  131. steps[12]=" 3b. Get IMAGEMAGICK [ waiting... ]"
  132. steps[13]="4. RCLONE_SCRIPT"
  133. steps[14]=" 4a. Get RCLONE_SCRIPT files [ waiting... ]"
  134. steps[15]=" 4b. Create RCLONE_SCRIPT menu item [ waiting... ]"
  135. steps[16]=" 4c. Configure RCLONE_SCRIPT [ waiting... ]"
  136. steps[17]="5. RUNCOMMAND"
  137. steps[18]=" 5a. Add call to RUNCOMMAND-ONSTART [ waiting... ]"
  138. steps[19]=" 5b. Add call to RUNCOMMAND-ONEND [ waiting... ]"
  139. steps[20]="6. Local SAVEFILE directory"
  140. steps[21]=" 6a. Check local base directory [ waiting... ]"
  141. steps[22]=" 6b. Check local <SYSTEM> directories [ waiting... ]"
  142. steps[23]="7. Remote SAVEFILE directory"
  143. steps[24]=" 7a. Check remote base directory [ waiting... ]"
  144. steps[25]=" 7b. Check remote <SYSTEM> directories [ waiting... ]"
  145. steps[26]="8. Configure RETROARCH"
  146. steps[27]=" 8a. Set local SAVEFILE directories [ waiting... ]"
  147. steps[28]="9. Finalizing"
  148. steps[29]=" 9a. Save configuration [ waiting... ]"
  149. }
  150. # Update item of $STEPS() and show updated progress dialog
  151. # INPUT
  152. # 1 > Number of step to update
  153. # 2 > New status for step
  154. # 3 > Percentage to show in progress dialog
  155. # $steps()
  156. # OUTPUT
  157. # $steps()
  158. function updateStep ()
  159. {
  160. local step="$1"
  161. local newStatus="$2"
  162. local percent="$3"
  163. local oldline
  164. local newline
  165. # translate and colorize $NEWSTATUS
  166. case "${newStatus}" in
  167. "waiting") newStatus="[ ${NORMAL}WAITING...${NORMAL} ]" ;;
  168. "in progress") newStatus="[ ${NORMAL}IN PROGRESS${NORMAL} ]" ;;
  169. "done") newStatus="[ ${GREEN}DONE${NORMAL} ]" ;;
  170. "found") newStatus="[ ${GREEN}FOUND${NORMAL} ]" ;;
  171. "not found") newStatus="[ ${RED}NOT FOUND${NORMAL} ]" ;;
  172. "created") newStatus="[ ${GREEN}CREATED${NORMAL} ]" ;;
  173. "failed") newStatus="[ ${RED}FAILED${NORMAL} ]" ;;
  174. "skipped") newStatus="[ ${YELLOW}SKIPPED${NORMAL} ]" ;;
  175. *) newStatus="[ ${RED}UNDEFINED${NORMAL} ]" ;;
  176. esac
  177. # search $STEP in $STEPS
  178. for ((i=0; i<${#steps[*]}; i++))
  179. do
  180. if [[ ${steps[i]} =~ .*$step.* ]]
  181. then
  182. # update $STEP with $NEWSTATUS
  183. oldline="${steps[i]}"
  184. oldline="${oldline%%[*}"
  185. newline="${oldline}${newStatus}"
  186. steps[i]="${newline}"
  187. break
  188. fi
  189. done
  190. # show progress dialog
  191. dialogShowProgress ${percent}
  192. }
  193. #######################
  194. # INSTALLER FUNCTIONS #
  195. #######################
  196. # Installer
  197. function installer ()
  198. {
  199. initSteps
  200. dialogShowProgress 0
  201. 1RCLONE
  202. 2PNGVIEW
  203. 3IMAGEMAGICK
  204. 4RCLONE_SCRIPT
  205. 5RUNCOMMAND
  206. 6LocalSAVEFILEDirectory
  207. 7RemoteSAVEFILEDirectory
  208. 8ConfigureRETROARCH
  209. 9Finalize
  210. dialogShowSummary
  211. }
  212. function 1RCLONE ()
  213. {
  214. # 1a. Testing for RCLONE binary
  215. updateStep "1a" "in progress" 0
  216. 1aTestRCLONE
  217. if [[ $? -eq 0 ]]
  218. then
  219. updateStep "1a" "found" 5
  220. updateStep "1b" "skipped" 10
  221. else
  222. updateStep "1a" "not found" 5
  223. # 1b. Getting RCLONE binary
  224. updateStep "1b" "in progress" 5
  225. 1bInstallRCLONE
  226. if [[ $? -eq 0 ]]
  227. then
  228. updateStep "1b" "done" 10
  229. else
  230. updateStep "1b" "failed" 5
  231. exit
  232. fi
  233. fi
  234. # 1c. Testing RCLONE configuration
  235. updateStep "1c" "in progress" 10
  236. 1cTestRCLONEremote
  237. if [[ $? -eq 0 ]]
  238. then
  239. updateStep "1c" "found" 15
  240. updateStep "1d" "skipped" 20
  241. else
  242. updateStep "1c" "not found" 15
  243. # 1d. Create RCLONE remote
  244. updateStep "1d" "in progress" 15
  245. 1dCreateRCLONEremote
  246. updateStep "1d" "done" 20
  247. fi
  248. }
  249. # Checks if RCLONE is installed
  250. # RETURN
  251. # 0 > RCLONE is installed
  252. # 1 > RCLONE is not installed
  253. function 1aTestRCLONE ()
  254. {
  255. printf "$(date +%FT%T%:z):\t1aTestRCLONE\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  256. if [ -f /usr/bin/rclone ]
  257. then
  258. printf "$(date +%FT%T%:z):\t1aTestRCLONE\tFOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  259. return 0
  260. else
  261. printf "$(date +%FT%T%:z):\t1aTestRCLONE\tNOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  262. return 1
  263. fi
  264. }
  265. # Installs RCLONE by download
  266. # RETURN
  267. # 0 > RCLONE has been installed
  268. # 1 > Error while installing RCLONE
  269. function 1bInstallRCLONE ()
  270. {
  271. printf "$(date +%FT%T%:z):\t1bInstallRCLONE\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  272. # TODO get RCLONE for 64bit
  273. { # try
  274. # get binary
  275. wget -P ~ https://downloads.rclone.org/rclone-current-linux-arm.zip --append-output=/home/pi/scripts/rclone_script/rclone_script-install.log &&
  276. unzip ~/rclone-current-linux-arm.zip -d ~ >> ~/scripts/rclone_script/rclone_script-install.log &&
  277. cd ~/rclone-v* &&
  278. # move binary
  279. sudo mv rclone /usr/bin >> ~/scripts/rclone_script/rclone_script-install.log &&
  280. sudo chown root:root /usr/bin/rclone >> ~/scripts/rclone_script/rclone_script-install.log &&
  281. sudo chmod 755 /usr/bin/rclone >> ~/scripts/rclone_script/rclone_script-install.log &&
  282. cd ~ &&
  283. # remove temp files
  284. rm ~/rclone-current-linux-arm.zip >> ~/scripts/rclone_script/rclone_script-install.log &&
  285. rm -r ~/rclone-v* >> ~/scripts/rclone_script/rclone_script-install.log &&
  286. printf "$(date +%FT%T%:z):\t1bInstallRCLONE\tDONE\n" >> ~/scripts/rclone_script/rclone_script-install.log &&
  287. return 0
  288. } || { #catch
  289. printf "$(date +%FT%T%:z):\t1bInstallRCLONE\tERROR\n" >> ~/scripts/rclone_script/rclone_script-install.log &&
  290. # remove temp files
  291. rm ~/rclone-current-linux-arm.zip >> ~/scripts/rclone_script/rclone_script-install.log &&
  292. rm -r ~/rclone-v* >> ~/scripts/rclone_script/rclone_script-install.log &&
  293. return 1
  294. }
  295. }
  296. # Checks if there's a RCLONE remote called RETROPIE
  297. # RETURN
  298. # 0 > remote RETROPIE has been found
  299. # 1 > no remote RETROPIE found
  300. function 1cTestRCLONEremote ()
  301. {
  302. printf "$(date +%FT%T%:z):\t1cTestRCLONEremote\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  303. local remotes=$(rclone listremotes)
  304. local retval=$(grep -i "^retropie:" <<< ${remotes})
  305. if [ "${retval}" == "retropie:" ]
  306. then
  307. printf "$(date +%FT%T%:z):\t1cTestRCLONEremote\tFOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  308. return 0
  309. else
  310. printf "$(date +%FT%T%:z):\t1cTestRCLONEremote\tNOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  311. return 1
  312. fi
  313. }
  314. # Tells the user to create a new RCLONE remote called RETROPIE
  315. # RETURN
  316. # 0 > remote RETROPIE has been created (no other OUTPUT possible)
  317. function 1dCreateRCLONEremote ()
  318. {
  319. printf "$(date +%FT%T%:z):\t1dCreateRCLONEremote\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  320. dialog \
  321. --stdout \
  322. --colors \
  323. --ascii-lines \
  324. --no-collapse \
  325. --cr-wrap \
  326. --backtitle "${backtitle}" \
  327. --title "Installer" \
  328. --msgbox "\nPlease create a new remote within RCLONE now. Name that remote ${RED}retropie${NORMAL}. Please consult the RCLONE documentation for further information:\n https://www.rclone.org\n\nOpening RCLONE CONFIG now..." 20 50 \
  329. 2>&1 > /dev/tty
  330. rclone config
  331. 1cTestRCLONEremote
  332. if [[ $? -eq 1 ]]
  333. then
  334. dialog \
  335. --stdout \
  336. --colors \
  337. --ascii-lines \
  338. --no-collapse \
  339. --cr-wrap \
  340. --backtitle "${backtitle}" \
  341. --title "Installer" \
  342. --msgbox "\nNo remote ${RED}retropie${NORMAL} found.\nPlease try again." 20 50 \
  343. 2>&1 > /dev/tty
  344. 1dCreateRCLONEremote
  345. else
  346. printf "$(date +%FT%T%:z):\t1dCreateRCLONEremote\tFOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  347. return 0
  348. fi
  349. }
  350. function 2PNGVIEW ()
  351. {
  352. # 2a. Testing for PNGVIEW binary
  353. updateStep "2a" "in progress" 20
  354. 2aTestPNGVIEW
  355. if [[ $? -eq 0 ]]
  356. then
  357. updateStep "2a" "found" 25
  358. updateStep "2b" "skipped" 30
  359. updateStep "2c" "skipped" 35
  360. else
  361. updateStep "2a" "not found" 25
  362. # 2b. Getting PNGVIEW source
  363. updateStep "2b" "in progress" 25
  364. 2bGetPNGVIEWsource
  365. if [[ $? -eq 0 ]]
  366. then
  367. updateStep "2b" "done" 30
  368. # 2c. Compiling PNGVIEW
  369. updateStep "2c" "in progress" 30
  370. 2cCompilePNGVIEW
  371. if [[ $? -eq 0 ]]
  372. then
  373. updateStep "2c" "done" 35
  374. else
  375. updateStep "2c" "failed" 30
  376. exit
  377. fi
  378. else
  379. updateStep "2b" "failed" 25
  380. exit
  381. fi
  382. fi
  383. }
  384. # Checks if PNGVIEW is installed
  385. # RETURN
  386. # 0 > PNGVIEW is installed
  387. # 1 > PNGVIEW is not installed
  388. function 2aTestPNGVIEW ()
  389. {
  390. printf "$(date +%FT%T%:z):\t2aTestPNGVIEW\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  391. if [ -f /usr/bin/pngview ]
  392. then
  393. printf "$(date +%FT%T%:z):\t2aTestPNGVIEW\tFOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  394. return 0
  395. else
  396. printf "$(date +%FT%T%:z):\t2aTestPNGVIEW\tNOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  397. return 1
  398. fi
  399. }
  400. # Gets PNGVIEW source
  401. # RETURN
  402. # 0 > source downloaded and unzipped
  403. # 1 > no source downloaded, removed temp files
  404. function 2bGetPNGVIEWsource ()
  405. {
  406. printf "$(date +%FT%T%:z):\t2bGetPNGVIEWsource\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  407. { #try
  408. wget -P ~ https://github.com/AndrewFromMelbourne/raspidmx/archive/master.zip --append-output=/home/pi/scripts/rclone_script/rclone_script-install.log &&
  409. unzip ~/master.zip -d ~ >> ~/scripts/rclone_script/rclone_script-install.log &&
  410. printf "$(date +%FT%T%:z):\t2bGetPNGVIEWsource\tDONE\n" >> ~/scripts/rclone_script/rclone_script-install.log &&
  411. return 0
  412. } || { #catch
  413. printf "$(date +%FT%T%:z):\t2bGetPNGVIEWsource\tERROR\n" >> ~/scripts/rclone_script/rclone_script-install.log &&
  414. rm ~/master.zip >> ~/scripts/rclone_script/rclone_script-install.log &&
  415. sudo rm -r ~/raspidmx-master >> ~/scripts/rclone_script/rclone_script-install.log &&
  416. return 1
  417. }
  418. }
  419. # Compiles PNGVIEW source, moves binaries
  420. # RETURN
  421. # 0 > compiled without errors, moved binaries, removed temp files
  422. # 1 > errors while compiling, removed temp files
  423. function 2cCompilePNGVIEW ()
  424. {
  425. printf "$(date +%FT%T%:z):\t2cCompilePNGVIEW\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  426. { #try
  427. # compile
  428. # cd ~/raspidmx-master &&
  429. make --directory=~/raspidmx-master >> ~/scripts/rclone_script/rclone_script-install.log &&
  430. # move binary files
  431. sudo mv ~/raspidmx-master/pngview/pngview /usr/bin >> ~/scripts/rclone_script/rclone_script-install.log &&
  432. sudo mv ~/raspidmx-master/lib/libraspidmx.so.1 /usr/lib >> ~/scripts/rclone_script/rclone_script-install.log &&
  433. sudo chown root:root /usr/bin/pngview >> ~/scripts/rclone_script/rclone_script-install.log &&
  434. sudo chmod 755 /usr/bin/pngview >> ~/scripts/rclone_script/rclone_script-install.log &&
  435. # remove temp files
  436. rm ~/master.zip >> ~/scripts/rclone_script/rclone_script-install.log &&
  437. sudo rm -r ~/raspidmx-master >> ~/scripts/rclone_script/rclone_script-install.log &&
  438. printf "$(date +%FT%T%:z):\t2cCompilePNGVIEW\tDONE\n" >> ~/scripts/rclone_script/rclone_script-install.log &&
  439. return 0
  440. } || { #catch
  441. printf "$(date +%FT%T%:z):\t2cCompilePNGVIEW\tERROR\n" >> ~/scripts/rclone_script/rclone_script-install.log &&
  442. # remove temp files
  443. rm ~/master.zip >> ~/scripts/rclone_script/rclone_script-install.log &&
  444. sudo rm -r ~/raspidmx-master >> ~/scripts/rclone_script/rclone_script-install.log &&
  445. return 1
  446. }
  447. }
  448. function 3IMAGEMAGICK ()
  449. {
  450. # 3a. Testing for IMAGEMAGICK
  451. updateStep "3a" "in progress" 35
  452. 3aTestIMAGEMAGICK
  453. if [[ $? -eq 0 ]]
  454. then
  455. updateStep "3a" "found" 40
  456. updateStep "3b" "skipped" 45
  457. else
  458. updateStep "3a" "not found" 40
  459. # 3b. Getting IMAGEMAGICK
  460. updateStep "3b" "in progress" 40
  461. 3bInstallIMAGEMAGICK
  462. if [[ $? -eq 0 ]]
  463. then
  464. updateStep "3b" "done" 45
  465. else
  466. updateStep "3b" "failed" 40
  467. fi
  468. fi
  469. }
  470. # Checks is IMAGEMAGICK is installed
  471. # RETURN
  472. # 0 > IMAGEMAGICK is installed
  473. # 1 > IMAGEMAGICK is not installed
  474. function 3aTestIMAGEMAGICK ()
  475. {
  476. printf "$(date +%FT%T%:z):\t3aTestIMAGEMAGICK\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  477. if [ -f /usr/bin/convert ]
  478. then
  479. printf "$(date +%FT%T%:z):\t3aTestIMAGEMAGICK\tFOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  480. return 0
  481. else
  482. printf "$(date +%FT%T%:z):\t3aTestIMAGEMAGICK\tNOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  483. return 1
  484. fi
  485. }
  486. # Installs IMAGEMAGICK via APT-GET
  487. # RETURN
  488. # 0 > IMAGEMAGICK has been installed
  489. # 1 > Error while installing IMAGEMAGICK
  490. function 3bInstallIMAGEMAGICK ()
  491. {
  492. printf "$(date +%FT%T%:z):\t3bInstallIMAGEMAGICK\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  493. sudo apt-get update >> ~/scripts/rclone_script/rclone_script-install.log
  494. sudo apt-get --yes install imagemagick >> ~/scripts/rclone_script/rclone_script-install.log
  495. if [[ $? -eq 0 ]]
  496. then
  497. printf "$(date +%FT%T%:z):\t3bInstallIMAGEMAGICK\tDONE\n" >> ~/scripts/rclone_script/rclone_script-install.log
  498. return 0
  499. else
  500. printf "$(date +%FT%T%:z):\t3bInstallIMAGEMAGICK\tERROR\n" >> ~/scripts/rclone_script/rclone_script-install.log
  501. return 1
  502. fi
  503. }
  504. function 4RCLONE_SCRIPT ()
  505. {
  506. # 4a. Getting RCLONE_SCRIPT
  507. updateStep "4a" "in progress" 45
  508. 4aGetRCLONE_SCRIPT
  509. if [[ $? -eq 0 ]]
  510. then
  511. updateStep "4a" "done" 50
  512. else
  513. updateStep "4a" "failed" 45
  514. exit
  515. fi
  516. # 4b. Creating RCLONE_SCRIPT menu item
  517. updateStep "4b" "in progress" 50
  518. 4bCreateRCLONE_SCRIPTMenuItem
  519. if [[ $? -eq 0 ]]
  520. then
  521. updateStep "4b" "done" 55
  522. else
  523. updateStep "4b" "failed" 50
  524. exit
  525. fi
  526. # 4c. Configure RCLONE_SCRIPT
  527. updateStep "4c" "in progress" 55
  528. 4cConfigureRCLONE_SCRIPT
  529. updateStep "4c" "done" 60
  530. }
  531. # Gets RCLONE_SCRIPT
  532. # RETURN
  533. # 0 > downloaded successfully
  534. # 1 > errors while downloading
  535. function 4aGetRCLONE_SCRIPT ()
  536. {
  537. printf "$(date +%FT%T%:z):\t4aGetRCLONE_SCRIPT\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  538. # create directory if necessary
  539. if [ ! -d ~/scripts/rclone_script ]
  540. then
  541. mkdir ~/scripts/rclone_script >> ~/scripts/rclone_script/rclone_script-install.log
  542. fi
  543. { #try
  544. # get script files
  545. wget -N -P ~/scripts/rclone_script ${url}/${branch}/rclone_script.sh --append-output=/home/pi/scripts/rclone_script/rclone_script-install.log &&
  546. wget -N -P ~/scripts/rclone_script ${url}/${branch}/rclone_script-menu.sh --append-output=/home/pi/scripts/rclone_script/rclone_script-install.log &&
  547. wget -N -P ~/scripts/rclone_script ${url}/${branch}/rclone_script-uninstall.sh --append-output=/home/pi/scripts/rclone_script/rclone_script-install.log &&
  548. # change mod
  549. chmod +x ~/scripts/rclone_script/rclone_script.sh >> ~/scripts/rclone_script/rclone_script-install.log &&
  550. chmod +x ~/scripts/rclone_script/rclone_script-menu.sh >> ~/scripts/rclone_script/rclone_script-install.log &&
  551. chmod +x ~/scripts/rclone_script/rclone_script-uninstall.sh >> ~/scripts/rclone_script/rclone_script-install.log &&
  552. printf "$(date +%FT%T%:z):\t4aGetRCLONE_SCRIPT\tDONE\n" >> ~/scripts/rclone_script/rclone_script-install.log &&
  553. return 0
  554. } || { # catch
  555. printf "$(date +%FT%T%:z):\t4aGetRCLONE_SCRIPT\tERROR\n" >> ~/scripts/rclone_script/rclone_script-install.log &&
  556. return 1
  557. }
  558. }
  559. # Creates a menu item for RCLONE_SCRIPT in RetroPie menu
  560. # RETURN
  561. # 0 > menu item has been found or created
  562. # 1 > error while creating menu item
  563. function 4bCreateRCLONE_SCRIPTMenuItem ()
  564. {
  565. printf "$(date +%FT%T%:z):\t4bCreateRCLONE_SCRIPTMenuItem\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  566. # move menu script
  567. mv --force ~/scripts/rclone_script/rclone_script-menu.sh ~/RetroPie/retropiemenu >> ~/scripts/rclone_script/rclone_script-install.log
  568. # check if menu item exists
  569. if [[ $(xmlstarlet sel -t -v "count(/gameList/game[path='./rclone_script-menu.sh'])" ~/.emulationstation/gamelists/retropie/gamelist.xml) -eq 0 ]]
  570. then
  571. printf "$(date +%FT%T%:z):\t4bCreateRCLONE_SCRIPTMenuItem\tNOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  572. # sed -i "/<\/gameList>/c\\\\t<game>\n\t\t<path>.\/rclone_script-menu.sh<\/path>\n\t\t<name>RCLONE_SCRIPT menu<\/name>\n\t\t<desc>Customize RCLONE_SCRIPT, start a full sync, uninstall RCLONE_SCRIPT<\/desc>\n\t\t<image></image>\n\t<\/game>\n<\/gameList>" ~/.emulationstation/gamelists/retropie/gamelist.xml
  573. xmlstarlet ed \
  574. --inplace \
  575. --subnode "/gameList" --type elem -n game -v "" \
  576. --subnode "/gameList/game[last()]" --type elem -n path -v "./rclone_script-menu.sh" \
  577. --subnode "/gameList/game[last()]" --type elem -n name -v "RCLONE_SCRIPT menu" \
  578. --subnode "/gameList/game[last()]" --type elem -n desc -v "Launches a menu allowing you to start a full sync, configure RCLONE_SCRIPT or even uninstall it" \
  579. ~/.emulationstation/gamelists/retropie/gamelist.xml
  580. if [[ $? -eq 0 ]]
  581. then
  582. printf "$(date +%FT%T%:z):\t4bCreateRCLONE_SCRIPTMenuItem\tCREATED\n" >> ~/scripts/rclone_script/rclone_script-install.log
  583. return 0
  584. else
  585. printf "$(date +%FT%T%:z):\t4bCreateRCLONE_SCRIPTMenuItem\tERROR\n" >> ~/scripts/rclone_script/rclone_script-install.log
  586. return 1
  587. fi
  588. else
  589. printf "$(date +%FT%T%:z):\t4bCreateRCLONE_SCRIPTMenuItem\tFOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  590. return 0
  591. fi
  592. }
  593. # Gets user input to configure RCLONE_SCRIPT
  594. function 4cConfigureRCLONE_SCRIPT ()
  595. {
  596. printf "$(date +%FT%T%:z):\t4cConfigureRCLONE_SCRIPT\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  597. remotebasedir=$(dialog \
  598. --stdout \
  599. --colors \
  600. --ascii-lines \
  601. --no-collapse \
  602. --cr-wrap \
  603. --backtitle "${backtitle}" \
  604. --title "Remote base directory" \
  605. --inputbox "\nPlease name the directory which will be used as your ${YELLOW}remote base directory${NORMAL}. If necessary, this directory will be created.\n\nExamples:\n* RetroArch\n* mySaves/RetroArch\n\n" 18 40 "RetroArch"
  606. )
  607. dialog \
  608. --stdout \
  609. --colors \
  610. --ascii-lines \
  611. --no-collapse \
  612. --cr-wrap \
  613. --backtitle "${backtitle}" \
  614. --title "Notifications" \
  615. --yesno "\nDo you wish to see ${YELLOW}notifications${NORMAL} whenever RCLONE_SCRIPT is synchronizing?" 18 40
  616. case $? in
  617. 0) shownotifications="TRUE" ;;
  618. 1) shownotifications="FALSE" ;;
  619. *) shownotifications="FALSE" ;;
  620. esac
  621. printf "$(date +%FT%T%:z):\t4cConfigureRCLONE_SCRIPT\tDONE\n" >> ~/scripts/rclone_script/rclone_script-install.log
  622. }
  623. function 5RUNCOMMAND ()
  624. {
  625. # 5a. RUNCOMMAND-ONSTART
  626. updateStep "5a" "in progress" 60
  627. 5aRUNCOMMAND-ONSTART
  628. case $? in
  629. 0) updateStep "5a" "found" 65 ;;
  630. 1) updateStep "5a" "created" 65 ;;
  631. esac
  632. # 5b. RUNCOMMAND-ONEND
  633. updateStep "5b" "in progress" 65
  634. 5aRUNCOMMAND-ONEND
  635. case $? in
  636. 0) updateStep "5b" "found" 70 ;;
  637. 1) updateStep "5b" "created" 70 ;;
  638. esac
  639. }
  640. # Checks call of RCLONE_SCRIPT by RUNCOMMAND-ONSTART
  641. # RETURNS
  642. # 0 > call found
  643. # 1 > call created
  644. function 5aRUNCOMMAND-ONSTART ()
  645. {
  646. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONSTART\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  647. # check if RUNCOMMAND-ONSTART.sh exists
  648. if [ -f /opt/retropie/configs/all/runcommand-onstart.sh ]
  649. then
  650. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONSTART\tFILE FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  651. # check if there's a call to RCLONE_SCRIPT
  652. if grep -Fq "~/scripts/rclone_script/rclone_script.sh" /opt/retropie/configs/all/runcommand-onstart.sh
  653. then
  654. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONSTART\tCALL FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  655. return 0
  656. else
  657. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONSTART\tCALL NOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  658. # add call
  659. echo "~/scripts/rclone_script/rclone_script.sh \"down\" \"\$1\" \"\$2\" \"\$3\" \"\$4\"" >> /opt/retropie/configs/all/runcommand-onstart.sh
  660. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONSTART\tCALL CREATED\n" >> ~/scripts/rclone_script/rclone_script-install.log
  661. return 1
  662. fi
  663. else
  664. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONSTART\tFILE NOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  665. echo "#!/bin/bash" > /opt/retropie/configs/all/runcommand-onstart.sh
  666. echo "~/scripts/rclone_script/rclone_script.sh \"down\" \"\$1\" \"\$2\" \"\$3\" \"\$4\"" >> /opt/retropie/configs/all/runcommand-onstart.sh
  667. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONSTART\tFILE CREATED\n" >> ~/scripts/rclone_script/rclone_script-install.log
  668. return 1
  669. fi
  670. }
  671. # Checks call of RCLONE_SCRIPT by RUNCOMMAND-ONEND
  672. # RETURNS
  673. # 0 > call found
  674. # 1 > call created
  675. function 5aRUNCOMMAND-ONEND ()
  676. {
  677. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONEND\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  678. # check if RUNCOMMAND-ONEND.sh exists
  679. if [ -f /opt/retropie/configs/all/runcommand-onend.sh ]
  680. then
  681. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONEND\tFILE FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  682. # check if there's a call to RCLONE_SCRIPT
  683. if grep -Fq "~/scripts/rclone_script/rclone_script.sh" /opt/retropie/configs/all/runcommand-onend.sh
  684. then
  685. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONEND\tCALL FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  686. return 0
  687. else
  688. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONEND\tCALL NOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  689. # add call
  690. echo "~/scripts/rclone_script/rclone_script.sh \"up\" \"\$1\" \"\$2\" \"\$3\" \"\$4\"" >> /opt/retropie/configs/all/runcommand-onend.sh
  691. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONEND\tCALL CREATED\n" >> ~/scripts/rclone_script/rclone_script-install.log
  692. return 1
  693. fi
  694. else
  695. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONEND\tFILE NOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  696. echo "#!/bin/bash" > /opt/retropie/configs/all/runcommand-onend.sh
  697. echo "~/scripts/rclone_script/rclone_script.sh \"up\" \"\$1\" \"\$2\" \"\$3\" \"\$4\"" >> /opt/retropie/configs/all/runcommand-onend.sh
  698. printf "$(date +%FT%T%:z):\t5aRUNCOMMAND-ONEND\tFILE CREATED\n" >> ~/scripts/rclone_script/rclone_script-install.log
  699. return 1
  700. fi
  701. }
  702. function 6LocalSAVEFILEDirectory ()
  703. {
  704. # 6a. Test for local SAVEFILE directory
  705. updateStep "6a" "in progress" 70
  706. 6aCheckLocalBaseDirectory
  707. case $? in
  708. 0) updateStep "6a" "found" 75 ;;
  709. 1) updateStep "6a" "created" 75 ;;
  710. esac
  711. # 6b. Check local <SYSTEM> directories
  712. updateStep "6b" "in progress" 75
  713. 6bCheckLocalSystemDirectories
  714. case $? in
  715. 0) updateStep "6b" "found" 80 ;;
  716. 1) updateStep "6b" "created" 80 ;;
  717. esac
  718. }
  719. # Checks if the local base SAVEFILE directory exists
  720. # RETURN
  721. # 0 > directory exists
  722. # 1 > directory has been created
  723. function 6aCheckLocalBaseDirectory ()
  724. {
  725. printf "$(date +%FT%T%:z):\t6aCheckLocalBaseDirectory\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  726. # check if local base dir exists
  727. if [ -d ~/RetroPie/saves ]
  728. then
  729. printf "$(date +%FT%T%:z):\t6aCheckLocalBaseDirectory\tFOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  730. return 0
  731. else
  732. printf "$(date +%FT%T%:z):\t6aCheckLocalBaseDirectory\tNOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  733. mkdir ~/RetroPie/saves
  734. printf "$(date +%FT%T%:z):\t6aCheckLocalBaseDirectory\tCREATED\n" >> ~/scripts/rclone_script/rclone_script-install.log
  735. return 1
  736. fi
  737. }
  738. # Checks if the local system specific directories exists
  739. # RETURN
  740. # 0 > all found
  741. # 1 > created at least one
  742. function 6bCheckLocalSystemDirectories ()
  743. {
  744. printf "$(date +%FT%T%:z):\t6bCheckLocalSystemDirectories\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  745. local retval=0
  746. # for each directory in ROMS directory...
  747. for directory in ~/RetroPie/roms/*
  748. do
  749. system="${directory##*/}"
  750. # check if ROMS directory is a real directory and not a SymLink
  751. if [ ! -L ~/RetroPie/roms/${system} ]
  752. then
  753. # check if same directory exists in SAVES, create if necessary
  754. if [ -d ~/RetroPie/saves/${system} ]
  755. then
  756. printf "$(date +%FT%T%:z):\t6bCheckLocalSystemDirectories\tFOUND directory ${system}\n" >> ~/scripts/rclone_script/rclone_script-install.log
  757. else
  758. mkdir ~/RetroPie/saves/${system}
  759. printf "$(date +%FT%T%:z):\t6bCheckLocalSystemDirectories\tCREATED directory ${system}\n" >> ~/scripts/rclone_script/rclone_script-install.log
  760. retval=1
  761. fi
  762. else
  763. # check if same SymLink exists in SAVES, create if necessary
  764. if [ -L ~/RetroPie/saves/${system} ]
  765. then
  766. printf "$(date +%FT%T%:z):\t6bCheckLocalSystemDirectories\tFOUND symlink ${system}\n" >> ~/scripts/rclone_script/rclone_script-install.log
  767. else
  768. ln -s $(readlink ~/RetroPie/roms/${system}) ~/RetroPie/saves/${system}
  769. printf "$(date +%FT%T%:z):\t6bCheckLocalSystemDirectories\tCREATED symlink ${system}\n" >> ~/scripts/rclone_script/rclone_script-install.log
  770. retval=1
  771. fi
  772. fi
  773. done
  774. return ${retval}
  775. }
  776. function 7RemoteSAVEFILEDirectory ()
  777. {
  778. # 7a. Check remote base directory
  779. updateStep "7a" "in progress" 80
  780. 7aCheckRemoteBaseDirectory
  781. case $? in
  782. 0) updateStep "7a" "found" 85 ;;
  783. 1) updateStep "7a" "created" 85 ;;
  784. 255) updateStep "7a" "failed" 80 ;;
  785. esac
  786. # 7b. Check remote <system> directories
  787. updateStep "7b" "in progress" 85
  788. 7bCheckRemoteSystemDirectories
  789. case $? in
  790. 0) updateStep "7b" "found" 90 ;;
  791. 1) updateStep "7b" "created" 90 ;;
  792. 255) updateStep "7b" "failed" 85 ;;
  793. esac
  794. }
  795. # Checks if the remote base SAVEFILE directory exists
  796. # RETURN
  797. # 0 > directory exists
  798. # 1 > directory has been created
  799. # 255 > error while creating directory
  800. function 7aCheckRemoteBaseDirectory ()
  801. {
  802. printf "$(date +%FT%T%:z):\t7aCheckRemoteBaseDirectory\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  803. # list all directories from remote
  804. remoteDirs=$(rclone lsf --dirs-only -R retropie:)
  805. # for each line...
  806. while read path
  807. do
  808. if [ "${path}" == "${remotebasedir}/" ]
  809. then
  810. printf "$(date +%FT%T%:z):\t7aCheckRemoteBaseDirectory\tFOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  811. return 0
  812. fi
  813. done <<< "${remoteDirs}"
  814. # if there has been no match...
  815. printf "$(date +%FT%T%:z):\t7aCheckRemoteBaseDirectory\tNOT FOUND\n" >> ~/scripts/rclone_script/rclone_script-install.log
  816. rclone mkdir retropie:"${remotebasedir}" >> ~/scripts/rclone_script/rclone_script-install.log
  817. case $? in
  818. 0) printf "$(date +%FT%T%:z):\t7aCheckRemoteBaseDirectory\tCREATED\n" >> ~/scripts/rclone_script/rclone_script-install.log; return 1 ;;
  819. *) printf "$(date +%FT%T%:z):\t7aCheckRemoteBaseDirectory\tERROR\n" >> ~/scripts/rclone_script/rclone_script-install.log; return 255 ;;
  820. esac
  821. }
  822. # Checks if the remote system specific directories exist
  823. # RETURN
  824. # 0 > all found
  825. # 1 > created at least one
  826. # 255 > error while creating directory
  827. function 7bCheckRemoteSystemDirectories ()
  828. {
  829. printf "$(date +%FT%T%:z):\t7bCheckRemoteSystemDirectories\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  830. local retval=0
  831. local output
  832. # list all directories in $REMOTEBASEDIR from remote
  833. remoteDirs=$(rclone lsf --dirs-only -R retropie:"${remotebasedir}")
  834. # for each directory in ROMS directory...
  835. for directory in ~/RetroPie/roms/*
  836. do
  837. system="${directory##*/}"
  838. # use grep to search $SYSTEM in $DIRECTORIES
  839. output=$(grep "${system}/" -nx <<< "${remoteDirs}")
  840. if [ "${output}" = "" ]
  841. then
  842. # create system dir
  843. rclone mkdir retropie:"${remotebasedir}/${system}"
  844. if [[ $? -eq 0 ]]
  845. then
  846. printf "$(date +%FT%T%:z):\t7bCheckRemoteSystemDirectories\tCREATED ${system}\n" >> ~/scripts/rclone_script/rclone_script-install.log
  847. # put note if local directory is a symlink
  848. if [ -L ~/RetroPie/saves/${system} ]
  849. then
  850. printf "ATTENTION\r\n\r\nThis directory will not be used! This is just a symlink.\r\nPlace your savefiles in\r\n\r\n$(readlink ~/RetroPie/roms/${system})\r\n\r\ninstead." > ~/scripts/rclone_script/readme.txt
  851. rclone copy ~/scripts/rclone_script/readme.txt retropie:"${remotebasedir}/${system}/"
  852. rm ~/scripts/rclone_script/readme.txt
  853. fi
  854. retval=1
  855. else
  856. printf "$(date +%FT%T%:z):\t7bCheckRemoteSystemDirectories\tERROR\n" >> ~/scripts/rclone_script/rclone_script-install.log
  857. return 255
  858. fi
  859. else
  860. printf "$(date +%FT%T%:z):\t7bCheckRemoteSystemDirectories\tFOUND ${system}\n" >> ~/scripts/rclone_script/rclone_script-install.log
  861. fi
  862. done
  863. return ${retval}
  864. }
  865. function 8ConfigureRETROARCH ()
  866. {
  867. # 8a. Setting local SAVEFILE directory
  868. updateStep "8a" "in progress" 90
  869. 8aSetLocalSAVEFILEDirectory
  870. updateStep "8a" "done" 95
  871. }
  872. # Sets parameters in all system specific configuration files
  873. function 8aSetLocalSAVEFILEDirectory ()
  874. {
  875. printf "$(date +%FT%T%:z):\t8aSetLocalSAVEFILEDirectory\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  876. local retval
  877. # for each directory...
  878. for directory in /opt/retropie/configs/*
  879. do
  880. system="${directory##*/}"
  881. # skip directory ALL
  882. if [ "${system}" = "all" ]
  883. then
  884. continue
  885. fi
  886. # test if there's a RETROARCH.CFG
  887. if [ -f "${directory}/retroarch.cfg" ]
  888. then
  889. printf "$(date +%FT%T%:z):\t8aSetLocalSAVEFILEDirectory\tFOUND retroarch.cfg FOR ${system}\n" >> ~/scripts/rclone_script/rclone_script-install.log
  890. # test file for SAVEFILE_DIRECTORY
  891. retval=$(grep -i "^savefile_directory = " ${directory}/retroarch.cfg)
  892. if [ ! "${retval}" = "" ]
  893. then
  894. printf "$(date +%FT%T%:z):\t8aSetLocalSAVEFILEDirectory\tREPLACED savefile_directory\n" >> ~/scripts/rclone_script/rclone_script-install.log
  895. # replace existing parameter
  896. sed -i "/^savefile_directory = /c\savefile_directory = \"~/RetroPie/saves/${system}\"" ${directory}/retroarch.cfg
  897. else
  898. printf "$(date +%FT%T%:z):\t8aSetLocalSAVEFILEDirectory\tADDED savefile_directory\n" >> ~/scripts/rclone_script/rclone_script-install.log
  899. # create new parameter above "#include..."
  900. sed -i "/^#include \"\/opt\/retropie\/configs\/all\/retroarch.cfg\"/c\savefile_directory = \"~\/RetroPie\/saves\/${system}\"\n#include \"\/opt\/retropie\/configs\/all\/retroarch.cfg\"" ${directory}/retroarch.cfg
  901. fi
  902. # test file for SAVESTATE_DIRECTORY
  903. retval=$(grep -i "^savestate_directory = " ${directory}/retroarch.cfg)
  904. if [ ! "${retval}" = "" ]
  905. then
  906. printf "$(date +%FT%T%:z):\t8aSetLocalSAVEFILEDirectory\tREPLACED savestate_directory\n" >> ~/scripts/rclone_script/rclone_script-install.log
  907. # replace existing parameter
  908. sed -i "/^savestate_directory = /c\savestate_directory = \"~/RetroPie/saves/${system}\"" ${directory}/retroarch.cfg
  909. else
  910. printf "$(date +%FT%T%:z):\t8aSetLocalSAVEFILEDirectory\tADDED savestate_directory\n" >> ~/scripts/rclone_script/rclone_script-install.log
  911. # create new parameter above "#include..."
  912. sed -i "/^#include \"\/opt\/retropie\/configs\/all\/retroarch.cfg\"/c\savestate_directory = \"~\/RetroPie\/saves\/${system}\"\n#include \"\/opt\/retropie\/configs\/all\/retroarch.cfg\"" ${directory}/retroarch.cfg
  913. fi
  914. fi
  915. done
  916. printf "$(date +%FT%T%:z):\t8aSetLocalSAVEFILEDirectory\tDONE\n" >> ~/scripts/rclone_script/rclone_script-install.log
  917. }
  918. function 9Finalize ()
  919. {
  920. # 9a. Saving configuration
  921. updateStep "9a" "in progress" 95
  922. 9aSaveConfiguration
  923. updateStep "9a" "done" 100
  924. }
  925. # Saves the configuration of RCLONE_SCRIPT
  926. function 9aSaveConfiguration ()
  927. {
  928. printf "$(date +%FT%T%:z):\t9aSaveConfiguration\tSTART\n" >> ~/scripts/rclone_script/rclone_script-install.log
  929. echo "remotebasedir=${remotebasedir}" > ~/scripts/rclone_script/rclone_script.ini
  930. echo "shownotifications=${shownotifications}" >> ~/scripts/rclone_script/rclone_script.ini
  931. echo "logfile=~/scripts/rclone_script/rclone_script.log" >> ~/scripts/rclone_script/rclone_script.ini
  932. echo "debug=0" >> ~/scripts/rclone_script/rclone_script.ini
  933. printf "$(date +%FT%T%:z):\t9aSaveConfiguration\tDONE\n" >> ~/scripts/rclone_script/rclone_script-install.log
  934. }
  935. ########
  936. # MAIN #
  937. ########
  938. if [ "${branch}" == "beta" ]
  939. then
  940. dialogBetaWarning
  941. fi
  942. installer