class ReTagController(QtCore.QObject): """ object for calling the re-tag view. ************************ MANDATORY parameters: ************************ * application -> the parent qt-application object ()for installing the translator properly * store_path -> absolute path to the store of the item to be retagged (TIP: use the PathHelper object to resolve a relative path.) * item_name -> the name of the item to be renamed (exactly how it is defined in the tagfile) ************************ TIP: use the PathHelper object to resolve a relative path AND to extract the item name out of it. ************************ ************************ OPTIONAL parameters: ************************ * standalone_application -> default = False; set this to true if there * verbose -> set this to true for detailed output (DEVEL * retag_mode -> this application could even be used for a normal tagging procedure as well.) ************************ IMPORTANT!!! ************************ the start() method must be called in order to begin with the tagging procedure """ def __init__(self, application, store_path, item_name, retag_mode=True, verbose=False): QtCore.QObject.__init__(self) self.__log = None self.__main_config = None self.__store_config = None self.__tag_dialog = None self.__store = None self.__retag_mode = retag_mode self.__no_store_found = False self.__item_name = unicode(item_name) self.__store_path = store_path # the main application which has the translator installed self.__application = application self.LOG_LEVEL = logging.INFO if verbose: self.LOG_LEVEL = logging.DEBUG self.STORE_CONFIG_DIR = TsConstants.DEFAULT_STORE_CONFIG_DIR self.STORE_CONFIG_FILE_NAME = TsConstants.DEFAULT_STORE_CONFIG_FILENAME self.STORE_TAGS_FILE_NAME = TsConstants.DEFAULT_STORE_TAGS_FILENAME self.STORE_VOCABULARY_FILE_NAME = TsConstants.DEFAULT_STORE_VOCABULARY_FILENAME locale = unicode(QtCore.QLocale.system().name())[0:2] self.__translator = QtCore.QTranslator() if self.__translator.load("ts_" + locale + ".qm", "tsresources/"): self.__application.installTranslator(self.__translator) # get dir names for all available languages self.CURRENT_LANGUAGE = self.trUtf8("en") self.STORE_STORAGE_DIRS = [] self.STORE_DESCRIBING_NAV_DIRS = [] self.STORE_CATEGORIZING_NAV_DIRS = [] self.STORE_EXPIRED_DIRS = [] self.STORE_NAVIGATION_DIRS = [] self.SUPPORTED_LANGUAGES = TsConstants.DEFAULT_SUPPORTED_LANGUAGES self.MAX_CLOUD_TAGS = TsConstants.DEFAULT_MAX_CLOUD_TAGS self.__store_dict = {} for lang in self.SUPPORTED_LANGUAGES: self.change_language(lang) self.STORE_NAVIGATION_DIRS.append(self.trUtf8("navigation")) self.STORE_STORAGE_DIRS.append(self.trUtf8("storage")) # self.STORE_STORAGE_DIR_EN)) self.STORE_DESCRIBING_NAV_DIRS.append( self.trUtf8("descriptions") ) # self.STORE_DESCRIBING_NAVIGATION_DIR_EN)) self.STORE_CATEGORIZING_NAV_DIRS.append( self.trUtf8("categories") ) # self.STORE_CATEGORIZING_NAVIGATION_DIR_EN)) self.STORE_EXPIRED_DIRS.append(self.trUtf8("expired_items")) # STORE_EXPIRED_DIR_EN)) ## reset language self.change_language(self.CURRENT_LANGUAGE) self.__log = LogHelper.get_app_logger(self.LOG_LEVEL) def start(self): """ call this method to actually start the tagging procedure """ self.__init_configuration() def __init_configuration(self): """ initializes the configuration. This method is called every time the config file changes """ self.__log.info("initialize configuration") self.__main_config = ConfigWrapper(TsConstants.CONFIG_PATH) if self.__main_config is None: self.__emit_not_retagable(self.trUtf8("No config file found for the given path")) return ## check if there has been found an appropriate store_path in the config if self.__store_path is None: self.__emit_not_retagable(self.trUtf8("No store found for the given path")) return else: self.__store_config = ConfigWrapper(self.__store_path) self.__prepare_store_params() self.CURRENT_LANGUAGE = self.__main_config.get_current_language() self.change_language(self.CURRENT_LANGUAGE) # self.__main_config.connect(self.__main_config, QtCore.SIGNAL("changed()"), self.__init_configuration) self.__store = Store( self.__store_config.get_store_id(), self.__store_path, self.STORE_CONFIG_DIR + "/" + self.STORE_CONFIG_FILE_NAME, self.STORE_CONFIG_DIR + "/" + self.STORE_TAGS_FILE_NAME, self.STORE_CONFIG_DIR + "/" + self.STORE_VOCABULARY_FILE_NAME, self.STORE_NAVIGATION_DIRS, self.STORE_STORAGE_DIRS, self.STORE_DESCRIBING_NAV_DIRS, self.STORE_CATEGORIZING_NAV_DIRS, self.STORE_EXPIRED_DIRS, self.__main_config.get_expiry_prefix(), ) self.__store.init() if self.__tag_dialog is None: self.__tag_dialog = TagDialogController( self.__store.get_name(), self.__store.get_id(), self.__main_config.get_max_tags(), self.__main_config.get_tag_seperator(), self.__main_config.get_expiry_prefix(), ) self.__tag_dialog.get_view().setModal(True) # self.__tag_dialog.set_parent(self.sender().get_view()) self.__tag_dialog.connect(self.__tag_dialog, QtCore.SIGNAL("tag_item"), self.__tag_item_action) self.__tag_dialog.connect(self.__tag_dialog, QtCore.SIGNAL("handle_cancel()"), self.__handle_tag_cancel) ## configure the tag dialog with the according settings format_setting = self.__store.get_datestamp_format() datestamp_hidden = self.__store.get_datestamp_hidden() ## check if auto datestamp is enabled if format_setting != EDateStampFormat.DISABLED: self.__tag_dialog.show_datestamp(True) ## set the format format = None if format_setting == EDateStampFormat.DAY: format = TsConstants.DATESTAMP_FORMAT_DAY elif format_setting == EDateStampFormat.MONTH: format = TsConstants.DATESTAMP_FORMAT_MONTH self.__tag_dialog.set_datestamp_format(format, datestamp_hidden) self.__tag_dialog.show_category_line(self.__store.get_show_category_line()) self.__tag_dialog.set_category_mandatory(self.__store.get_category_mandatory()) ## check if the given item really exists in the store if not self.__store.item_exists(self.__item_name): self.__emit_not_retagable(self.trUtf8("%s: There is no such item recorded in the store" % self.__item_name)) return self.__set_tag_information_to_dialog(self.__store) if self.__retag_mode: self.__handle_retag_mode() self.__tag_dialog.show_dialog() def __emit_not_retagable(self, err_msg): self.__log.error(err_msg) self.emit(QtCore.SIGNAL("retag_error")) def __handle_retag(self, store_name, file_name_list, new_describing_tags, new_categorizing_tags): for file_name in file_name_list: ## first of all remove the old references self.__store.remove_file(file_name) ## now create the new navigation structure try: self.__store.add_item_with_tags(file_name, new_describing_tags, new_categorizing_tags) except InodeShortageException, e: self.__tag_dialog.show_message( self.trUtf8("The Number of free inodes is below the threshold of %s%" % e.get_threshold()) ) # raise except Exception, e: self.__tag_dialog.show_message(self.trUtf8("An error occurred while tagging")) raise else:
class ReTagController(QtCore.QObject): """ object for calling the re-tag view. ************************ MANDATORY parameters: ************************ * application -> the parent qt-application object ()for installing the translator properly * store_path -> absolute path to the store of the item to be retagged (TIP: use the PathHelper object to resolve a relative path.) * item_name -> the name of the item to be renamed (exactly how it is defined in the tagfile) ************************ TIP: use the PathHelper object to resolve a relative path AND to extract the item name out of it. ************************ ************************ OPTIONAL parameters: ************************ * standalone_application -> default = False; set this to true if there * verbose -> set this to true for detailed output (DEVEL * retag_mode -> this application could even be used for a normal tagging procedure as well.) ************************ IMPORTANT!!! ************************ the start() method must be called in order to begin with the tagging procedure """ def __init__(self, application, store_path, item_name, retag_mode = True, verbose = False): QtCore.QObject.__init__(self) self.__log = None self.__main_config = None self.__store_config = None self.__tag_dialog = None self.__store = None self.__retag_mode = retag_mode self.__no_store_found = False self.__item_name = unicode(item_name) self.__store_path = store_path # the main application which has the translator installed self.__application = application self.LOG_LEVEL = logging.INFO if verbose: self.LOG_LEVEL = logging.DEBUG self.STORE_CONFIG_DIR = TsConstants.DEFAULT_STORE_CONFIG_DIR self.STORE_CONFIG_FILE_NAME = TsConstants.DEFAULT_STORE_CONFIG_FILENAME self.STORE_TAGS_FILE_NAME = TsConstants.DEFAULT_STORE_TAGS_FILENAME self.STORE_VOCABULARY_FILE_NAME = TsConstants.DEFAULT_STORE_VOCABULARY_FILENAME locale = unicode(QtCore.QLocale.system().name())[0:2] self.__translator = QtCore.QTranslator() if self.__translator.load("ts_" + locale + ".qm", "tsresources/"): self.__application.installTranslator(self.__translator) #get dir names for all available languages self.CURRENT_LANGUAGE = self.trUtf8("en") self.STORE_STORAGE_DIRS = [] self.STORE_DESCRIBING_NAV_DIRS = [] self.STORE_CATEGORIZING_NAV_DIRS = [] self.STORE_EXPIRED_DIRS = [] self.STORE_NAVIGATION_DIRS = [] self.SUPPORTED_LANGUAGES = TsConstants.DEFAULT_SUPPORTED_LANGUAGES self.MAX_CLOUD_TAGS = TsConstants.DEFAULT_MAX_CLOUD_TAGS self.__store_dict = {} for lang in self.SUPPORTED_LANGUAGES: self.change_language(lang) self.STORE_NAVIGATION_DIRS.append(self.trUtf8("navigation")) self.STORE_STORAGE_DIRS.append(self.trUtf8("storage"))#self.STORE_STORAGE_DIR_EN)) self.STORE_DESCRIBING_NAV_DIRS.append(self.trUtf8("descriptions"))#self.STORE_DESCRIBING_NAVIGATION_DIR_EN)) self.STORE_CATEGORIZING_NAV_DIRS.append(self.trUtf8("categories"))#self.STORE_CATEGORIZING_NAVIGATION_DIR_EN)) self.STORE_EXPIRED_DIRS.append(self.trUtf8("expired_items"))#STORE_EXPIRED_DIR_EN)) ## reset language self.change_language(self.CURRENT_LANGUAGE) self.__log = LogHelper.get_app_logger(self.LOG_LEVEL) def start(self): """ call this method to actually start the tagging procedure """ self.__init_configuration() def __init_configuration(self): """ initializes the configuration. This method is called every time the config file changes """ self.__log.info("initialize configuration") self.__main_config = ConfigWrapper(TsConstants.CONFIG_PATH) if self.__main_config is None: self.__emit_not_retagable(self.trUtf8("No config file found for the given path")) return ## check if there has been found an appropriate store_path in the config if self.__store_path is None: self.__emit_not_retagable(self.trUtf8("No store found for the given path")) return else: self.__store_config = ConfigWrapper(self.__store_path) self.__prepare_store_params() self.CURRENT_LANGUAGE = self.__main_config.get_current_language(); self.change_language(self.CURRENT_LANGUAGE) #self.__main_config.connect(self.__main_config, QtCore.SIGNAL("changed()"), self.__init_configuration) self.__store = Store(self.__store_config.get_store_id(), self.__store_path, self.STORE_CONFIG_DIR + "/" + self.STORE_CONFIG_FILE_NAME, self.STORE_CONFIG_DIR + "/" + self.STORE_TAGS_FILE_NAME, self.STORE_CONFIG_DIR + "/" + self.STORE_VOCABULARY_FILE_NAME, self.STORE_NAVIGATION_DIRS, self.STORE_STORAGE_DIRS, self.STORE_DESCRIBING_NAV_DIRS, self.STORE_CATEGORIZING_NAV_DIRS, self.STORE_EXPIRED_DIRS, self.__main_config.get_expiry_prefix()) self.__store.init() if self.__tag_dialog is None: self.__tag_dialog = TagDialogController(self.__store.get_name(), self.__store.get_id(), self.__main_config.get_max_tags(), self.__main_config.get_tag_seperator(), self.__main_config.get_expiry_prefix()) self.__tag_dialog.get_view().setModal(True) #self.__tag_dialog.set_parent(self.sender().get_view()) self.__tag_dialog.connect(self.__tag_dialog, QtCore.SIGNAL("tag_item"), self.__tag_item_action) self.__tag_dialog.connect(self.__tag_dialog, QtCore.SIGNAL("handle_cancel()"), self.__handle_tag_cancel) ## configure the tag dialog with the according settings format_setting = self.__store.get_datestamp_format() datestamp_hidden = self.__store.get_datestamp_hidden() ## check if auto datestamp is enabled if format_setting != EDateStampFormat.DISABLED: self.__tag_dialog.show_datestamp(True) ## set the format format = None if format_setting == EDateStampFormat.DAY: format = TsConstants.DATESTAMP_FORMAT_DAY elif format_setting == EDateStampFormat.MONTH: format = TsConstants.DATESTAMP_FORMAT_MONTH self.__tag_dialog.set_datestamp_format(format, datestamp_hidden) self.__tag_dialog.show_category_line(self.__store.get_show_category_line()) self.__tag_dialog.set_category_mandatory(self.__store.get_category_mandatory()) ## check if the given item really exists in the store if not self.__store.item_exists(self.__item_name): self.__emit_not_retagable(self.trUtf8("%s: There is no such item recorded in the store" % self.__item_name)) return self.__set_tag_information_to_dialog(self.__store) if self.__retag_mode: self.__handle_retag_mode() self.__tag_dialog.show_dialog() def __emit_not_retagable(self, err_msg): self.__log.error(err_msg) self.emit(QtCore.SIGNAL("retag_error")) def __handle_retag(self, store_name, file_name_list, new_describing_tags, new_categorizing_tags): for file_name in file_name_list: ## first of all remove the old references self.__store.remove_file(file_name) ## now create the new navigation structure try: self.__store.add_item_with_tags(file_name, new_describing_tags, new_categorizing_tags) except InodeShortageException, e: self.__tag_dialog.show_message(self.trUtf8("The Number of free inodes is below the threshold of %s%" % e.get_threshold())) #raise except Exception, e: self.__tag_dialog.show_message(self.trUtf8("An error occurred while tagging")) raise else: