Beispiel #1
0
 def __init__( self, name, path = '', export_type = HC.EXPORT_FOLDER_TYPE_REGULAR, delete_from_client_after_export = False, file_search_context = None, run_regularly = True, period = 3600, phrase = None, last_checked = 0, paused = False, run_now = False, last_error = '' ):
     
     HydrusSerialisable.SerialisableBaseNamed.__init__( self, name )
     
     if export_type == HC.EXPORT_FOLDER_TYPE_SYNCHRONISE:
         
         delete_from_client_after_export = False
         
     
     if file_search_context is None:
         
         default_location_context = HG.client_controller.new_options.GetDefaultLocalLocationContext()
         
         file_search_context = ClientSearch.FileSearchContext( location_context = default_location_context )
         
     
     if phrase is None:
         
         phrase = HG.client_controller.new_options.GetString( 'export_phrase' )
         
     
     self._path = path
     self._export_type = export_type
     self._delete_from_client_after_export = delete_from_client_after_export
     self._file_search_context = file_search_context
     self._run_regularly = run_regularly
     self._period = period
     self._phrase = phrase
     self._last_checked = last_checked
     self._paused = paused and not run_now
     self._run_now = run_now
     self._last_error = last_error
    def __init__(self, parent: QW.QWidget, predicate: ClientSearch.Predicate):

        QW.QWidget.__init__(self, parent)

        from hydrus.client.gui.search import ClientGUIACDropdown

        if predicate.GetType() != ClientSearch.PREDICATE_TYPE_OR_CONTAINER:

            raise Exception(
                'Launched an ORPredicateControl without an OR Pred!')

        predicates = predicate.GetValue()

        page_key = HydrusData.GenerateKey()

        file_search_context = ClientSearch.FileSearchContext(
            file_service_key=CC.LOCAL_FILE_SERVICE_KEY, predicates=predicates)

        self._search_control = ClientGUIACDropdown.AutoCompleteDropdownTagsRead(
            self,
            page_key,
            file_search_context,
            hide_favourites_edit_actions=True)

        vbox = QP.VBoxLayout()

        QP.AddToLayout(vbox, self._search_control, CC.FLAGS_EXPAND_BOTH_WAYS)

        self.setLayout(vbox)
 def _AddFolder( self ):
     
     new_options = HG.client_controller.new_options
     
     phrase = new_options.GetString( 'export_phrase' )
     
     name = 'export folder'
     path = ''
     export_type = HC.EXPORT_FOLDER_TYPE_REGULAR
     delete_from_client_after_export = False
     file_search_context = ClientSearch.FileSearchContext( file_service_key = CC.LOCAL_FILE_SERVICE_KEY )
     period = 15 * 60
     
     export_folder = ClientExporting.ExportFolder( name, path, export_type = export_type, delete_from_client_after_export = delete_from_client_after_export, file_search_context = file_search_context, period = period, phrase = phrase )
     
     with ClientGUITopLevelWindowsPanels.DialogEdit( self, 'edit export folder' ) as dlg:
         
         panel = EditExportFolderPanel( dlg, export_folder )
         
         dlg.SetPanel( panel )
         
         if dlg.exec() == QW.QDialog.Accepted:
             
             export_folder = panel.GetValue()
             
             export_folder.SetNonDupeName( self._GetExistingNames() )
             
             self._export_folders.AddDatas( ( export_folder, ) )
Beispiel #4
0
    def _AddNewFavouriteSearch(self, search_row=None):

        existing_folders_to_names = self._GetExistingFoldersToNames()

        existing_names = {
            name
            for name in itertools.chain.from_iterable(
                existing_folders_to_names.values())
        }

        if search_row is None:

            foldername = None
            name = 'new favourite search'

            default_local_file_service_key = HG.client_controller.services_manager.GetDefaultLocalFileServiceKey(
            )

            location_search_context = ClientSearch.LocationSearchContext(
                current_service_keys=[default_local_file_service_key])

            file_search_context = ClientSearch.FileSearchContext(
                location_search_context=location_search_context)

            synchronised = True
            media_sort = None
            media_collect = None

        else:

            (foldername, name, file_search_context, synchronised, media_sort,
             media_collect) = search_row

        name = HydrusData.GetNonDupeName(name, existing_names)

        with ClientGUITopLevelWindowsPanels.DialogEdit(
                self, 'edit favourite search') as dlg:

            panel = EditFavouriteSearchPanel(dlg, existing_folders_to_names,
                                             foldername, name,
                                             file_search_context, synchronised,
                                             media_sort, media_collect)

            dlg.SetPanel(panel)

            if dlg.exec() == QW.QDialog.Accepted:

                row = panel.GetValue()

                self._DeleteRow(row[0], row[1])

                self._favourite_searches.AddDatas((row, ))

                self._favourite_searches.Sort()
