v0.3.0 - Now moves/links email. New doctor diagnostics.
[webos-internals:mvapp.git] / mvapp
1 #!/bin/sh
2
3 # This code is open for re-use with no restrictions.  xorg
4 # Intent is for someone to port to or use this for a webOS app.
5 # Homepage: http://www.webos-internals.org/wiki/Solution_to_App_Catalog_Installation_Limit
6 #
7
8 #-------------------------------------------------------------------------#
9 # versions:
10 # 0.1.0 - original (xorg)
11 # 0.1.1 - added unlink and clean functions (daventx)
12 # 0.1.2 - added bulkmv function, allows moving many apps (xorg)
13 # 0.1.3 - added option for tar backups (xorg)
14 # 0.1.4 - added listmoved function to show apps already moved (xorg)
15 # 0.1.5 - added restoreall function, couple cleanup items (xorg)
16 # 0.1.6 - fixed to show usage if no appname supplied to link/unlink (xorg)
17 # 0.1.7 - added cleanexit (w/mount ro /) 
18 #       - added exit code documentation for javascripts calling this (xorg)
19 # 0.2.0 - will not move apps that would have attribute issues (xorg)
20 #       - will not move apps that have no json file
21 #       - improved error handling, improved listing shows actual app names
22 # 0.2.1 - minor update, proper cleanup if link command doesn't move app
23 #       - don't create tar backup until testing if app is movable (xorg)
24 # 0.2.2 - broke with Fair Dinkum - resolved by explicit path for du (nt4cats)
25 #       - will not move an app if it is running, thx to greg roll
26 #       - faster listmoved apps (but no size), error reporting cleanup (xorg)
27 # 0.2.3 - new trap method for link cp errors ; version reporting in usage 
28 #       - doesn't allow to use mvapp if USB drive is mounted to computer (xorg)
29 # 0.2.4 - turned off TAR backups by default, added 'mvapp info'
30 #       - added two hidden functions (see mvapp homepage for details)
31 #       - 'mvapp ftr' - force tar restore, 'mvapp rtb' - remove tar backups
32 # 0.2.5 - better screen formatting for Terminal app, added shortcuts
33 #       - added /var usage before/after move (xorg)
34 # 0.3.0 - added 'var doctor' to check storage usage, 
35 #       - added linking for email/attachments  (xorg)
36 #-------------------------------------------------------------------------#
37
38 #-------------------------------------------------------------------------#
39 # variables: these are globally available to all functions
40 #-------------------------------------------------------------------------#
41 COMMAND=$1
42 APP=$2
43 VERSION=0.3.0
44 MEDIA=/media/internal/.apps
45 VAR=/var/usr/palm/applications  # Do not change this
46
47 # TAR backups are no longer needed, recommend setting to 0
48 BACKUP=0  # set to 1 for tar backups, 0 to disable
49 BACKUPDIR=/media/internal/.appbackups
50
51 # This should be turned on.  Only turn off if javascript is calling this script.
52 PROMPTS=1
53
54 #-------------------------------------------------------------------------#
55 # exit codes for javascripts:
56 # function usage:
57 # 1 - normal usage error
58 # 100 - USB drive is mounted, cannot use mvapp
59 #
60 # function cleanapp:
61 # 0 - normal exit
62 # 30 - link for app does not exist
63 #
64 # function linkapp:
65 # 0  - normal exit
66 # 10 - app name not supplied
67 # 11 - link already exists
68 # 12 - app does not exist in VAR
69 # 13 - copy failed from VAR to MEDIA
70 # 14 - removing app from VAR failed
71 # 15 - APP has attributes not supported on FAT, did not move to MEDIA
72 # 16 - APP has no json file, did not move to MEDIA
73 # 17 - APP is running, need to close the app before moving
74 #
75 # function unlinkapp:
76 # 0  - normal exit
77 # 20 - app name not supplied
78 # 21 - app doesn't exist on MEDIA
79 # 22 - tar restore failed
80 # 23 - copy from MEDIA to VAR failed (only used if tar backup doesn't exist)
81 # 24 - remove from MEDIA failed
82 #
83 # function linkemail:
84 # 0  - normal exit
85 # 50 - 
86 # 51 - 
87 #
88 #-------------------------------------------------------------------------#
89
90 #-------------------------------------------------------------------------#
91 # function: cleanexit - exit with cleanup items
92 #-------------------------------------------------------------------------#
93
94 cleanexit () {
95  code=$1
96
97 # put / back to read only
98   mount -o remount,ro /
99
100 # Uncomment if you want verbose exit codes
101 # echo "exit code: $code"
102
103  exit $code
104 }
105 # end of cleanexit function
106
107
108 #-------------------------------------------------------------------------#
109 # function: usage - show command usage options
110 #-------------------------------------------------------------------------#
111 usage () {
112    exitcode=$1
113    if [ ! $exitcode ]
114    then
115      exitcode=1  # default exit code for usage, otherwise exit with incode
116    fi
117
118    echo "Usage:" 
119    echo "mvapp info <or> i                         - view mvapp homepage in phone browser" 
120    echo "mvapp link <or> ln domain.appname         - move app to media, create link"
121    echo "mvapp unlink <or> ul domain.appname       - restore app to var, remove link"
122    echo "mvapp clean <or> c domain.appname         - remove app dir and links"
123    echo "mvapp list <or> ls                        - list all apps sorted by size"
124    echo "mvapp bulkmv  <or> bm                     - move/link many apps"
125    echo "mvapp listmoved <or> lm                   - list apps that have been moved"
126    echo "mvapp restoreall <or> ra                  - restore all apps to original"
127    echo 
128    echo "mvapp linkemail <or> le                   - move email/attach to media and link"
129    echo "mvapp unlinkemail <or> ue                 - restore email/attach to var, rm link"
130    echo
131    echo "mvapp doctor <or> d                       - report /var usage, diagnositics"
132    echo "mvapp doctor <or> d media                 - with size of apps on media (slow)"
133    echo
134
135   cleanexit $exitcode
136 }
137 # end of usage function
138
139 #-------------------------------------------------------------------------#
140 # function: info - launch the mvapp page on webosinternals
141 #-------------------------------------------------------------------------#
142
143 info () {
144 HOMEPAGE=http://www.webos-internals.org/wiki/Solution_to_App_Catalog_Installation_Limit
145
146 luna-send -n 1 palm://com.palm.applicationManager/launch {\"id\":\"com.palm.app.browser\",\"params\":{\"scene\":\"page\",\"target\":\"$HOMEPAGE\"}}  >/dev/null 2>&1
147
148 echo "View on the phone web browser..."
149
150 }
151 # end of info function
152
153
154 #-------------------------------------------------------------------------#
155 # function: cleanapp - removes symbolic links and folder in media and var
156 #-------------------------------------------------------------------------#
157
158 cleanapp () {
159
160  mount -o remount,rw /
161
162  # exit to usage if no app name supplied
163  if [ ! $APP ]
164  then
165    echo "No app name supplied."
166    usage 1
167  fi
168
169  if [ -h $VAR/$APP ]
170  then
171   echo "Continue to remove all traces of $APP."
172  else
173   echo "$APP link does not exist..."
174   if [ -d $MEDIA/$APP ]
175   then
176    echo "Removing $MEDIA/$APP..."
177    rm -r $MEDIA/$APP
178   fi
179   cleanexit 30
180  fi
181  
182  ls -ld $VAR/$APP
183             
184 # Continue on if PROMPTS turned off (call from outside app) 
185  if [ $PROMPTS -eq 1 ]  
186  then
187   echo "This will remove $APP from both...."
188   echo "$VAR and "
189   echo "$MEDIA"
190   echo
191   echo "FIRST ATTEMPT TO... remove the app from Launcher or Homebrew installer."
192   echo
193   echo "Are you sure you want to remove $APP? [y/N]: "
194   read answer
195   case $answer in
196    [Yy]*) continue;;
197        *) cleanexit 0;;
198   esac
199  fi
200
201
202  
203
204  echo "Size of $VAR before cleanup... "
205  /usr/bin/du -sh $VAR
206  df -m /var |grep /var |awk '{print "/var used: "$2,"MB " $4 " - avail: " $3,"MB"}'
207
208  if [ -d $MEDIA/$APP ]
209  then
210      rm -r $MEDIA/$APP
211       echo "Removed directory" $MEDIA/$APP
212  fi
213  if [ -d $VAR/$APP ]
214  then
215       rm -r $VAR/$APP
216       echo "Removed directory" $VAR/$APP
217  fi
218  if [ -h $VAR/$APP ]
219  then
220       rm -r $VAR/$APP
221       echo "Removed link" $VAR/$APP
222  fi
223  if [ -f $BACKUPDIR/$APP.tgz ]
224  then
225       rm -r $BACKUPDIR/$APP.tgz
226       echo "Removed tar backup" $BACKUPDIR/$APP.tgz
227  fi
228
229
230  # rescan luna in case it's needed
231  luna-send -n 1 palm://com.palm.applicationManager/rescan {} >/dev/null 2>&1
232  echo "$APP directories and links removed."
233  echo "Size of $VAR after cleanup... "
234  /usr/bin/du -sh $VAR
235  df -m /var |grep /var |awk '{print "/var used: "$2,"MB " $4 " - avail: " $3,"MB"}'
236  cleanexit 0
237 }
238 # end of cleanup function
239
240
241 #-------------------------------------------------------------------------#
242 # function: listapps - list the size of each app, sort showing largest last
243 #-------------------------------------------------------------------------#
244 listapps () {
245  echo "First number is size in KB.  Size of 0 is an app already linked."
246  cd $VAR
247  for i in `/usr/bin/du -s * | sort -n |cut -f 2`
248  do
249     APP=$i
250     SIZE=`/usr/bin/du -s $VAR/$APP |cut -f1`
251     TITLE=""
252     if [ -f $VAR/$APP/appinfo.json ]
253     then
254       TITLE=`grep title $VAR/$APP/appinfo.json |cut -d: -f2 |cut -d\" -f2`
255     fi
256     echo "$SIZE - $APP - $TITLE"
257  done
258  
259  cleanexit 0
260 }
261 # end of listapps function
262
263 #-------------------------------------------------------------------------#
264 # function: listmoved - list apps moved/linked, sort showing largest last
265 #-------------------------------------------------------------------------#
266 listmoved () {
267  echo "Generating list, hold please."
268  echo "This may take up to a minute..."
269  #/usr/bin/du -sk $MEDIA/* | sort -n  #doesn't show proper size on FAT fs, removing
270  cd $MEDIA
271 # for i in `ls $MEDIA`
272  for i in `/usr/bin/du -s * | sort -n |cut -f 2`
273  do
274     APP=$i
275     # Not sure why du reports incorrectly on FAT fs
276     SIZE=`/usr/bin/du -s $MEDIA/$APP |cut -f1`
277     #SIZE=""
278     TITLE=""
279     if [ -f $MEDIA/$APP/appinfo.json ]
280     then
281       TITLE=`grep title $MEDIA/$APP/appinfo.json |cut -d: -f2 |cut -d\" -f2`
282     fi
283     echo "$SIZE - $APP - $TITLE"
284  done
285  cleanexit 0
286 }
287 # end of listmoved function
288
289
290 #-------------------------------------------------------------------------#
291 # function: linkapp - move the app to media and create symbolic link
292 #-------------------------------------------------------------------------#
293 linkapp () {
294
295  clear
296  
297  if [ ! $APP ]
298  then
299       echo -e "\nNo application supplied..."
300       usage 10
301  fi
302  
303 # Check if the app is running 
304  luna-send -n 1 palm://com.palm.applicationManager/running {} 2>&1 | grep $APP >/dev/null 2>&1
305  if [ $? == 0 ]
306  then
307    echo -e "\n$APP is running.  \nClose the app before moving."
308    
309    code=17
310    return $code
311    
312  fi  
313  
314  
315  if [ ! -f $VAR/$APP/appinfo.json ]
316  then
317     echo -e "\n$APP has no json file.  \nWill not be moved."
318     code=16
319     return 16
320  fi   
321
322  if [ ! -d $MEDIA ]
323  then
324       mkdir $MEDIA
325  fi
326
327  if [ -h $VAR/$APP ]
328  then
329       echo -e "Link already exists for... \n${APP}"
330       cleanexit 11
331  fi
332
333  TITLE=`grep title $VAR/$APP/appinfo.json |cut -d: -f2 |cut -d\" -f2`
334  
335  mount -o remount,rw /
336
337  if [ -d $VAR/$APP ]
338  then
339    echo -e "\nMoving... \n$APP \n$TITLE \nto $MEDIA..."
340  else
341    echo "$APP does not exist..."
342    usage 12
343  fi
344
345  
346  mount -o remount,rw /
347
348  echo -e "\nSize before move... "
349  /usr/bin/du -sh $VAR
350  df -m /var |grep /var |awk '{print "/var used: "$2,"MB " $4 " - avail: " $3,"MB"}'
351  echo
352   
353
354  # move over to USB drive
355  cp -rp  $VAR/$APP $MEDIA >/tmp/cpresult.out 2>&1
356  if [ -s /tmp/cpresult.out ]
357  then
358   grep "cannot preserve" /tmp/cpresult.out >/dev/null 2>&1
359   if [ $? = 0 ]
360   then
361    echo
362    echo -e "\n$APP \nCANNOT BE MOVED as it \ncontains special attributes."
363    echo "Leaving app in original location."
364    code=15
365    rm -r $MEDIA/$APP
366    rm /tmp/cpresult.out
367    return $code
368   else
369    echo -e "Copy failed. Leaving app in original location."
370    code=13
371   fi
372   rm -r $MEDIA/$APP
373   rm /tmp/cpresult.out
374   return $code
375  fi
376                   
377
378 # Backup using tar if enabled
379  if [ $BACKUP -eq 1 ]
380  then
381    if [ ! -d $BACKUPDIR ]
382    then
383     mkdir $BACKUPDIR
384    fi
385    echo -e "Backing up $APP $TITLE \nto $BACKUPDIR using tar..."
386    tar czf $BACKUPDIR/${APP}.tgz $VAR/$APP 2>&1 >/dev/null
387  fi
388
389  rm -r $VAR/$APP
390  if [ $? != 0 ]
391  then
392   echo -e "Remove failed. \nLeaving app in original location."
393   rm -r $MEDIA/$APP
394   cleanexit 14
395  fi
396
397  # create the symbolic link
398  ln -s $MEDIA/$APP $VAR/$APP
399
400  # rescan luna in case it's needed
401  luna-send -n 1 palm://com.palm.applicationManager/rescan {} >/dev/null 2>&1
402
403  echo -e "$APP \nSUCCESSFULLY moved and linked."
404  echo -e "\nSize after move... "
405  /usr/bin/du -sh $VAR
406  df -m /var |grep /var |awk '{print "/var used: "$2,"MB " $4 " - avail: " $3,"MB"}'
407 }
408 # end of linkapp function
409
410
411 #-------------------------------------------------------------------------#
412 # function: unlinkapp -  restore the app to var and remove symbolic link
413 #-------------------------------------------------------------------------#
414 unlinkapp () {
415
416  if [ ! $APP ]
417  then
418    echo "No application supplied..."
419    usage 20
420  fi
421
422  mount -o remount,rw /
423
424  if [ -d $MEDIA/$APP ]
425  then
426    echo "Restoring $APP..."
427  else
428    echo -e "\n$APP does not exist \nor was not moved.\n\n"
429    usage 21
430  fi
431
432  echo "Size of $VAR before move... "
433  /usr/bin/du -sh $VAR
434  df -m /var |grep /var |awk '{print "/var used: "$2,"MB " $4 " - avail: " $3,"MB"}'
435
436  # remove the old symbolic link
437  rm -r $VAR/$APP
438
439  # move to original location or restore from tar if it exists
440  if [ -f $BACKUPDIR/$APP.tgz ] && [ $BACKUP -eq 1 ]
441  then
442   echo "Restoring from tar backup...."
443   cd /
444   tar xzf $BACKUPDIR/$APP.tgz
445   if [ $? -ne 0 ]
446   then
447    echo "Tar restore failed. Remove and restore app using official webOS/Pre methods."
448    cleanexit 22
449   else
450    rm -r $BACKUPDIR/$APP.tgz
451   fi
452  else
453   echo "Restoring from $MEDIA..."
454   cp -r  $MEDIA/$APP $VAR
455   if [ $? != 0 ]
456   then
457    echo "Copy failed. Leaving app in $MEDIA."
458    cleanexit 23
459   fi
460  fi
461
462  rm -r $MEDIA/$APP
463  if [ $? != 0 ]
464  then
465   echo "Remove failed. Leaving app in $MEDIA."
466   rm -r $VAR/$APP
467   cleanexit 24
468  fi
469
470  # rescan luna in case it's needed
471  luna-send -n 1 palm://com.palm.applicationManager/rescan {} >/dev/null 2>&1
472
473  echo -e "$APP \nmoved and unlinked SUCCESSFULLY."
474  echo "Size after move... "
475  /usr/bin/du -sh $VAR
476  df -m /var |grep /var |awk '{print "/var used: "$2,"MB " $4 " - avail: " $3,"MB"}'
477 }
478 # end of unlinkapp function
479
480 #-------------------------------------------------------------------------#
481 # function: bulkmv -  move/link many apps
482 #-------------------------------------------------------------------------#
483 bulkmv() {
484  echo
485  echo
486  echo -e "This allows moving many apps, \nasking which you'd like to move."
487  echo "Starting with the largest apps."
488  echo
489
490
491  mount -o remount,rw /
492  cd $VAR
493
494  for i in `/usr/bin/du -s * | sort -nr |cut -f 2`
495  do
496     export APP=$i
497     SIZE=`/usr/bin/du -sh $APP |cut -f 1`
498     TITLE=`grep title $VAR/$APP/appinfo.json 2>/dev/null |cut -d: -f2 |cut -d\" -f2`
499     echo
500     echo "------------------"
501     echo
502     echo -e "Size of $APP \n$TITLE \nis $SIZE."
503     
504     echo -e "\nWould you like to move and link... \n$TITLE? [y/N/q]: \c"
505     read answer
506     case $answer in
507     [Yy]*) linkapp;;
508     [Qq]*) cleanexit 0;;
509         *) echo "$APP not moved."
510            continue;;
511     esac
512
513     echo
514  done
515 }
516 # end of bulkmv function
517
518 #-------------------------------------------------------------------------#
519 # function: restoreall - restore all apps, back to /var
520 #-------------------------------------------------------------------------#
521 restoreall() {
522
523 #Only confirm if PROMPT turned on. (allows outside app to call) 
524   if [ $PROMPTS -eq 1 ]
525   then
526    echo "This will restore all applications back to original location"
527    echo "and remove the links.  Are you sure you want to continue? [y/N]:"
528    read answer
529    case $answer in
530     [Yy]*) continue;;
531         *) cleanexit 0;;
532    esac
533   fi
534
535   ls $MEDIA | while read APP
536   do
537     echo "Restoring $APP and unlinking..."
538     unlinkapp
539   done
540 }
541 # end of restoreall function
542
543 #-------------------------------------------------------------------------#
544 # function: removetarbackups -  remove entire tar backup directory
545 #-------------------------------------------------------------------------#
546 removetarbackups() {
547   echo "Tar backups are no longer needed and waste space on /media."
548   echo "Backups are located in $BACKUPDIR"
549   echo "Type \"remove\" to remove entire backup directory: "
550   read answer
551   case $answer in
552    [Rr]emove) echo "Removing $BACKUPDIR..."
553               if [ -d $BACKUPDIR ] 
554                then
555                rm -r $BACKUPDIR
556               fi  
557               ;;
558   esac        
559 }
560 # end of removetarbackups function
561
562
563 #-------------------------------------------------------------------------#
564 # function: doctor - report var storage usage areas
565 #-------------------------------------------------------------------------#
566 doctor() {
567
568 echo
569 echo "Gathering /var report, hold please..."
570 if [ -d $MEDIA ] && [ $APP ]
571 then
572  mappsz=`/usr/bin/du -sm $MEDIA |cut -f1`
573 fi
574 #varused=df -m /var |grep /var |awk '{print ": "$2,"MB " $4 " - avail: " $3,"MB"}'
575 varused=`df -m /var |grep /var |awk '{print $2}'`
576 varpct=`df -m /var |grep /var |awk '{print $4}'`
577 varavail=`df -m /var |grep /var |awk '{print $3}'`
578 echo "var used:      ${varused}MB $varpct"
579 echo "var available: ${varavail}MB"
580
581 appsz=`/usr/bin/du -sm $VAR |cut -f1`
582 echo "app used:      ${appsz}MB on /var"
583
584 if [ -d $MEDIA ] && [ $APP ]
585 then
586  echo "app used:      ${mappsz}MB on /media"
587 fi
588
589 if [ -h /var/luna/data/emails ]
590 then
591  emailsz=`/usr/bin/du -sm /media/internal/.data/emails |cut -f1`
592  attachsz=`/usr/bin/du -sm /media/internal/.data/attachments |cut -f1`
593  echo "email used:    ${emailsz}MB on /media"
594  echo "attach used:   ${attachsz}MB on /media"
595 else
596  emailsz=`/usr/bin/du -sm /var/luna/data/emails |cut -f1`
597  attachsz=`/usr/bin/du -sm /var/luna/data/attachments |cut -f1`
598  echo "email used:    ${emailsz}MB on /var"
599  echo "attach used:   ${attachsz}MB on /var"
600 fi
601
602 softtemp=`/usr/bin/du -sm /var/lib/software/tmp |cut -f1`
603 echo "var tmp used:  ${softtemp}MB"
604
605 optsz=0
606 if [ -d /opt ]
607 then
608 optsz=`/usr/bin/du -sm /opt |cut -f1`
609 echo "opt used:      ${optsz}MB"
610 fi
611
612
613 echo
614 echo "Recommendations..."
615 echo
616 echo "- Attempt to keep \"var used\" below 100MB."
617
618
619 if [ $varused -gt "100" ]
620 then
621  echo
622  echo "- Consider reducing space on /var."
623  echo "/var use is greater than 100MB."
624 fi
625 if [ $softtemp -gt 1 ]
626 then
627  echo
628  echo "- Check Updates app."
629  echo "/var/lib/software/tmp is larger"
630  echo "than it should be.  May have an"
631  echo "update waiting to be applied."
632  echo
633 fi
634 if [ $appsz -gt "20" ]
635 then
636  echo
637  echo "- Consider moving apps: mvapp bulkmv"
638 fi
639
640 totalsz=`expr $emailsz + $attachsz`
641 if [ ! -h /var/luna/data/emails ] && [ $totalsz -gt "15" ]
642 then
643  echo "- Consider moving email: mvapp linkemail"
644 fi
645 if [ $optsz -gt 10 ] && [ $varused -gt 100 ]
646 then
647  echo
648  echo "- Consider removing optware packages."
649  echo "You have optware software installed."
650  echo "See: ipkg-opt list_installed"
651  echo " Do: ipkg-opt remove ipkg"
652  echo "Ask on PreCentral."
653 fi
654
655
656 echo
657 echo "This report is available on media"
658 echo "drive as... varreport.txt"
659 } # end of doctor function
660
661 #-------------------------------------------------------------------------#
662 # function: linkemail - move/link email and attachments to /media
663 #-------------------------------------------------------------------------#
664 linkemail() {
665 vdata=/var/luna/data
666 mdata=/media/internal/.data
667
668  echo "This will move email and attachments"
669  echo "to the media drive.  It is unknown"
670  echo "if there will be email issues when"
671  echo "Palm upgrades webOS.  See \"mvapp "
672  echo "info\" for details."
673  echo
674  echo "If you are writing a new email,"
675  echo "complete and send before continuing."
676  echo
677  echo -e "Do you want to continue? [y/N]: \c"
678  read answer
679  case $answer in
680    [Yy]*) continue;;
681        *) cleanexit 0;;
682  esac
683  
684  if [ -h $vdata/emails ]
685  then
686   echo "email link already exists."
687   cleanexit 0
688  fi
689  
690  echo "Closing email application and background service..."
691  luna-send -n 1 palm://com.palm.applicationManager/running {} 2>&1 \
692  | tr  '{' '\n' | grep com.palm.app.email |cut -d: -f3 |cut -d"\"" -f2 \
693  | while read it
694  do
695   echo $it
696   luna-send -n 1 "palm://com.palm.applicationManager/close" "{\"processId\":\"$it\"}"
697  done
698  
699  
700  if [ ! -d $mdata ]
701  then
702   mkdir $mdata
703  fi
704
705
706  #move email to media and create link
707  echo "Moving/linking email..."
708  cp -rp $vdata/emails $mdata 2>&1 >/tmp/cpemail.out
709   if [ -s /tmp/cpemail.out ]
710   then
711    echo "Copying email failed. Leaving email in place."
712    cleanexit 52
713   fi  
714 #mv $vdata/emails $vdata/emails.$$
715  rm -r $vdata/emails
716  ln -s $mdata/emails $vdata/emails
717
718  
719  #move attachments to media and create link
720  echo "Moving/linking attachments..."
721  cp -rp $vdata/attachments $mdata 2>&1 >/tmp/cpemail.out
722   if [ -s /tmp/cpemail.out ]
723   then
724    echo "Copying attachments failed. Leaving attachments in place."
725    cleanexit 53
726   fi  
727 #mv $vdata/attachments $vdata/attachments.$$
728  rm -r $vdata/attachments
729  ln -s $mdata/attachments $vdata/attachments
730  
731  #starup email process
732  echo "Starting up email..."
733  luna-send -n 1 palm://com.palm.applicationManager/launch {\"id\":\"com.palm.app.email\"}  >/dev/null 2>&1
734  
735  echo
736  echo "SUCCESSFUL: Confirm you can access your email."
737  echo
738  echo "NOTE: First time you run email, it will ask"
739  echo "if you want to add accounts.  Press Done."
740
741 } #end of link email function
742
743 #-------------------------------------------------------------------------#
744 # function: unlinkemail - move email and attachments to /media
745 #-------------------------------------------------------------------------#
746 unlinkemail() {
747 vdata=/var/luna/data
748 mdata=/media/internal/.data
749
750
751  if [ ! -d $mdata/emails ]
752  then
753   echo "no email on media"
754   cleanexit 60
755  fi
756  
757  if [ ! -h $vdata/emails ]
758  then
759   echo "email link does not exist on /var"
760   cleanexit 61
761  fi
762  
763  echo "Closing email application and background service..."
764  luna-send -n 1 palm://com.palm.applicationManager/running {} 2>&1 \
765   | tr  '{' '\n' | grep com.palm.app.email |cut -d: -f3 |cut -d"\"" -f2 \
766   | while read it
767   do
768    echo $it
769    luna-send -n 1 "palm://com.palm.applicationManager/close" "{\"processId\":\"$it\"}"
770   done
771  
772  echo "Restoring email to /var..."
773  # rm the email link
774  rm $vdata/emails
775  # cp email from media to var
776  cp -rp $mdata/emails $vdata 2>&1 >/tmp/cpemail.out
777  if [ -s /tmp/cpemail.out ]
778  then
779    echo "copying email back to /var failed."
780    cleanexit 62
781  fi  
782  rm -r $mdata/emails
783  
784  echo "Restoring attachments to /var..."
785  # rm the attachment link
786  rm $vdata/attachments
787  # cp attachments from media to var
788  cp -rp $mdata/attachments $vdata 2>&1 >/tmp/cpemail.out
789  if [ -s /tmp/cpemail.out ]
790  then
791    echo "copying attachments back to /var failed."
792    cleanexit 63
793  fi  
794  
795  rm -r $mdata/attachments
796  
797  #starup email process
798  echo "Starting up email..."
799  luna-send -n 1 palm://com.palm.applicationManager/launch {\"id\":\"com.palm.app.email\"} >/dev/null 2>&1
800  
801  echo
802  echo "SUCCESSFUL: Confirm you can access your email."
803  
804 } #end of unlinkemail function
805
806
807 #-------------------------------------------------------------------------#
808 # function: startup - startup items 
809 #-------------------------------------------------------------------------#
810 startup() {
811
812 clear
813 echo
814 echo "mvapp version: $VERSION"
815
816 mount -o remount,rw /
817
818 df |grep /media/internal 2>&1 >/dev/null
819 if [ $? != 0 ]
820 then
821  echo "USB drive is mounted to computer.  You must unmount from USB to use mvapp."
822  code=100
823  cleanexit $code
824 fi  
825
826 }
827 # end of startup function
828
829
830
831 #-------------------------------------------------------------------------#
832 # main - begins here
833 #-------------------------------------------------------------------------#
834
835 startup
836
837 case $COMMAND in
838 c|"clean")
839    cleanapp
840    ;;
841 ls|"list")
842    listapps
843    ;;
844 lm|"listmoved")
845    listmoved
846    ;;
847 ln|"link")
848    linkapp
849    ;;
850 ul|"unlink")
851    unlinkapp
852    ;;
853 bm|"bulkmv")
854    bulkmv
855    ;;
856 ra|"restoreall")
857    restoreall
858    ;;
859 "ftr")  # force tar restore
860    BACKUP=1   
861    unlinkapp
862    ;;
863 "rtb")  # remove all tar backups
864    removetarbackups 
865    ;;
866 i|"info")
867    info 
868    ;;   
869 d|"doctor")
870    doctor |tee /media/internal/varreport.txt
871    ;;
872 "le"|"linkemail")
873   linkemail
874   ;;
875 "ue"|"unlinkemail")
876   unlinkemail
877   ;;
878 *)
879    usage 1
880    ;;
881 esac
882
883 cleanexit $code
884