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