1 #!/bin/bash 2 3 # 4 # Copyright (C) 2011 The Android Open Source Project 5 # 6 # Licensed under the Apache License, Version 2.0 (the "License"); 7 # you may not use this file except in compliance with the License. 8 # You may obtain a copy of the License at 9 # 10 # http://www.apache.org/licenses/LICENSE-2.0 11 # 12 # Unless required by applicable law or agreed to in writing, software 13 # distributed under the License is distributed on an "AS IS" BASIS, 14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 # See the License for the specific language governing permissions and 16 # limitations under the License. 17 18 19 20 21 # This script queries a media provider database, and generates a script to 22 # approximately recreate the same file system structure on another device, 23 # using dummy files. 24 25 EXTERNAL=$2 26 if [ "$EXTERNAL" == "" ] 27 then 28 EXTERNAL="/storage" 29 fi 30 31 32 if [ "$1" == "" ] 33 then 34 echo "Usage: $0 <file.db> [external storage root]" 35 exit 2 36 fi 37 38 if [ ! -f "$1" ] 39 then 40 echo "Couldn't find file $1" 41 exit 3 42 fi 43 44 # generate script to generate directory structure and content 45 sqlite3 $1 "select format, media_type, mime_type, case when substr(_data,-1) is '\' then substr(_data,1,length(_data)-1) else _data end from files where _data like '"$EXTERNAL"/%';" | { 46 47 MKDIRS=/tmp/mkdirs$$ 48 CPFILES=/tmp/cpfiles$$ 49 50 echo "# create directories" > $MKDIRS 51 echo "# copy files" > $CPFILES 52 53 IFS="|" 54 while read format mediatype mimetype data; 55 do 56 if [ "$format" == "14337" ] 57 then 58 # jpeg 59 echo "cat /storage/sdcard0/proto.jpg > \"$data\"" >> $CPFILES 60 elif [ "$format" == "14347" ] 61 then 62 # png 63 echo "cat /storage/sdcard0/proto.png > \"$data\"" >> $CPFILES 64 elif [ "$format" == "14343" -a "$mediatype" == "0" ] 65 then 66 # gif 67 echo "cat /storage/sdcard0/proto.gif > \"$data\"" >> $CPFILES 68 elif [ "$format" == "12292" -a "$mediatype" == "0" ] 69 then 70 # txt 71 echo "cat /storage/sdcard0/proto.txt > \"$data\"" >> $CPFILES 72 elif [ "$format" == "12293" -a "$mediatype" == "0" ] 73 then 74 # html 75 echo "cat /storage/sdcard0/proto.html > \"$data\"" >> $CPFILES 76 elif [ "$format" == "12297" ] 77 then 78 # mp3 79 echo "cat /storage/sdcard0/proto.mp3 > \"$data\"" >> $CPFILES 80 elif [ "$format" == "12296" ] 81 then 82 # wav 83 echo "cat /storage/sdcard0/proto.wav > \"$data\"" >> $CPFILES 84 elif [ "$format" == "12299" -a "$mediatype" == "0" ] 85 then 86 # m4v 87 echo "cat /storage/sdcard0/proto.m4v > \"$data\"" >> $CPFILES 88 elif [ "$format" == "12299" -a "$mediatype" == "3" ] 89 then 90 # mp4 91 echo "cat /storage/sdcard0/proto.m4v > \"$data\"" >> $CPFILES 92 elif [ "$format" == "12299" -a "$mediatype" == "2" ] 93 then 94 # m4a 95 echo "cat /storage/sdcard0/proto.m4a > \"$data\"" >> $CPFILES 96 elif [ "$format" == "47492" ] 97 then 98 # 3gp 99 echo "cat /storage/sdcard0/proto.3gp > \"$data\"" >> $CPFILES 100 elif [ "$format" == "47362" ] 101 then 102 # ogg 103 echo "cat /storage/sdcard0/proto.ogg > \"$data\"" >> $CPFILES 104 elif [ "$format" == "47747" ] 105 then 106 # doc 107 echo "cat /storage/sdcard0/proto.doc > \"$data\"" >> $CPFILES 108 elif [ "$format" == "12288" -a "$mediatype" == "0" ] 109 then 110 # unknown type 111 echo "cat /storage/sdcard0/proto.dat > \"$data\"" >> $CPFILES 112 elif [ "$format" == "12289" ] 113 then 114 # directory, ignore 115 true 116 elif [ "$format" == "12288" -a "$mediatype" == "4" ] 117 then 118 # playlist, ignore 119 true 120 else 121 echo ignored: $format '|' $mediatype '|' $mimetype '|' $data 122 fi 123 echo mkdir -p \"$(dirname "$data")\" >> $MKDIRS 124 done 125 126 sort -u $MKDIRS > mkfiles.sh 127 cat $CPFILES >> mkfiles.sh 128 rm -rf $MKDIRS $CPFILES 129 130 } 131 132 # generate playlist files 133 sqlite3 $1 "select audio_playlists._data, audio._data from audio_playlists left outer join audio_playlists_map on audio_playlists._id=audio_playlists_map.playlist_id left outer join audio on audio_playlists_map.audio_id=audio._id order by audio_playlists_map.playlist_id,audio_playlists_map.play_order;" | { 134 135 IFS="|" 136 while read plist entry 137 do 138 echo "echo \"$(basename $entry)\" >> \"$plist\"" >> mkfiles.sh 139 done 140 } 141 142 echo mkfiles.sh generated. Now run: 143 grep sdcard0\/proto mkfiles.sh |sed 's/cat \/storage\/sdcard0\//adb push protos\//' | sed 's/ > .*/ \/storage\/sdcard0\//'|sort -u 144 echo adb push mkfiles.sh /storage/sdcard0 145 echo adb shell sh /storage/sdcard0/mkfiles.sh 146 147