1563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen#!/bin/bash 2563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 3563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# 4563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# Copyright (C) 2011 The Android Open Source Project 5563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# 6563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# Licensed under the Apache License, Version 2.0 (the "License"); 7563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# you may not use this file except in compliance with the License. 8563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# You may obtain a copy of the License at 9563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# 10563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# http://www.apache.org/licenses/LICENSE-2.0 11563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# 12563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# Unless required by applicable law or agreed to in writing, software 13563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# distributed under the License is distributed on an "AS IS" BASIS, 14563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# See the License for the specific language governing permissions and 16563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# limitations under the License. 17563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 18563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 19563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 20563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 21563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# This script queries a media provider database, and generates a script to 22563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# approximately recreate the same file system structure on another device, 23563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# using dummy files. 24563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 25563e518e23314644c76e93109bd64f397f1f74f8Marco NelissenEXTERNAL=$2 26563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenif [ "$EXTERNAL" == "" ] 27563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenthen 28563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen EXTERNAL="/storage" 29563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenfi 30563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 31563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 32563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenif [ "$1" == "" ] 33563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenthen 34563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "Usage: $0 <file.db> [external storage root]" 35563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen exit 2 36563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenfi 37563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 38563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenif [ ! -f "$1" ] 39563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenthen 40563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "Couldn't find file $1" 41563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen exit 3 42563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenfi 43563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 44563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# generate script to generate directory structure and content 4522f0570113a5124952f8b0e0d7da1ea1b85fb030Marco Nelissensqlite3 $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"/%';" | { 46563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 47563e518e23314644c76e93109bd64f397f1f74f8Marco NelissenMKDIRS=/tmp/mkdirs$$ 48563e518e23314644c76e93109bd64f397f1f74f8Marco NelissenCPFILES=/tmp/cpfiles$$ 49563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 5005debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissenecho "# create directories" > $MKDIRS 5105debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissenecho "# copy files" > $CPFILES 5205debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissen 53563e518e23314644c76e93109bd64f397f1f74f8Marco NelissenIFS="|" 54563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenwhile read format mediatype mimetype data; 55563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissendo 56563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen if [ "$format" == "14337" ] 57563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 58563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # jpeg 59563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.jpg > \"$data\"" >> $CPFILES 60563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "14347" ] 61563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 62563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # png 63563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.png > \"$data\"" >> $CPFILES 64563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "14343" -a "$mediatype" == "0" ] 65563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 66563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # gif 67563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.gif > \"$data\"" >> $CPFILES 68563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "12292" -a "$mediatype" == "0" ] 69563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 70563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # txt 71563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.txt > \"$data\"" >> $CPFILES 72563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "12293" -a "$mediatype" == "0" ] 73563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 74563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # html 75563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.html > \"$data\"" >> $CPFILES 76563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "12297" ] 77563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 78563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # mp3 79563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.mp3 > \"$data\"" >> $CPFILES 80563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "12296" ] 81563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 82563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # wav 83563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.wav > \"$data\"" >> $CPFILES 84563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "12299" -a "$mediatype" == "0" ] 85563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 86563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # m4v 87563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.m4v > \"$data\"" >> $CPFILES 88563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "12299" -a "$mediatype" == "3" ] 89563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 90563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # mp4 91563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.m4v > \"$data\"" >> $CPFILES 92563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "12299" -a "$mediatype" == "2" ] 93563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 94563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # m4a 95563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.m4a > \"$data\"" >> $CPFILES 96563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "47492" ] 97563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 98563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # 3gp 99563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.3gp > \"$data\"" >> $CPFILES 10005debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissen elif [ "$format" == "47362" ] 101563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 102563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # ogg 103563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.ogg > \"$data\"" >> $CPFILES 10405debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissen elif [ "$format" == "47747" ] 10505debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissen then 10605debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissen # doc 10705debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissen echo "cat /storage/sdcard0/proto.doc > \"$data\"" >> $CPFILES 108563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "12288" -a "$mediatype" == "0" ] 109563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 110563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # unknown type 111563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "cat /storage/sdcard0/proto.dat > \"$data\"" >> $CPFILES 11205debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissen elif [ "$format" == "12289" ] 113563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 114563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # directory, ignore 115563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen true 116563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen elif [ "$format" == "12288" -a "$mediatype" == "4" ] 117563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen then 118563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen # playlist, ignore 119563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen true 120563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen else 121563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo ignored: $format '|' $mediatype '|' $mimetype '|' $data 122563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen fi 12305debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissen echo mkdir -p \"$(dirname "$data")\" >> $MKDIRS 124563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissendone 125563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 126563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissensort -u $MKDIRS > mkfiles.sh 127563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissencat $CPFILES >> mkfiles.sh 128563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenrm -rf $MKDIRS $CPFILES 129563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 130563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen} 131563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 132563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen# generate playlist files 13305debd5e197f0f5543aa8e5eaba7ab6d7c2d94d2Marco Nelissensqlite3 $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;" | { 134563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 135563e518e23314644c76e93109bd64f397f1f74f8Marco NelissenIFS="|" 136563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenwhile read plist entry 137563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissendo 138563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen echo "echo \"$(basename $entry)\" >> \"$plist\"" >> mkfiles.sh 139563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissendone 140563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen} 141563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 142563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenecho mkfiles.sh generated. Now run: 143be3ec9bb49f8aaee3d6fa31e33fd506281491c7bMarco Nelissengrep sdcard0\/proto mkfiles.sh |sed 's/cat \/storage\/sdcard0\//adb push protos\//' | sed 's/ > .*/ \/storage\/sdcard0\//'|sort -u 144563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenecho adb push mkfiles.sh /storage/sdcard0 145563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissenecho adb shell sh /storage/sdcard0/mkfiles.sh 146563e518e23314644c76e93109bd64f397f1f74f8Marco Nelissen 147