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_search_context = ClientSearch.LocationSearchContext( current_service_keys=[CC.LOCAL_FILE_SERVICE_KEY]) file_search_context = ClientSearch.FileSearchContext( location_search_context=location_search_context, 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 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 ) 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, ) )
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_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 ) 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 _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()
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()