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 )
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
 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
Exemple #5
0
 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
Exemple #6
0
 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
Exemple #7
0
 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
Exemple #8
0
 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
Exemple #9
0
    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
Exemple #10
0
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
Exemple #12
0
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')