def handle_moves(self, menu): for submenu in menu.Submenus: self.handle_moves(submenu) # parse move operations for move in menu.Moves: move_from_menu = menu.getMenu(move.Old) if move_from_menu: # FIXME: this is assigned, but never used... move_to_menu = menu.getMenu(move.New) menus = move.New.split("/") oldparent = None while len(menus) > 0: if not oldparent: oldparent = menu newmenu = oldparent.getMenu(menus[0]) if not newmenu: newmenu = Menu() newmenu.Name = menus[0] if len(menus) > 1: newmenu.NotInXml = True oldparent.addSubmenu(newmenu) oldparent = newmenu menus.pop(0) newmenu += move_from_menu move_from_menu.Parent.Submenus.remove(move_from_menu)
def merge_legacy_dir(self, dir_, prefix, filename, parent): dir_ = _check_file_path(dir_, filename, TYPE_DIR) if dir_ and dir_ not in self._directory_dirs: self._directory_dirs.add(dir_) m = Menu() m.AppDirs.append(dir_) m.DirectoryDirs.append(dir_) m.Name = os.path.basename(dir_) m.NotInXml = True for item in os.listdir(dir_): try: if item == ".directory": m.Directories.append(item) elif os.path.isdir(os.path.join(dir_, item)): m.addSubmenu(self.merge_legacy_dir( os.path.join(dir_, item), prefix, filename, parent )) except UnicodeDecodeError: continue self.cache.add_menu_entries([dir_], prefix, True) menuentries = self.cache.get_menu_entries([dir_], False) for menuentry in menuentries: categories = menuentry.Categories if len(categories) == 0: r = Rule.fromFilename(Rule.TYPE_INCLUDE, menuentry.DesktopFileID) m.Rules.append(r) if not dir_ in parent.AppDirs: categories.append("Legacy") menuentry.Categories = categories return m