def AddDefaultsButton( self, defaults_callable, add_callable ): import_menu_items = [] all_call = HydrusData.Call( self._AddAllDefaults, defaults_callable, add_callable ) some_call = HydrusData.Call( self._AddSomeDefaults, defaults_callable, add_callable ) import_menu_items.append( ( 'normal', 'add them all', 'Load all the defaults.', all_call ) ) import_menu_items.append( ( 'normal', 'select from a list', 'Load some of the defaults.', some_call ) ) self.AddMenuButton( 'add defaults', import_menu_items )
def _GetListCtrlMenu(self): selected_file_seeds = self._list_ctrl.GetData(only_selected=True) if len(selected_file_seeds) == 0: raise HydrusExceptions.DataMissing() menu = QW.QMenu() can_show_files_in_new_page = True in ( file_seed.HasHash() for file_seed in selected_file_seeds) if can_show_files_in_new_page: ClientGUIMenus.AppendMenuItem( menu, 'open selected import files in a new page', 'Show all the known selected files in a new thumbnail page. This is complicated, so cannot always be guaranteed, even if the import says \'success\'.', self._ShowSelectionInNewPage) ClientGUIMenus.AppendSeparator(menu) ClientGUIMenus.AppendMenuItem( menu, 'copy sources', 'Copy all the selected sources to clipboard.', self._CopySelectedFileSeedData) ClientGUIMenus.AppendMenuItem( menu, 'copy notes', 'Copy all the selected notes to clipboard.', self._CopySelectedNotes) ClientGUIMenus.AppendSeparator(menu) ClientGUIMenus.AppendMenuItem( menu, 'open sources', 'Open all the selected sources in your file explorer or web browser.', self._OpenSelectedFileSeedData) ClientGUIMenus.AppendSeparator(menu) ClientGUIMenus.AppendMenuItem( menu, 'try again', 'Reset the progress of all the selected imports.', HydrusData.Call(self._SetSelected, CC.STATUS_UNKNOWN)) ClientGUIMenus.AppendMenuItem( menu, 'skip', 'Skip all the selected imports.', HydrusData.Call(self._SetSelected, CC.STATUS_SKIPPED)) ClientGUIMenus.AppendMenuItem(menu, 'delete from list', 'Remove all the selected imports.', HydrusData.Call(self._DeleteSelected)) return menu
def _GetListCtrlMenu( self ): selected_gallery_seeds = self._list_ctrl.GetData( only_selected = True ) if len( selected_gallery_seeds ) == 0: raise HydrusExceptions.DataMissing() menu = QW.QMenu() ClientGUIMenus.AppendMenuItem( menu, 'copy urls', 'Copy all the selected urls to clipboard.', self._CopySelectedGalleryURLs ) ClientGUIMenus.AppendMenuItem( menu, 'copy notes', 'Copy all the selected notes to clipboard.', self._CopySelectedNotes ) ClientGUIMenus.AppendSeparator( menu ) ClientGUIMenus.AppendMenuItem( menu, 'open urls', 'Open all the selected urls in your web browser.', self._OpenSelectedGalleryURLs ) ClientGUIMenus.AppendSeparator( menu ) if not self._read_only: ClientGUIMenus.AppendMenuItem( menu, 'try again (just this one page)', 'Schedule this url to occur again.', HydrusData.Call( self._TrySelectedAgain, False ) ) if self._can_generate_more_pages: ClientGUIMenus.AppendMenuItem( menu, 'try again (and allow search to continue)', 'Schedule this url to occur again and continue.', HydrusData.Call( self._TrySelectedAgain, True ) ) ClientGUIMenus.AppendMenuItem( menu, 'skip', 'Skip all the selected urls.', HydrusData.Call( self._SetSelected, CC.STATUS_SKIPPED ) ) return menu
def CallRepeatingQtSafe( self, window, initial_delay, period, func, *args, **kwargs ): call = HydrusData.Call( func, *args, **kwargs ) job = ClientThreading.QtAwareRepeatingJob(self, self._job_scheduler, window, initial_delay, period, call) self._job_scheduler.AddJob( job ) return job
def CallRepeating( self, initial_delay, period, func, *args, **kwargs ): call = HydrusData.Call( func, *args, **kwargs ) job = HydrusThreading.RepeatingJob( self, self._job_scheduler, initial_delay, period, call ) self._job_scheduler.AddJob( job ) return job
def CallLater( self, initial_delay, func, *args, **kwargs ): call = HydrusData.Call( func, *args, **kwargs ) job = HydrusThreading.SingleJob( self, self._job_scheduler, initial_delay, call ) self._job_scheduler.AddJob( job ) return job
def CallRepeating( self, initial_delay, period, func, *args, **kwargs ) -> HydrusThreading.RepeatingJob: job_scheduler = self._GetAppropriateJobScheduler( period ) call = HydrusData.Call( func, *args, **kwargs ) job = HydrusThreading.RepeatingJob( self, job_scheduler, initial_delay, period, call ) job_scheduler.AddJob( job ) return job
def CallLater( self, initial_delay, func, *args, **kwargs ) -> HydrusThreading.SingleJob: job_scheduler = self._GetAppropriateJobScheduler( initial_delay ) call = HydrusData.Call( func, *args, **kwargs ) job = HydrusThreading.SingleJob( self, job_scheduler, initial_delay, call ) job_scheduler.AddJob( job ) return job
def CallLaterQtSafe(self, window, initial_delay, label, func, *args, **kwargs): call = HydrusData.Call(func, *args, **kwargs) call.SetLabel(label) job = ClientThreading.QtAwareJob(self, self._job_scheduler, window, initial_delay, call) self._job_scheduler.AddJob(job) return job
def AddServiceKeysToMenu(menu, service_keys, submenu_name, description, bare_call): menu_tuples = [] services_manager = HG.client_controller.services_manager for service_key in service_keys: label = services_manager.GetName(service_key) this_call = HydrusData.Call(bare_call, service_key) menu_tuples.append((label, description, this_call)) ClientGUIMenus.AppendMenuOrItem(menu, submenu_name, menu_tuples)
def _GetListCtrlMenu(self): selected_file_seeds = self._list_ctrl.GetData(only_selected=True) if len(selected_file_seeds) == 0: raise HydrusExceptions.DataMissing() menu = QW.QMenu() can_show_files_in_new_page = True in ( file_seed.HasHash() for file_seed in selected_file_seeds) if can_show_files_in_new_page: ClientGUIMenus.AppendMenuItem( menu, 'open selected import files in a new page', 'Show all the known selected files in a new thumbnail page. This is complicated, so cannot always be guaranteed, even if the import says \'success\'.', self._ShowSelectionInNewPage) ClientGUIMenus.AppendSeparator(menu) ClientGUIMenus.AppendMenuItem( menu, 'copy sources', 'Copy all the selected sources to clipboard.', self._CopySelectedFileSeedData) ClientGUIMenus.AppendMenuItem( menu, 'copy notes', 'Copy all the selected notes to clipboard.', self._CopySelectedNotes) if len(selected_file_seeds) == 1: ClientGUIMenus.AppendSeparator(menu) (selected_file_seed, ) = selected_file_seeds hash_types_to_hashes = selected_file_seed.GetHashTypesToHashes() if len(hash_types_to_hashes) == 0: ClientGUIMenus.AppendMenuLabel(menu, 'no hashes yet') else: hash_submenu = QW.QMenu(menu) for hash_type in ('sha256', 'md5', 'sha1', 'sha512'): if hash_type in hash_types_to_hashes: h = hash_types_to_hashes[hash_type] ClientGUIMenus.AppendMenuLabel( hash_submenu, '{}:{}'.format(hash_type, h.hex())) ClientGUIMenus.AppendMenu(menu, hash_submenu, 'hashes') # if selected_file_seed.IsURLFileImport(): referral_url = selected_file_seed.GetReferralURL() primary_urls = sorted(selected_file_seed.GetPrimaryURLs()) source_urls = sorted(selected_file_seed.GetSourceURLs()) if referral_url is None and len(primary_urls) + len( source_urls) == 0: ClientGUIMenus.AppendMenuLabel(menu, 'no additional urls') else: url_submenu = QW.QMenu(menu) if referral_url is not None: ClientGUIMenus.AppendMenuLabel(url_submenu, 'referral url:') ClientGUIMenus.AppendMenuLabel(url_submenu, referral_url) if len(primary_urls) > 0: ClientGUIMenus.AppendSeparator(url_submenu) ClientGUIMenus.AppendMenuLabel(url_submenu, 'primary urls:') for url in primary_urls: ClientGUIMenus.AppendMenuLabel(url_submenu, url) if len(source_urls) > 0: ClientGUIMenus.AppendSeparator(url_submenu) ClientGUIMenus.AppendMenuLabel(url_submenu, 'source urls:') for url in source_urls: ClientGUIMenus.AppendMenuLabel(url_submenu, url) ClientGUIMenus.AppendMenu(menu, url_submenu, 'additional urls') # tags = list(selected_file_seed.GetExternalTags()) tag_sort = ClientTagSorting.TagSort( sort_type=ClientTagSorting.SORT_BY_HUMAN_TAG, sort_order=CC.SORT_ASC) ClientTagSorting.SortTags(tag_sort, tags) if len(tags) == 0: ClientGUIMenus.AppendMenuLabel(menu, 'no parsed tags') else: tag_submenu = QW.QMenu(menu) for tag in tags: ClientGUIMenus.AppendMenuLabel(tag_submenu, tag) ClientGUIMenus.AppendMenu(menu, tag_submenu, 'parsed tags') ClientGUIMenus.AppendSeparator(menu) ClientGUIMenus.AppendMenuItem( menu, 'open sources', 'Open all the selected sources in your file explorer or web browser.', self._OpenSelectedFileSeedData) ClientGUIMenus.AppendSeparator(menu) ClientGUIMenus.AppendMenuItem( menu, 'try again', 'Reset the progress of all the selected imports.', HydrusData.Call(self._SetSelected, CC.STATUS_UNKNOWN)) ClientGUIMenus.AppendMenuItem( menu, 'skip', 'Skip all the selected imports.', HydrusData.Call(self._SetSelected, CC.STATUS_SKIPPED)) ClientGUIMenus.AppendMenuItem(menu, 'delete from list', 'Remove all the selected imports.', HydrusData.Call(self._DeleteSelected)) return menu
def AddLocalFilesMoveAddToMenu( win: QW.QWidget, menu: QW.QMenu, local_duplicable_to_file_service_keys: typing.Collection[bytes], local_moveable_from_and_to_file_service_keys: typing.Collection[ typing.Tuple[bytes, bytes]], multiple_selected: bool, process_application_command_call): if len(local_duplicable_to_file_service_keys) == 0 and len( local_moveable_from_and_to_file_service_keys) == 0: return local_action_menu = QW.QMenu(menu) if len(local_duplicable_to_file_service_keys) > 0: menu_tuples = [] for s_k in local_duplicable_to_file_service_keys: application_command = CAC.ApplicationCommand( command_type=CAC.APPLICATION_COMMAND_TYPE_CONTENT, data=(s_k, HC.CONTENT_TYPE_FILES, HC.CONTENT_UPDATE_ADD, None)) label = HG.client_controller.services_manager.GetName(s_k) description = 'Duplicate the files to this local file service.' call = HydrusData.Call(process_application_command_call, application_command) menu_tuples.append((label, description, call)) if multiple_selected: submenu_name = 'add selected to' else: submenu_name = 'add to' ClientGUIMenus.AppendMenuOrItem(local_action_menu, submenu_name, menu_tuples) if len(local_moveable_from_and_to_file_service_keys) > 0: menu_tuples = [] for (source_s_k, dest_s_k) in local_moveable_from_and_to_file_service_keys: application_command = CAC.ApplicationCommand( command_type=CAC.APPLICATION_COMMAND_TYPE_CONTENT, data=(dest_s_k, HC.CONTENT_TYPE_FILES, HC.CONTENT_UPDATE_MOVE, source_s_k)) label = 'from {} to {}'.format( HG.client_controller.services_manager.GetName(source_s_k), HG.client_controller.services_manager.GetName(dest_s_k)) description = 'Add the files to the destination and delete from the source.' call = HydrusData.Call(process_application_command_call, application_command) menu_tuples.append((label, description, call)) if multiple_selected: submenu_name = 'move selected' else: submenu_name = 'move' ClientGUIMenus.AppendMenuOrItem(local_action_menu, submenu_name, menu_tuples) ClientGUIMenus.AppendMenu(menu, local_action_menu, 'local services')