Use compat.sorted.
[matthijs/upstream/mobilegtd.git] / src / model / projects.py
1 from project import Project
2 from observable import ObservableList
3 from filtered_list import FilteredList
4 from compat import sorted
5 #from tickler import TickleDirectory
6 #from inout.io import *
7 #
8 #project_directory = '@Projects/'
9
10 #
11 #def make_string_stripper(to_strip):
12 #    return lambda x: x.replace(to_strip,'')
13
14 class Projects(ObservableList,FilteredList):
15     def __init__(self):
16         super(Projects,self).__init__()
17     def with_status(self,status):
18         pass
19         return self.with_property(lambda p:p.status == status)
20     
21     def sorted_by_status(self):
22         return sorted(self,cmp=lambda x,y:y.status.__cmp__(x.status))
23 #    def __init__(self,project_directory):
24 #        self.review_directory = project_directory+'@Review/'
25 #        self.done_directory = project_directory+'@Done/'
26 #        self.someday_directory = project_directory+'@Someday/'
27 #        self.tickled_directory = project_directory+'@Tickled/'
28 #        self.project_dir_name = '@Projects/'
29 #
30 #        self.tickle_times=None
31 #        self.someday_contexts=None
32 #
33 #        self.root = project_directory
34 #        self.processed_projects = []
35 #        self.review_projects = []
36 #        self.someday_projects = []
37 #        self.tickled_projects = []
38 #        self.observers = []
39 #        
40 #    def get_tickle_times(self):
41 #        if self.tickle_times == None:
42 #                self.tickle_times=map(make_string_stripper(self.tickled_directory+'/'),list_dir(self.tickled_directory,True,is_dir))
43 #        return self.tickle_times
44 #    def get_someday_contexts(self):
45 #        if self.someday_contexts == None:
46 #            self.someday_contexts=map(make_string_stripper(self.someday_directory+'/'),list_dir(self.someday_directory,True,is_dir))
47 #        return self.someday_contexts
48 #        #self.notify()
49 #    def read(self,root,recursive=False):
50 #        # TODO Use generic read funct
51 #        return [Project(project_name) for project_name in list_dir(root, recursive, lambda name: name.endswith('.prj'))]
52 #    def get_all_projects(self):
53 #        return self.get_active_projects() + self.get_review_projects() + \
54 #            self.get_tickled_projects() + self.get_someday_projects()
55 #    def get_current_projects(self):
56 #        return self.get_active_projects() + self.get_review_projects()
57 #    def get_inactive_projects(self):
58 #        return self.get_tickled_projects() + self.get_someday_projects()
59 #    def get_active_projects(self):
60 #        if self.processed_projects == None:
61 #            self.processed_projects = self.read(self.root)
62 #        return self.processed_projects
63 #    def get_review_projects(self):
64 #        if self.review_projects == None:
65 #            self.review_projects = self.read(self.review_directory)
66 #        return self.review_projects
67 #    def get_tickled_projects(self):
68 #        if self.tickled_projects == None:
69 #            self.tickled_projects = self.read(self.tickled_directory,True)
70 #        return self.tickled_projects
71 #    def get_someday_projects(self):
72 #        if self.someday_projects == None:
73 #            self.someday_projects = self.read(self.someday_directory,True)
74 #        return self.someday_projects
75 #    def get_current_tickled_projects(self):
76 #        current_tickled_projects = []
77 #        tickled_projects = self.get_tickled_projects()
78 #        for project in tickled_projects:
79 #            if project.should_not_be_tickled():
80 #                current_tickled_projects.append(project)
81 #        return current_tickled_projects
82 #                
83 #    def add_project(self,project):
84 #        # Projects are not being reread
85 #        if self.processed_projects:
86 #            self.get_active_projects().insert(0,project)
87 #    def create_project(self,project_name):
88 #        project_file_name = (project_directory+project_name+'.prj')
89 #        project = Project(project_file_name)
90 #        project.dirty=True
91 #        project.write()
92 #        self.add_project(project)
93 #        return project
94 #
95 #
96 #    def process(self):
97 #        ##logger.log(u'Starting to process')
98 #
99 #        self.reread()
100 #        ##logger.log('Searching for projects without next act')
101 #        for project in self.get_active_projects():
102 #            #logger.log(project.name(),2)
103 #            self.process_project(project)
104 #        ##logger.log('Searching for projects that should be untickled')
105 #        for project in self.get_current_tickled_projects():
106 #            self.review(project)
107 #            project.activate()
108 #        ##logger.log('Removing obsolete tickle directories')
109 #        for tickle_dir in self.get_tickle_times():
110 #            if TickleDirectory(tickle_dir).is_obsolete():
111 #                try:
112 #                    os.removedirs(u'%s/%s'%(self.tickled_directory,tickle_dir))
113 #                except OSError:
114 #                    pass
115 #            
116 #        self.reread()
117 #        self.notify()
118 #
119 #    def process_project(self,project):
120 #        is_active = project.process()
121 #        if not is_active:
122 #            self.review(project)
123 #        
124 #    def update_status(self,project):
125 #        if project.has_active_actions() and project.get_status()==inactive:
126 #            self.activate(project)
127 #        elif not project.has_active_actions() and project.is_processed():
128 #            self.review(project)
129 #    
130 #    def review(self,project):
131 #        project.move_to(self.review_directory)
132 #    def set_done(self,project):
133 #        project.inactivate()
134 #        project.move_to(self.done_directory)
135 #    def activate(self,project):
136 #        project.move_to(self.root)
137 #
138 #    def defer(self,project,context=''):
139 #        project.inactivate()
140 #        project.move_to(u'%s/%s'%(self.someday_directory,context))
141 #    def tickle(self,project,time=''):
142 #        project.inactivate()
143 #        project.move_to(u'%s/%s'%(self.tickled_directory,time))
144
145 __all__ = ["Projects"]