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() def stop(self): """Exit the program.""" 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[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): """Gets person info.""" info = [] entry = self.model.get_entry(_id) entry_fields = entry.keys() fields_to_show = self.config.get_fields() 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, TYPE_DIRECTORY) for name, internal_name \ in self.model.get_folders(parent)] def get_all_subfolders(self): """Gets all departments.""" 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_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.""" self.view.create_about_dialog() def show_configuration_dialog(self): """Shows view Configuration Dialog.""" 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.""" result = self.view.create_import_dialog() if not result: return False 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
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()