-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprop_class.py
More file actions
59 lines (55 loc) · 2.1 KB
/
prop_class.py
File metadata and controls
59 lines (55 loc) · 2.1 KB
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
import os
from dateutil import parser as date_parser
backupdir = r"X:\Users\Ralphie\Android\TitaniumBackup"
class parsed:
def __init__(self,prop_file,backupdir = None):
if "com.keramidas.virtual" in prop_file:
raise TypeError(''''This file isn't for apps''')
if backupdir:
self.backupdir = backupdir
else:
self.backupdir = os.path.dirname(prop_file)
for item in parsed.__parse__(prop_file).items():
setattr(self,item[0],item[1])
def __parse__(prop):
ret = {'prop':prop}
prop_file = open(prop)
text = prop_file.read()
prop_file.close()
lines = filter(lambda line: line,text.split('\n'))
next(lines)
time = next(lines)
ret['time'] = date_parser.parse(time[1:])
next(lines)
split = lambda line: line.split('=')
make_tuple = lambda line: line if len(line) == 2 else [line[0],None]
startwith_hash = lambda line: line[0] != '#'
ret['raw'] = dict(
map(
make_tuple,
map(
split,
filter(startwith_hash,lines)
)
)
)
try:
ret['name'] = ret['raw']['app_label'].lower()
except KeyError:
ret['name'] = ret['raw']['app_gui_label'].lower()
ret['version'] = ret['raw']['app_version_name']
return ret
def get_files(self):
md5 = self.raw['app_apk_md5']
try:
apk = next(filter(lambda file: md5 in file,os.listdir(self.backupdir)))
except StopIteration:
apk = None
tar = os.path.split(self.prop.replace('.properties','.tar'))[-1]
try:
data = next(filter(lambda file: tar in file,os.listdir(self.backupdir)))
except StopIteration:
data = None
return [os.path.join(self.backupdir,apk),self.prop,os.path.join(self.backupdir,data)]
if __name__ == '__main__':
test = parsed(r"X:\Users\Ralphie\Android\TitaniumBackup\org.qpython.qpy3-20180211-052129.properties")