use constants
[meabook] / controller.py
1 """
2 Meabook controller class
3 """
4
5 from meabook.constants import *
6 from gettext import gettext as _
7
8
9 class MeabookController:
10     def __init__(self, model, view_class, renderer_class, config):
11         self.config = config
12         self.model = model
13         self.view = view_class(self, renderer_class(), self.config)
14         self.view.start()
15
16     def stop(self):
17         """Exit the program."""
18
19         self.config.save()
20         self.model.close()
21
22     def get_items(self, parent=0):
23         """Gets from model items with selected level."""
24
25         folders_list = list(self.get_all_folders(parent))
26         files_list = [(fields['cn'], int_name, TYPE_FILE) for int_name, \
27             fields in self.model.get_files(['cn'], parent).items()]
28         return folders_list + files_list
29
30     def get_item(self, _id):
31         """Gets person info."""
32
33         info = []
34         entry = self.model.get_entry(_id)
35         entry_fields = entry.keys()
36         fields_to_show = self.config.get_fields()
37         ordered_fields = []
38         for field in self.config.get_order():
39             if field not in ordered_fields:
40                 ordered_fields.append(field)
41         for field in ordered_fields:
42             if (field in fields_to_show) and (field in entry_fields):
43                 info.append((field, entry[field]))
44         if not 'image' in fields_to_show and 'image' in entry.keys():
45             info.append(('image', entry['image']))
46         return info
47
48     def get_all_folders(self, parent=0):
49         """Gets all filials."""
50
51         return [(name, internal_name, TYPE_DIRECTORY) for name, internal_name \
52             in self.model.get_folders(parent)]
53
54     def get_all_subfolders(self):
55         """Gets all departments."""
56
57         return self.get_all_folders(parent=None)
58
59     def get_all_files(self):
60         """Gets all peoples."""
61
62         # FIXME: read field names from Config
63         files_dict = self.model.get_files(['cn'])
64         return [(files_dict[internal_name]['cn'], internal_name, TYPE_FILE) \
65             for internal_name in files_dict]
66
67     def get_all_files_by_pattern(self, pattern):
68         """Gets all peoples matched pattern."""
69
70         return [(name, internal_name, TYPE_FILE) for internal_name, name in \
71             self.model.get_files_by_pattern(pattern)]
72
73     def get_fields(self):
74         """Returns all exists fields from model."""
75
76         return self.model.get_fields()
77
78     def show_about_dialog(self):
79         """Shows view About Dialog."""
80
81         self.view.create_about_dialog()
82
83     def show_configuration_dialog(self):
84         """Shows view Configuration Dialog."""
85
86         self.view.create_configuration_dialog(self, self.config)
87
88     def show_import_dialog(self):
89         """Shows view IMport Dialog."""
90
91         path = self.view.create_import_dialog()
92         if not path:
93             return False
94
95         from meabook.parsers.ldif_parser import MeabookLDIFParser
96         parser = MeabookLDIFParser(open(path), self.model)
97         try:
98             self.view.create_progress_dialog(_('Importing'))
99             #FIXME: implement update_fraction
100             parser.parse()
101             self.config.set_fields(self.model.get_fields())
102             self.config.set_order(self.model.get_fields())
103         except:
104             self.view.create_information_dialog(_('Import error'), \
105                 _('Unsupported file format!'))
106         else:
107             return True