Beispiel #5
0
    def _AddNewFavouriteSearch(self, search_row=None):

        existing_folders_to_names = self._GetExistingFoldersToNames()

        existing_names = {
            name
            for name in itertools.chain.from_iterable(
                existing_folders_to_names.values())
        }

        if search_row is None:

            foldername = None
            name = 'new favourite search'
            file_search_context = ClientSearch.FileSearchContext(
                file_service_key=CC.LOCAL_FILE_SERVICE_KEY)
            synchronised = True
            media_sort = None
            media_collect = None

        else:

            (foldername, name, file_search_context, synchronised, media_sort,
             media_collect) = search_row

        name = HydrusData.GetNonDupeName(name, existing_names)

        with ClientGUITopLevelWindowsPanels.DialogEdit(
                self, 'edit favourite search') as dlg:

            panel = EditFavouriteSearchPanel(dlg, existing_folders_to_names,
                                             foldername, name,
                                             file_search_context, synchronised,
                                             media_sort, media_collect)

            dlg.SetPanel(panel)

            if dlg.exec() == QW.QDialog.Accepted:

                row = panel.GetValue()

                self._DeleteRow(row[0], row[1])

                self._favourite_searches.AddDatas((row, ))

                self._favourite_searches.Sort()
Beispiel #6
0
    def __init__(self, parent: QW.QWidget, predicate: ClientSearch.Predicate):

        QW.QWidget.__init__(self, parent)

        from hydrus.client.gui.search import ClientGUIACDropdown

        if predicate.GetType() != ClientSearch.PREDICATE_TYPE_OR_CONTAINER:

            raise Exception(
                'Launched an ORPredicateControl without an OR Pred!')

        predicates = predicate.GetValue()

        page_key = HydrusData.GenerateKey()

        location_context = HG.client_controller.new_options.GetDefaultLocalLocationContext(
        )

        file_search_context = ClientSearch.FileSearchContext(
            location_context=location_context, predicates=predicates)

        self._search_control = ClientGUIACDropdown.AutoCompleteDropdownTagsRead(
            self,
            page_key,
            file_search_context,
            hide_favourites_edit_actions=True)

        self._search_control.setMinimumWidth(
            ClientGUIFunctions.ConvertTextToPixelWidth(self._search_control,
                                                       64))

        vbox = QP.VBoxLayout()

        QP.AddToLayout(vbox, self._search_control, CC.FLAGS_EXPAND_BOTH_WAYS)

        self.setLayout(vbox)

        ClientGUIFunctions.SetFocusLater(self._search_control)
Beispiel #7
0
    def test_duplicates(self):

        self._dupe_hashes = [HydrusData.GenerateKey() for i in range(16)]
        self._second_group_dupe_hashes = [
            HydrusData.GenerateKey() for i in range(4)
        ]
        self._similar_looking_alternate_hashes = [
            HydrusData.GenerateKey() for i in range(5)
        ]
        self._similar_looking_false_positive_hashes = [
            HydrusData.GenerateKey() for i in range(5)
        ]

        self._all_hashes = set()

        self._all_hashes.update(self._dupe_hashes)
        self._all_hashes.update(self._second_group_dupe_hashes)
        self._all_hashes.update(self._similar_looking_alternate_hashes)
        self._all_hashes.update(self._similar_looking_false_positive_hashes)

        self._king_hash = self._dupe_hashes[0]
        self._second_group_king_hash = self._second_group_dupe_hashes[0]
        self._false_positive_king_hash = self._similar_looking_false_positive_hashes[
            0]
        self._alternate_king_hash = self._similar_looking_alternate_hashes[0]

        self._our_main_dupe_group_hashes = set([self._king_hash])
        self._our_second_dupe_group_hashes = set(
            [self._second_group_king_hash])
        self._our_alt_dupe_group_hashes = set([self._alternate_king_hash])
        self._our_fp_dupe_group_hashes = set([self._false_positive_king_hash])

        n = len(self._all_hashes)

        self._num_free_agents = n

        # initial number pair combinations is (n(n-1))/2
        self._expected_num_potentials = int(n * (n - 1) / 2)

        size_pred = ClientSearch.Predicate(
            ClientSearch.PREDICATE_TYPE_SYSTEM_SIZE,
            ('=', 65535, HydrusData.ConvertUnitToInt('B')))

        location_search_context = ClientSearch.LocationSearchContext(
            current_service_keys=[CC.LOCAL_FILE_SERVICE_KEY])

        self._file_search_context = ClientSearch.FileSearchContext(
            location_search_context=location_search_context,
            predicates=[size_pred])

        self._import_and_find_dupes()

        self._test_initial_state()

        self._test_initial_better_worse()
        self._test_initial_king_usurp()
        self._test_initial_same_quality()

        self._test_explicit_set_new_king()

        self._test_establish_second_group()
        self._test_poach_better()
        self._test_poach_same()
        self._test_group_merge()

        self._test_establish_false_positive_group()
        self._test_false_positive()

        self._test_establish_alt_group()
        self._test_alt()

        self._test_expand_false_positive()
        self._test_expand_alt()

        self._test_dissolve()