X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=controller.py;h=aafbc9dfa76239db3e75c6d8f7ccf487b07da4f7;hb=HEAD;hp=63bacfaf26feb2be824a3493d74a0760663a4dbd;hpb=8be6e42e44143c2a0554aeccb2f18b78b8cea616;p=meabook diff --git a/controller.py b/controller.py index 63bacfa..aafbc9d 100644 --- a/controller.py +++ b/controller.py @@ -2,14 +2,15 @@ Meabook controller class """ -import gettext - -_ = gettext.gettext +from meabook.constants import * +from gettext import gettext as _ +from meabook.caller import PhoneCaller class MeabookController: def __init__(self, model, view_class, renderer_class, config): self.config = config + self.caller = PhoneCaller() self.model = model self.view = view_class(self, renderer_class(), self.config) self.view.start() @@ -20,12 +21,18 @@ class MeabookController: self.config.save() self.model.close() + def call(self, number): + """Make a phone call.""" + + self.caller.call(number) + def get_items(self, parent=0): """Gets from model items with selected level.""" folders_list = list(self.get_all_folders(parent)) - files_list = [(fields['cn'], internal_name, 'f') for internal_name, \ - fields in self.model.get_files(['cn'], parent).items()] + files_list = [(fields[FIELD_LOWLEVEL], internal_name, TYPE_FILE) for \ + internal_name, fields in self.model.get_files([FIELD_LOWLEVEL], \ + parent).items()] return folders_list + files_list def get_item(self, _id): @@ -42,35 +49,53 @@ class MeabookController: for field in ordered_fields: if (field in fields_to_show) and (field in entry_fields): info.append((field, entry[field])) - if not 'image' in fields_to_show and 'image' in entry.keys(): - info.append(('image', entry['image'])) + if not FIELD_IMAGE in fields_to_show and FIELD_IMAGE in entry.keys(): + info.append((FIELD_IMAGE, entry[FIELD_IMAGE])) return info def get_all_folders(self, parent=0): """Gets all filials.""" - return [(name, internal_name, 'd') for name, internal_name in \ - self.model.get_folders(parent)] + return [(name, internal_name, TYPE_DIRECTORY) for name, internal_name \ + in self.model.get_folders(parent)] def get_all_subfolders(self): """Gets all departments.""" - return [(name, internal_name, 'd') for name, internal_name in \ - self.model.get_folders()] + return [(name, internal_name, TYPE_DIRECTORY) for name, internal_name \ + in self.model.get_folders()] + + def get_files_by_pattern_ex(self, key, pattern=''): + """Gets all peoples matched pattern.""" - def get_all_files(self): - """Gets all peoples.""" + files_dict = self.model.get_files_by_pattern([FIELD_LOWLEVEL, \ + FIELD_TOPLEVEL, FIELD_MIDDLELEVEL], key, pattern, False) + return [("%s" % files_dict[internal_name][FIELD_LOWLEVEL], "%s / %s" % ( + files_dict[internal_name][FIELD_TOPLEVEL], \ + files_dict[internal_name][FIELD_MIDDLELEVEL]), \ + internal_name, TYPE_FILE) for internal_name in files_dict] - # FIXME: read field names from Config - files_dict = self.model.get_files(['cn']) - return [(files_dict[internal_name]['cn'], internal_name, 'f') for \ - internal_name in files_dict] + def get_files_by_pattern(self, pattern=''): + """Gets all peoples matched pattern.""" + + files_dict = self.model.get_files_by_pattern([FIELD_LOWLEVEL, \ + FIELD_TOPLEVEL, FIELD_MIDDLELEVEL], FIELD_LOWLEVEL, pattern, True) + return [("%s" % files_dict[internal_name][FIELD_LOWLEVEL], "%s / %s" % ( + files_dict[internal_name][FIELD_TOPLEVEL], \ + files_dict[internal_name][FIELD_MIDDLELEVEL]), \ + internal_name, TYPE_FILE) for internal_name in files_dict] def get_fields(self): """Returns all exists fields from model.""" return self.model.get_fields() + def get_localized_fields(self): + """Returns dict with original and localized filed names.""" + + return dict([(_(field).decode('utf-8'), field) for field in \ + self.model.get_fields()]) + def show_about_dialog(self): """Shows view About Dialog.""" @@ -79,25 +104,64 @@ class MeabookController: def show_configuration_dialog(self): """Shows view Configuration Dialog.""" - self.view.create_configuration_dialog(self, self.config) + self.view.create_configuration_dialog(self, self.config.get_fields(), \ + self.config.get_order()) + + def show_fields_configuration_dialog(self, parent): + """Shows FieldsConfigurationDialog.""" + + selected_fields = self.view.create_fields_configuration_dialog( \ + self.get_localized_fields(), self.config.get_fields(), parent) + if selected_fields is not None: + self.config.set_fields(selected_fields) + return selected_fields + + def show_fields_order_configuration_dialog(self): + """Shows FieldsOrderConfigurationDialog.""" + + selected_fields = self.view.create_fields_order_configuration_dialog( \ + self.get_localized_fields(), self.config.get_order()) + if selected_fields is not None: + self.config.set_order(selected_fields) + return selected_fields + + def show_search_dialog(self): + """Shows view Search Dialog.""" + + self.view.create_search_dialog(self) def show_import_dialog(self): """Shows view IMport Dialog.""" - path = self.view.create_import_dialog() - if not path: + result = self.view.create_import_dialog() + if not result: return False - from meabook.parsers.ldif_parser import MeabookLDIFParser - parser = MeabookLDIFParser(open(path), self.model) - try: - self.view.create_progress_dialog(_('Importing')) - #FIXME: implement update_fraction - parser.parse() - self.config.set_fields(self.model.get_fields()) - self.config.set_order(self.model.get_fields()) - except: - self.view.create_information_dialog(_('Import error'), \ - _('Unsupported file format!')) - else: - return True + import_type, path = result + if import_type == 'ldif': + from meabook.parsers.ldif_parser import MeabookLDIFParser + parser = MeabookLDIFParser(open(path), self.model) + try: + self.view.create_progress_dialog(_('Importing')) + #FIXME: implement update_fraction + parser.parse() + except: + self.view.create_information_dialog(_('Import error'), \ + _('Unsupported file format!')) + return False + elif import_type == 'db': + import shutil + self.model.close() + try: + shutil.copy(path, self.model._path) + except: + self.model.connect() + self.view.create_information_dialog(_('Import error'), \ + _('Unable to copy database file!')) + return False + else: + self.model.connect() + + self.config.set_fields(self.model.get_fields()) + self.config.set_order(self.model.get_fields()) + return True