blob: 079f4f05559f2fa53e9d271470cd68ada7e2925e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
#!/bin/bash
# run this on the backup directory
datafile="datalist"
mime="mime_type"
home=$PWD
er_m="$home/err_mime.log"
er_d="$home/err_data.log"
gnomedir="gnome"
function err_m {
echo $1 >> $er_m
}
function err_d {
echo $1
echo $1 >> $er_d
}
for folder in `ls */ -d`
do
cd $folder
echo Working dir: $folder
# datastore
[[ -d home ]] && rm -rf ./home
if [ ! -f *.bz2 ]
then
echo "$PWD is not a backup directory"
continue
fi
tar xjf *.bz2
[[ $? -ne 0 ]] && err_d "TAR error, please recover the $PWD archive"
out="$home/out/$folder"
mkdir -p $out/datastore
[[ -f home/olpc/.sugar/default/datastore/nickname ]] && cp home/olpc/.sugar/default/datastore/nickname $out/datastore
int=1
rm $datafile 2>/dev/null
find . -name data >> $datafile
for path in `cat $datafile`
do
cd ${path%\/data}/metadata
ext="unknown"
size=0
if [ -f $mime ]
then
grep -q application/pdf $mime && ext="pdf"
grep -q application/x-fototoon-activity $mime && ext="fototoon"
grep -q application/x-memorize-project $mime && ext="memorize"
grep -q application/x-physics-activity $mime && ext="physics"
grep -q application/x-turtle-art $mime && ext="turtle"
grep -q gcompris $mime && ext="gcompris"
grep -q ogg $mime && ext="ogg"
grep -q image/jpeg $mime && ext="jpeg"
grep -q image/png $mime && ext="png"
grep -q text/plain $mime && ext="txt"
grep -q text/x-python $mime && ext="py"
grep -q opendocument $mime && ext="odf"
grep -q application/epub $mime && ext="epub"
grep -q application/rtf $mime && ext="rtf"
grep -q mpeg $mime && ext="mpeg"
grep -q html $mime && ext="html"
grep -q Speak activity && ext="speak"
grep -q Calculate activity && ext="Calculate"
grep -q Chat activity && ext="Chat"
else
err_d "mime type file does not exists: $PWD"
[[ ! -f ../data ]] && err_d "data file does not exists: $PWD"
continue
fi
[[ -f "preview" ]] && size=`ls -sk preview | awk '{ print $1 }'`
if [ $ext == "unknown" ]
then
err_m "Format unknown: $PWD"
[[ -d $out/datastore/unknown ]] || mkdir $out/datastore/unknown
[[ $size -gt 0 ]] && cp -a preview $out/datastore/unknown/$int.$ext.preview.png
else
if [ $ext == 'txt' ]
then
cat ../data | json_verify -q
# A txt file might be written by the children, or an activity.
# The activity write the content following the JSON format.
if [ $? -eq 0 ]
then
ext='txt.act'
grep -q 'Madagascar.activity' ../data && ext="madagascar"
else # Handle special format
# No JSON but something containing [report/YYYY....
grep -q "^\[report/20" ../data && ext='txt.act'
# No JSON but always containing 1 number per line on 3 lines
grep -q "^\d*" ../data
if [ $? -eq 0 ]
then
w=`wc -lw ../data | awk '{print $1$2}'`
if [ $w -eq '33' ]
then
ext='txt.act'
fi
fi
fi
fi
cp -a ../data $out/datastore/$int.$ext
[[ $size -gt 0 ]] && cp -a preview $out/datastore/$int.$ext.preview.png
fi
int=$((int + 1))
cd $home/$folder
done
rm $datafile
[[ -d home ]] && rm -rf ./home
# GNOME directory
if [ -d $home/$folder/$gnomedir ]
then
for f in `ls -d $home/$folder/$gnomedir/*/`
do
size=`du -skb $f | awk '{ print $1 }'`
[[ $size -lt 4097 ]] && continue
mkdir -p $out/$gnomedir
cp -aR ${f%\/} $out/$gnomedir
done
else
err_d "There is no gnome dir for this backup: $PWD"
fi
cd $home
done
echo "Done"
|