X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=controller.py;h=aafbc9dfa76239db3e75c6d8f7ccf487b07da4f7;hb=HEAD;hp=171b2bff06cb894f5c97539d82ecaf6df04deb1b;hpb=d48ed8d131fcb5d62b85ac4d1e0b728f8b087739;p=meabook diff --git a/controller.py b/controller.py index 171b2bf..aafbc9d 100644 --- a/controller.py +++ b/controller.py @@ -2,11 +2,17 @@ Meabook controller class """ +from meabook.constants import * +from gettext import gettext as _ +from meabook.caller import PhoneCaller + + class MeabookController: - def __init__(self, model, view_class, config): + def __init__(self, model, view_class, renderer_class, config): self.config = config + self.caller = PhoneCaller() self.model = model - self.view = view_class(self) + self.view = view_class(self, renderer_class(), self.config) self.view.start() def stop(self): @@ -15,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, 'fi') 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): @@ -29,38 +41,61 @@ class MeabookController: info = [] entry = self.model.get_entry(_id) entry_fields = entry.keys() - ordered_fields = [] fields_to_show = self.config.get_fields() - for field in dict().fromkeys(self.config.get_order()).keys(): + ordered_fields = [] + for field in self.config.get_order(): + if field not in ordered_fields: + ordered_fields.append(field) + for field in ordered_fields: if (field in fields_to_show) and (field in entry_fields): info.append((field, entry[field])) + 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, 'fo') 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, 'fo') 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.""" + + 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] - def get_all_files(self): - """Gets all peoples.""" + def get_files_by_pattern(self, pattern=''): + """Gets all peoples matched pattern.""" - # FIXME: read field names from Config - files_dict = self.model.get_files(['cn']) - return [(files_dict[internal_name]['cn'], internal_name, 'file') for \ - internal_name in files_dict] + 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.""" @@ -69,20 +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() - parser.parse() - except: - self.view.create_information_dialog(_('Import error'), \ - _('Unsupported file format!')) + 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