Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pysamples/journal-stats.py
blob: 2d8a5d312cf62362f8034042c1363d19806ef484 (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
# Copyright (c) 2012, Walter Bender

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

def myblock(tw, x):  # ignore second argument
    ''' Load journal stats to heap (Sugar only) '''

    import os
    import glob
    MAX = 19
    DIROFINTEREST = 'datastore'


    class ParseJournal():
        ''' Simple parser of datastore '''

        def __init__(self):
            self._dsdict = {}
            self._activity_name = []
            self._activity_count = []

            homepath = os.environ['HOME']
            for path in glob.glob(os.path.join(homepath, '.sugar', '*')):
                if isdsdir(path):
                    self._dsdict[os.path.basename(path)] = []
                    dsobjdirs = glob.glob(
                        os.path.join(path, DIROFINTEREST, '??'))
                    for dsobjdir in dsobjdirs:
                        dsobjs = glob.glob(os.path.join(dsobjdir, '*'))
                        for dsobj in dsobjs:
                            self._dsdict[os.path.basename(path)].append({})
                            activity = isactivity(dsobj)
                            if not activity:
                                self._dsdict[os.path.basename(path)][-1][
                                    'activity'] = 'media object'
                            else:
                                self._dsdict[os.path.basename(path)][-1][
                                    'activity'] = activity

            for k, v in self._dsdict.iteritems():
                for a in v:
                    if 'activity' in a:
                        if a['activity'] in self._activity_name:
                            i = self._activity_name.index(a['activity'])
                            self._activity_count[i] += 1
                        else:
                            self._activity_name.append(a['activity'])
                            self._activity_count.append(1)

        def get_sorted(self):
            activity_tuples = []
            for i in range(len(self._activity_name)):
                activity_tuples.append((self._activity_name[i],
                                        self._activity_count[i]))
            sorted_tuples = sorted(activity_tuples, key=lambda x: x[1])
            activity_list = []
            count = 0
            length = len(sorted_tuples)
            for i in range(length):
                if i < MAX:
                    activity_list.append([sorted_tuples[length - i - 1][0],
                                          sorted_tuples[length - i - 1][1]])
                else:
                    count += sorted_tuples[length - i - 1][1]
            if count > 0:
                activity_list.append([_('other'), count])
            return activity_list


    def hascomponent(path, component):
        ''' Return metadata attribute, if any '''
        if not os.path.exists(os.path.join(path, 'metadata')):
            return False
        if not os.path.exists(os.path.join(path, 'metadata', component)):
            return False
        fd = open(os.path.join(path, 'metadata', component))
        data = fd.readline()
        fd.close()
        if len(data) == 0:
            return False
        return data


    def isactivity(path):
        ''' Return activity name '''
        activity = hascomponent(path, 'activity')
        if not activity:
            return False
        else:
            return activity.split('.')[-1]


    def isdsdir(path):
        ''' Only interested if it is a datastore directory '''
        if not os.path.isdir(path):
            return False
        if not os.path.exists(os.path.join(path, DIROFINTEREST)):
            return False
        return True


    data = ParseJournal()
    activity_list = data.get_sorted()
    for a in activity_list:
        tw.lc.heap.append(a[0])
        tw.lc.heap.append(a[1])
    
    tw.lc.heap.append(activity_list[0][1])
    return