Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/parse.sh
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"