Modernized progress window GUI

Following the refactoring that has been initiated in pdfmasher's
"vala" branch, I pushed more progress window logic into the
core.

The UI code is now a bit dumber than it used to be, and the core
now directly decides when the progress window is shown and
hidden. The "job finished" notification is also directly sent by the
core. Job description update logic is handled by a core gui
textfield.

Job description contsants also moved to the core, triggering
a localisation migration from "ui" to "core".
This commit is contained in:
Virgil Dupras 2013-08-03 16:27:36 -04:00
parent 8e15d89a2e
commit e5ce6680ca
33 changed files with 615 additions and 727 deletions

View File

@ -255,7 +255,8 @@ def build_cocoa_bridging_interfaces(edition):
add_to_pythonpath('cocoa') add_to_pythonpath('cocoa')
add_to_pythonpath('cocoalib') add_to_pythonpath('cocoalib')
from cocoa.inter import (PyGUIObject, GUIObjectView, PyColumns, ColumnsView, PyOutline, from cocoa.inter import (PyGUIObject, GUIObjectView, PyColumns, ColumnsView, PyOutline,
OutlineView, PySelectableList, SelectableListView, PyTable, TableView, PyBaseApp, PyFairware) OutlineView, PySelectableList, SelectableListView, PyTable, TableView, PyBaseApp,
PyFairware, PyTextField, ProgressWindowView, PyProgressWindow)
from inter.deletion_options import PyDeletionOptions, DeletionOptionsView from inter.deletion_options import PyDeletionOptions, DeletionOptionsView
from inter.details_panel import PyDetailsPanel, DetailsPanelView from inter.details_panel import PyDetailsPanel, DetailsPanelView
from inter.directory_outline import PyDirectoryOutline, DirectoryOutlineView from inter.directory_outline import PyDirectoryOutline, DirectoryOutlineView
@ -270,12 +271,13 @@ def build_cocoa_bridging_interfaces(edition):
allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyBaseApp, PyFairware, allclasses = [PyGUIObject, PyColumns, PyOutline, PySelectableList, PyTable, PyBaseApp, PyFairware,
PyDetailsPanel, PyDirectoryOutline, PyPrioritizeDialog, PyPrioritizeList, PyProblemDialog, PyDetailsPanel, PyDirectoryOutline, PyPrioritizeDialog, PyPrioritizeList, PyProblemDialog,
PyIgnoreListDialog, PyDeletionOptions, PyResultTable, PyStatsLabel, PyDupeGuruBase, PyIgnoreListDialog, PyDeletionOptions, PyResultTable, PyStatsLabel, PyDupeGuruBase,
appmod.PyDupeGuru] PyTextField, PyProgressWindow, appmod.PyDupeGuru]
for class_ in allclasses: for class_ in allclasses:
objp.o2p.generate_objc_code(class_, 'cocoa/autogen', inherit=True) objp.o2p.generate_objc_code(class_, 'cocoa/autogen', inherit=True)
allclasses = [GUIObjectView, ColumnsView, OutlineView, SelectableListView, TableView, allclasses = [GUIObjectView, ColumnsView, OutlineView, SelectableListView, TableView,
DetailsPanelView, DirectoryOutlineView, PrioritizeDialogView, PrioritizeListView, DetailsPanelView, DirectoryOutlineView, PrioritizeDialogView, PrioritizeListView,
IgnoreListDialogView, DeletionOptionsView, ResultTableView, StatsLabelView, DupeGuruView] IgnoreListDialogView, DeletionOptionsView, ResultTableView, StatsLabelView,
ProgressWindowView, DupeGuruView]
clsspecs = [objp.o2p.spec_from_python_class(class_) for class_ in allclasses] clsspecs = [objp.o2p.spec_from_python_class(class_) for class_ in allclasses]
objp.p2o.generate_python_proxy_code_from_clsspec(clsspecs, 'build/CocoaViews.m') objp.p2o.generate_python_proxy_code_from_clsspec(clsspecs, 'build/CocoaViews.m')
build_cocoa_ext('CocoaViews', 'cocoa/inter', ['build/CocoaViews.m', 'build/ObjP.m']) build_cocoa_ext('CocoaViews', 'cocoa/inter', ['build/CocoaViews.m', 'build/ObjP.m'])

View File

@ -15,6 +15,7 @@ http://www.hardcoded.net/licenses/bsd_license
#import "IgnoreListDialog.h" #import "IgnoreListDialog.h"
#import "HSFairwareAboutBox.h" #import "HSFairwareAboutBox.h"
#import "HSRecentFiles.h" #import "HSRecentFiles.h"
#import "HSProgressWindow.h"
@interface AppDelegateBase : NSObject @interface AppDelegateBase : NSObject
{ {
@ -27,6 +28,7 @@ http://www.hardcoded.net/licenses/bsd_license
DirectoryPanel *_directoryPanel; DirectoryPanel *_directoryPanel;
DetailsPanel *_detailsPanel; DetailsPanel *_detailsPanel;
IgnoreListDialog *_ignoreListDialog; IgnoreListDialog *_ignoreListDialog;
HSProgressWindow *_progressWindow;
NSWindowController *_preferencesPanel; NSWindowController *_preferencesPanel;
HSFairwareAboutBox *_aboutBox; HSFairwareAboutBox *_aboutBox;
HSRecentFiles *_recentResults; HSRecentFiles *_recentResults;

View File

@ -74,6 +74,8 @@ http://www.hardcoded.net/licenses/bsd_license
_directoryPanel = [self createDirectoryPanel]; _directoryPanel = [self createDirectoryPanel];
_detailsPanel = [self createDetailsPanel]; _detailsPanel = [self createDetailsPanel];
_ignoreListDialog = [[IgnoreListDialog alloc] initWithPyRef:[model ignoreListDialog]]; _ignoreListDialog = [[IgnoreListDialog alloc] initWithPyRef:[model ignoreListDialog]];
_progressWindow = [[HSProgressWindow alloc] initWithPyRef:[[self model] progressWindow] view:nil];
[_progressWindow setParentWindow:[_resultWindow window]];
_aboutBox = nil; // Lazily loaded _aboutBox = nil; // Lazily loaded
_preferencesPanel = nil; // Lazily loaded _preferencesPanel = nil; // Lazily loaded
[[[self directoryPanel] window] makeKeyAndOrderFront:self]; [[[self directoryPanel] window] makeKeyAndOrderFront:self];
@ -197,7 +199,6 @@ http://www.hardcoded.net/licenses/bsd_license
/* Delegate */ /* Delegate */
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{ {
[[ProgressController mainProgressController] setWorker:model];
[model initialRegistrationSetup]; [model initialRegistrationSetup];
[model loadSession]; [model loadSession];
} }

View File

@ -42,9 +42,6 @@ http://www.hardcoded.net/licenses/bsd_license
[matches setTarget:self]; [matches setTarget:self];
[matches setDoubleAction:@selector(openClicked)]; [matches setDoubleAction:@selector(openClicked)];
[self adjustUIToLocalization]; [self adjustUIToLocalization];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jobStarted:) name:JobStarted object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jobInProgress:) name:JobInProgress object:nil];
return self; return self;
} }
@ -340,22 +337,6 @@ http://www.hardcoded.net/licenses/bsd_license
previewPanel = nil; previewPanel = nil;
} }
- (void)jobInProgress:(NSNotification *)aNotification
{
[Dialogs showMessage:NSLocalizedString(@"A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.", @"")];
}
- (void)jobStarted:(NSNotification *)aNotification
{
[[self window] makeKeyAndOrderFront:nil];
NSDictionary *ui = [aNotification userInfo];
NSString *desc = [ui valueForKey:@"desc"];
[[ProgressController mainProgressController] setJobDesc:desc];
NSString *jobid = [ui valueForKey:@"jobid"];
[[ProgressController mainProgressController] setJobId:jobid];
[[ProgressController mainProgressController] showSheetForParent:[self window]];
}
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem - (BOOL)validateToolbarItem:(NSToolbarItem *)theItem
{ {
return ![[ProgressController mainProgressController] isShown]; return ![[ProgressController mainProgressController] isShown];

View File

@ -1,3 +1,4 @@
from cocoa.inter import PyTextField, PyProgressWindow
from .deletion_options import PyDeletionOptions from .deletion_options import PyDeletionOptions
from .details_panel import PyDetailsPanel from .details_panel import PyDetailsPanel
from .directory_outline import PyDirectoryOutline from .directory_outline import PyDirectoryOutline

View File

@ -1,23 +1,8 @@
import logging import logging
from objp.util import pyref, dontwrap from objp.util import pyref, dontwrap
from jobprogress import job from cocoa import install_exception_hook, install_cocoa_logger, patch_threaded_job_performer, proxy
import cocoa
from cocoa import install_exception_hook, install_cocoa_logger, proxy
from cocoa.inter import PyFairware, FairwareView from cocoa.inter import PyFairware, FairwareView
from hscommon.trans import trget
from core.app import JobType
tr = trget('ui')
JOBID2TITLE = {
JobType.Scan: tr("Scanning for duplicates"),
JobType.Load: tr("Loading"),
JobType.Move: tr("Moving"),
JobType.Copy: tr("Copying"),
JobType.Delete: tr("Sending to Trash"),
}
class DupeGuruView(FairwareView): class DupeGuruView(FairwareView):
def askYesNoWithPrompt_(self, prompt: str) -> bool: pass def askYesNoWithPrompt_(self, prompt: str) -> bool: pass
@ -26,16 +11,14 @@ class DupeGuruView(FairwareView):
def selectDestFileWithPrompt_extension_(self, prompt: str, extension: str) -> str: pass def selectDestFileWithPrompt_extension_(self, prompt: str, extension: str) -> str: pass
class PyDupeGuruBase(PyFairware): class PyDupeGuruBase(PyFairware):
FOLLOW_PROTOCOLS = ['Worker']
@dontwrap @dontwrap
def _init(self, modelclass): def _init(self, modelclass):
logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(message)s') logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(message)s')
install_exception_hook() install_exception_hook()
install_cocoa_logger() install_cocoa_logger()
patch_threaded_job_performer()
appdata = proxy.getAppdataPath() appdata = proxy.getAppdataPath()
self.model = modelclass(self, appdata) self.model = modelclass(self, appdata)
self.progress = cocoa.ThreadedJobPerformer()
#---Sub-proxies #---Sub-proxies
def detailsPanel(self) -> pyref: def detailsPanel(self) -> pyref:
@ -56,6 +39,9 @@ class PyDupeGuruBase(PyFairware):
def ignoreListDialog(self) -> pyref: def ignoreListDialog(self) -> pyref:
return self.model.ignore_list_dialog return self.model.ignore_list_dialog
def progressWindow(self) -> pyref:
return self.model.progress_window
def deletionOptions(self) -> pyref: def deletionOptions(self) -> pyref:
return self.model.deletion_options return self.model.deletion_options
@ -157,31 +143,6 @@ class PyDupeGuruBase(PyFairware):
def setCopyMoveDestType_(self, copymove_dest_type: int): def setCopyMoveDestType_(self, copymove_dest_type: int):
self.model.options['copymove_dest_type'] = copymove_dest_type self.model.options['copymove_dest_type'] = copymove_dest_type
#---Worker
def getJobProgress(self) -> object: # NSNumber
try:
return self.progress.last_progress
except AttributeError:
# I have *no idea* why this can possible happen (last_progress is always set by
# create_job() *before* any threaded job notification, which shows the progress panel,
# is sent), but it happens anyway, so there we go. ref: #106
return -1
def getJobDesc(self) -> str:
try:
return self.progress.last_desc
except AttributeError:
# see getJobProgress
return ''
def cancelJob(self):
self.progress.job_cancelled = True
def jobCompleted_(self, jobid: str):
result = self.model._job_completed(jobid, self.progress.last_error)
if not result:
self.progress.reraise_if_error()
#--- model --> view #--- model --> view
@dontwrap @dontwrap
def open_path(self, path): def open_path(self, path):
@ -191,18 +152,6 @@ class PyDupeGuruBase(PyFairware):
def reveal_path(self, path): def reveal_path(self, path):
proxy.revealPath_(str(path)) proxy.revealPath_(str(path))
@dontwrap
def start_job(self, jobid, func, args=()):
try:
j = self.progress.create_job()
args = tuple([j] + list(args))
self.progress.run_threaded(func, args=args)
except job.JobInProgressError:
proxy.postNotification_userInfo_('JobInProgress', None)
else:
ud = {'desc': JOBID2TITLE[jobid], 'jobid':jobid}
proxy.postNotification_userInfo_('JobStarted', ud)
@dontwrap @dontwrap
def ask_yes_no(self, prompt): def ask_yes_no(self, prompt):
return self.callback.askYesNoWithPrompt_(prompt) return self.callback.askYesNoWithPrompt_(prompt)

View File

@ -50,7 +50,8 @@ def build(ctx):
'views/HSTableView', 'views/HSOutlineView', 'views/NSIndexPathAdditions', 'views/HSTableView', 'views/HSOutlineView', 'views/NSIndexPathAdditions',
'views/NSTableViewAdditions', 'views/NSTableViewAdditions',
'controllers/HSColumns', 'controllers/HSGUIController', 'controllers/HSTable', 'controllers/HSColumns', 'controllers/HSGUIController', 'controllers/HSTable',
'controllers/HSOutline', 'controllers/HSPopUpList', 'controllers/HSSelectableList'] 'controllers/HSOutline', 'controllers/HSPopUpList', 'controllers/HSSelectableList',
'controllers/HSTextField', 'controllers/HSProgressWindow']
cocoalib_src = [cocoalib_node.find_node(usename + '.m') for usename in cocoalib_uses] + cocoalib_node.ant_glob('autogen/*.m') cocoalib_src = [cocoalib_node.find_node(usename + '.m') for usename in cocoalib_uses] + cocoalib_node.ant_glob('autogen/*.m')
project_folders = ['autogen', 'base', ctx.env.DGEDITION] project_folders = ['autogen', 'base', ctx.env.DGEDITION]
project_src = sum([ctx.srcnode.ant_glob('%s/*.m' % folder) for folder in project_folders], []) project_src = sum([ctx.srcnode.ant_glob('%s/*.m' % folder) for folder in project_folders], [])

View File

@ -16,19 +16,14 @@ from .CocoaProxy import CocoaProxy
proxy = CocoaProxy() proxy = CocoaProxy()
try: def autoreleasepool(func):
from jobprogress.performer import ThreadedJobPerformer as ThreadedJobPerformerBase def wrapper(*args, **kwargs):
class ThreadedJobPerformer(ThreadedJobPerformerBase): proxy.createPool()
def _async_run(self, *args): try:
proxy.createPool() func(*args, **kwargs)
try: finally:
ThreadedJobPerformerBase._async_run(self, *args) proxy.destroyPool()
finally: return wrapper
proxy.destroyPool()
except ImportError:
# jobprogress isn't used in all HS apps
pass
def as_fetch(as_list, as_type, step_size=1000): def as_fetch(as_list, as_type, step_size=1000):
"""When fetching items from a very big list through applescript, the connection with the app """When fetching items from a very big list through applescript, the connection with the app
@ -113,3 +108,10 @@ class CocoaHandler(logging.Handler):
def install_cocoa_logger(): def install_cocoa_logger():
logging.getLogger().addHandler(CocoaHandler()) logging.getLogger().addHandler(CocoaHandler())
def patch_threaded_job_performer():
# _async_run, under cocoa, has to be run within an autorelease pool to prevent leaks.
# You only need this patch is you use one of CocoaProxy's function (which allocate objc
# structures) inside a threaded job.
from jobprogress.performer import ThreadedJobPerformer
ThreadedJobPerformer._async_run = autoreleasepool(ThreadedJobPerformer._async_run)

View File

@ -17,10 +17,12 @@ http://www.hardcoded.net/licenses/bsd_license
NSInteger progress; NSInteger progress;
HSTextField *jobdescTextField; HSTextField *jobdescTextField;
HSTextField *progressdescTextField; HSTextField *progressdescTextField;
NSWindow *parentWindow;
} }
- (id)initWithPyRef:(PyObject *)aPyRef view:(NSView *)aView; - (id)initWithPyRef:(PyObject *)aPyRef view:(NSView *)aView;
- (PyProgressWindow *)model; - (PyProgressWindow *)model;
- (void)setParentWindow:(NSWindow *)aParentWindow;
- (void)setProgress:(NSInteger)aProgress; - (void)setProgress:(NSInteger)aProgress;
- (void)showWindow; - (void)showWindow;

View File

@ -17,6 +17,7 @@ http://www.hardcoded.net/licenses/bsd_license
[[ProgressController mainProgressController] setWorker:self]; [[ProgressController mainProgressController] setWorker:self];
jobdescTextField = [[HSTextField alloc] initWithPyRef:[[self model] jobdescTextField] view:[[ProgressController mainProgressController] descText]]; jobdescTextField = [[HSTextField alloc] initWithPyRef:[[self model] jobdescTextField] view:[[ProgressController mainProgressController] descText]];
progressdescTextField = [[HSTextField alloc] initWithPyRef:[[self model] progressdescTextField] view:[[ProgressController mainProgressController] statusText]]; progressdescTextField = [[HSTextField alloc] initWithPyRef:[[self model] progressdescTextField] view:[[ProgressController mainProgressController] statusText]];
parentWindow = nil;
return self; return self;
} }
@ -26,6 +27,11 @@ http://www.hardcoded.net/licenses/bsd_license
} }
/* Public */ /* Public */
- (void)setParentWindow:(NSWindow *)aParentWindow
{
parentWindow = aParentWindow;
}
- (void)setProgress:(NSInteger)aProgress - (void)setProgress:(NSInteger)aProgress
{ {
progress = aProgress; progress = aProgress;
@ -33,7 +39,12 @@ http://www.hardcoded.net/licenses/bsd_license
- (void)showWindow - (void)showWindow
{ {
[[ProgressController mainProgressController] show]; if (parentWindow != nil) {
[[ProgressController mainProgressController] showSheetForParent:parentWindow];
}
else {
[[ProgressController mainProgressController] show];
}
} }
- (void)closeWindow - (void)closeWindow

View File

@ -15,13 +15,16 @@ import time
import shutil import shutil
from send2trash import send2trash from send2trash import send2trash
from jobprogress import job
from hscommon.reg import RegistrableApplication from hscommon.reg import RegistrableApplication
from hscommon.notify import Broadcaster from hscommon.notify import Broadcaster
from hscommon.path import Path from hscommon.path import Path
from hscommon.conflict import smart_move, smart_copy from hscommon.conflict import smart_move, smart_copy
from hscommon.gui.progress_window import ProgressWindow
from hscommon.util import (delete_if_empty, first, escape, nonone, format_time_decimal, allsame, from hscommon.util import (delete_if_empty, first, escape, nonone, format_time_decimal, allsame,
rem_file_ext) rem_file_ext)
from hscommon.trans import tr from hscommon.trans import tr
from hscommon.plat import ISWINDOWS
from . import directories, results, scanner, export, fs from . import directories, results, scanner, export, fs
from .gui.deletion_options import DeletionOptions from .gui.deletion_options import DeletionOptions
@ -51,6 +54,16 @@ class JobType:
Copy = 'job_copy' Copy = 'job_copy'
Delete = 'job_delete' Delete = 'job_delete'
JOBID2TITLE = {
JobType.Scan: tr("Scanning for duplicates"),
JobType.Load: tr("Loading"),
JobType.Move: tr("Moving"),
JobType.Copy: tr("Copying"),
JobType.Delete: tr("Sending to Trash"),
}
if ISWINDOWS:
JOBID2TITLE[JobType.Delete] = tr("Sending files to the recycle bin")
def format_timestamp(t, delta): def format_timestamp(t, delta):
if delta: if delta:
return format_time_decimal(t) return format_time_decimal(t)
@ -86,7 +99,6 @@ class DupeGuru(RegistrableApplication, Broadcaster):
#--- View interface #--- View interface
# open_path(path) # open_path(path)
# reveal_path(path) # reveal_path(path)
# start_job(jobid, func, args=()) ( func(j, *args) )
# ask_yes_no(prompt) --> bool # ask_yes_no(prompt) --> bool
# show_results_window() # show_results_window()
# show_problem_dialog() # show_problem_dialog()
@ -123,6 +135,7 @@ class DupeGuru(RegistrableApplication, Broadcaster):
self.stats_label = StatsLabel(self) self.stats_label = StatsLabel(self)
self.result_table = self._create_result_table() self.result_table = self._create_result_table()
self.deletion_options = DeletionOptions() self.deletion_options = DeletionOptions()
self.progress_window = ProgressWindow(self._job_completed)
children = [self.result_table, self.directory_tree, self.stats_label, self.details_panel] children = [self.result_table, self.directory_tree, self.stats_label, self.details_panel]
for child in children: for child in children:
child.connect() child.connect()
@ -225,12 +238,16 @@ class DupeGuru(RegistrableApplication, Broadcaster):
if self.results.get_group_of_duplicate(d) is not None] if self.results.get_group_of_duplicate(d) is not None]
self.notify('results_changed') self.notify('results_changed')
def _job_completed(self, jobid, exc): def _start_job(self, jobid, func, args=()):
# Must be called by subclasses when they detect that an async job is completed. If an title = JOBID2TITLE[jobid]
# exception was raised during the job, `exc` will be set. Return True when the error was try:
# handled. If we return False when exc is set, a the exception will be re-raised. self.progress_window.run(jobid, title, func, args=args)
if exc is not None: except job.JobInProgressError:
return False # We don't handle any exception in here msg = tr("A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.")
self.view.show_message(msg)
def _job_completed(self, jobid):
print("complete!", jobid)
if jobid == JobType.Scan: if jobid == JobType.Scan:
self._results_changed() self._results_changed()
if not self.results.groups: if not self.results.groups:
@ -362,7 +379,7 @@ class DupeGuru(RegistrableApplication, Broadcaster):
if destination: if destination:
desttype = self.options['copymove_dest_type'] desttype = self.options['copymove_dest_type']
jobid = JobType.Copy if copy else JobType.Move jobid = JobType.Copy if copy else JobType.Move
self.view.start_job(jobid, do) self._start_job(jobid, do)
def delete_marked(self): def delete_marked(self):
if not self._check_demo(): if not self._check_demo():
@ -375,7 +392,7 @@ class DupeGuru(RegistrableApplication, Broadcaster):
args = [self.deletion_options.link_deleted, self.deletion_options.use_hardlinks, args = [self.deletion_options.link_deleted, self.deletion_options.use_hardlinks,
self.deletion_options.direct] self.deletion_options.direct]
logging.debug("Starting deletion job with args %r", args) logging.debug("Starting deletion job with args %r", args)
self.view.start_job(JobType.Delete, self._do_delete, args=args) self._start_job(JobType.Delete, self._do_delete, args=args)
def export_to_xhtml(self): def export_to_xhtml(self):
colnames, rows = self._get_export_data() colnames, rows = self._get_export_data()
@ -439,7 +456,8 @@ class DupeGuru(RegistrableApplication, Broadcaster):
def load_from(self, filename): def load_from(self, filename):
def do(j): def do(j):
self.results.load_from_xml(filename, self._get_file, j) self.results.load_from_xml(filename, self._get_file, j)
self.view.start_job(JobType.Load, do) print("load finished")
self._start_job(JobType.Load, do)
def make_selected_reference(self): def make_selected_reference(self):
dupes = self.without_ref(self.selected_dupes) dupes = self.without_ref(self.selected_dupes)
@ -580,7 +598,7 @@ class DupeGuru(RegistrableApplication, Broadcaster):
return return
self.results.groups = [] self.results.groups = []
self._results_changed() self._results_changed()
self.view.start_job(JobType.Scan, do) self._start_job(JobType.Scan, do)
def toggle_selected_mark_state(self): def toggle_selected_mark_state(self):
selected = self.without_ref(self.selected_dupes) selected = self.without_ref(self.selected_dupes)

View File

@ -30,6 +30,7 @@ class ProgressWindow(GUIObject, ThreadedJobPerformer):
last_desc = self.last_desc last_desc = self.last_desc
if not self._job_running or last_progress is None: if not self._job_running or last_progress is None:
self.view.close() self.view.close()
self.reraise_if_error()
if not self.job_cancelled: if not self.job_cancelled:
self._finish_func(self.jobid) self._finish_func(self.jobid)
return return

View File

@ -4,91 +4,119 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:39 #: core/app.py:42
msgid "You're about to open many files at once. Depending on what those files are opened with, doing so can create quite a mess. Continue?" msgid "You're about to open many files at once. Depending on what those files are opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
#: core/app.py:98 #: core/app.py:58
msgid "Scanning for duplicates"
msgstr ""
#: core/app.py:59
msgid "Loading"
msgstr ""
#: core/app.py:60
msgid "Moving"
msgstr ""
#: core/app.py:61
msgid "Copying"
msgstr ""
#: core/app.py:62
msgid "Sending to Trash"
msgstr ""
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr ""
#: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "" msgstr ""
#: core/app.py:232 #: core/app.py:246
msgid "A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again."
msgstr ""
#: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "" msgstr ""
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "" msgstr ""
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "" msgstr ""
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr ""
#: core/app.py:274 #: core/app.py:296
msgid "You cannot delete, move or copy more than 10 duplicates at once in demo mode." msgid "You cannot delete, move or copy more than 10 duplicates at once in demo mode."
msgstr "" msgstr ""
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "" msgstr ""
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "" msgstr ""
#: core/app.py:294 #: core/app.py:316
msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?" msgid "All selected %d matches are going to be ignored in all subsequent scans. Continue?"
msgstr "" msgstr ""
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "" msgstr ""
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "" msgstr ""
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "" msgstr ""
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "" msgstr ""
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "" msgstr ""
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "" msgstr ""
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "" msgstr ""

View File

@ -9,55 +9,55 @@ msgstr ""
"Language: cs\n" "Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:39 #: core/app.py:42
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
#: core/app.py:98 #: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "" msgstr ""
#: core/app.py:232 #: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Nebyli nalezeny žádné duplicity." msgstr "Nebyli nalezeny žádné duplicity."
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "" msgstr ""
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "" msgstr ""
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr ""
#: core/app.py:274 #: core/app.py:296
msgid "" msgid ""
"You cannot delete, move or copy more than 10 duplicates at once in demo " "You cannot delete, move or copy more than 10 duplicates at once in demo "
"mode." "mode."
msgstr "" msgstr ""
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "" msgstr ""
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "" msgstr ""
#: core/app.py:294 #: core/app.py:316
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@ -65,44 +65,44 @@ msgstr ""
"Všech %d vybraných shod bude v následujících hledáních ignorováno. " "Všech %d vybraných shod bude v následujících hledáních ignorováno. "
"Pokračovat?" "Pokračovat?"
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "" msgstr ""
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "" msgstr ""
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "" msgstr ""
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Nedefinoval jste žádný uživatelský příkaz. Nadefinujete ho v předvolbách." "Nedefinoval jste žádný uživatelský příkaz. Nadefinujete ho v předvolbách."
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Chystáte se z výsledků odstranit %d souborů. Pokračovat?" msgstr "Chystáte se z výsledků odstranit %d souborů. Pokračovat?"
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "Shromažďuji prohlížené soubory" msgstr "Shromažďuji prohlížené soubory"
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání." msgstr "Vybrané adresáře neobsahují žádné soubory vhodné k prohledávání."
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d vyřazeno)" msgstr "%s (%d vyřazeno)"
@ -209,3 +209,35 @@ msgstr "Ověřeno %d/%d shod"
#: core_pe/matchexif.py:18 #: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "" msgstr ""
#: core/app.py:58
msgid "Scanning for duplicates"
msgstr "Vyhledávám duplicity"
#: core/app.py:59
msgid "Loading"
msgstr "Nahrávám"
#: core/app.py:60
msgid "Moving"
msgstr "Přesouvám"
#: core/app.py:61
msgid "Copying"
msgstr "Kopíruji"
#: core/app.py:62
msgid "Sending to Trash"
msgstr "Vyhazuji do koše"
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr ""
#: core/app.py:246
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Předchozí akce stále nebyla ukončena. Novou zatím nemůžete spustit. Počkejte"
" pár sekund a zkuste to znovu."

View File

@ -9,26 +9,6 @@ msgstr ""
"Language: cs\n" "Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr "Vyhledávám duplicity"
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr "Nahrávám"
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr "Přesouvám"
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr "Kopíruji"
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr "Vyhazuji do koše"
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "Odstraňuji mrtvé stopy z Vaší knihovny iTunes" msgstr "Odstraňuji mrtvé stopy z Vaší knihovny iTunes"
@ -81,10 +61,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "Nelze najít aplikaci iPhoto." msgstr "Nelze najít aplikaci iPhoto."
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr ""
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "" msgstr ""
@ -118,14 +94,6 @@ msgstr ""
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "" msgstr ""
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Předchozí akce stále nebyla ukončena. Novou zatím nemůžete spustit. Počkejte"
" pár sekund a zkuste to znovu."
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "" msgstr ""
@ -404,7 +372,7 @@ msgstr "Odstranit označené z výsledků"
#: qt/base/result_window.py:52 cocoa/base/en.lproj/Localizable.strings:0 #: qt/base/result_window.py:52 cocoa/base/en.lproj/Localizable.strings:0
msgid "Re-Prioritize Results..." msgid "Re-Prioritize Results..."
msgstr "" msgstr "Změnit prioritu výsledků..."
#: qt/base/result_window.py:53 cocoa/base/en.lproj/Localizable.strings:0 #: qt/base/result_window.py:53 cocoa/base/en.lproj/Localizable.strings:0
msgid "Remove Selected from Results" msgid "Remove Selected from Results"
@ -859,9 +827,3 @@ msgstr "Zoom"
#: qt/base/deletion_options.py:46 #: qt/base/deletion_options.py:46
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr ""
#~ msgid " (Mac OS X or Linux only)"
#~ msgstr ""
#~ msgid "Re-Prioritize Results"
#~ msgstr "Změnit prioritu výsledků"

View File

@ -9,99 +9,99 @@ msgstr ""
"Language: de\n" "Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:39 #: core/app.py:42
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
#: core/app.py:98 #: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "" msgstr ""
#: core/app.py:232 #: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Keine Duplikate gefunden." msgstr "Keine Duplikate gefunden."
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "" msgstr ""
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "" msgstr ""
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr ""
#: core/app.py:274 #: core/app.py:296
msgid "" msgid ""
"You cannot delete, move or copy more than 10 duplicates at once in demo " "You cannot delete, move or copy more than 10 duplicates at once in demo "
"mode." "mode."
msgstr "" msgstr ""
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "" msgstr ""
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "" msgstr ""
#: core/app.py:294 #: core/app.py:316
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "%d Dateien werden in zukünftigen Scans ignoriert werden. Fortfahren?" msgstr "%d Dateien werden in zukünftigen Scans ignoriert werden. Fortfahren?"
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "kopieren" msgstr "kopieren"
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "verschieben" msgstr "verschieben"
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "Wählen sie einen Ordner zum {} der ausgewählten Dateien" msgstr "Wählen sie einen Ordner zum {} der ausgewählten Dateien"
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Sie haben keinen eigenen Befehl erstellt. Bitte in den Einstellungen " "Sie haben keinen eigenen Befehl erstellt. Bitte in den Einstellungen "
"konfigurieren." "konfigurieren."
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?" msgstr "%d Dateien werden aus der Ergebnisliste entfernt. Fortfahren?"
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "Sammle Dateien zum Scannen" msgstr "Sammle Dateien zum Scannen"
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Der ausgewählte Ordner enthält keine scannbare Dateien." msgstr "Der ausgewählte Ordner enthält keine scannbare Dateien."
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d verworfen)" msgstr "%s (%d verworfen)"
@ -208,3 +208,35 @@ msgstr "%d/%d verifizierte Paare"
#: core_pe/matchexif.py:18 #: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "" msgstr ""
#: core/app.py:58
msgid "Scanning for duplicates"
msgstr "Suche nach Duplikaten"
#: core/app.py:59
msgid "Loading"
msgstr "Laden"
#: core/app.py:60
msgid "Moving"
msgstr "Verschieben"
#: core/app.py:61
msgid "Copying"
msgstr "Kopieren"
#: core/app.py:62
msgid "Sending to Trash"
msgstr "Verschiebe in den Mülleimer"
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr "Sende Dateien in den Mülleimer"
#: core/app.py:246
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Eine vorherige Aktion ist noch in der Bearbeitung. Sie können noch keine "
"Neue starten. Warten Sie einige Sekunden und versuchen es erneut."

View File

@ -9,26 +9,6 @@ msgstr ""
"Language: de\n" "Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr "Suche nach Duplikaten"
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr "Laden"
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr "Verschieben"
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr "Kopieren"
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr "Verschiebe in den Mülleimer"
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "Entferne tote Stücke aus Ihrer iTunes Bibliothek." msgstr "Entferne tote Stücke aus Ihrer iTunes Bibliothek."
@ -81,10 +61,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "The iPhoto application couldn't be found." msgstr "The iPhoto application couldn't be found."
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr "Sende Dateien in den Mülleimer"
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "Beenden" msgstr "Beenden"
@ -118,14 +94,6 @@ msgstr "Auf Updates überprüfen"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Debug Log öffnen" msgstr "Debug Log öffnen"
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Eine vorherige Aktion ist noch in der Bearbeitung. Sie können noch keine "
"Neue starten. Warten Sie einige Sekunden und versuchen es erneut."
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "" msgstr ""
@ -403,7 +371,7 @@ msgstr "Entferne Markierte aus den Ergebnissen"
#: qt/base/result_window.py:52 cocoa/base/en.lproj/Localizable.strings:0 #: qt/base/result_window.py:52 cocoa/base/en.lproj/Localizable.strings:0
msgid "Re-Prioritize Results..." msgid "Re-Prioritize Results..."
msgstr "Entferne Ausgewählte aus den Ergebnissen" msgstr "Entferne Ausgewählte aus den Ergebnissen..."
#: qt/base/result_window.py:53 cocoa/base/en.lproj/Localizable.strings:0 #: qt/base/result_window.py:53 cocoa/base/en.lproj/Localizable.strings:0
msgid "Remove Selected from Results" msgid "Remove Selected from Results"
@ -859,9 +827,3 @@ msgstr "Zoomen"
#: qt/base/deletion_options.py:46 #: qt/base/deletion_options.py:46
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr ""
#~ msgid " (Mac OS X or Linux only)"
#~ msgstr ""
#~ msgid "Re-Prioritize Results"
#~ msgstr "Re-Prioritize Results"

View File

@ -11,15 +11,15 @@ msgstr ""
"Language: fr\n" "Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Aucun doublon marqué. Rien à faire." msgstr "Aucun doublon marqué. Rien à faire."
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Aucun doublon sélectionné. Rien à faire." msgstr "Aucun doublon sélectionné. Rien à faire."
#: core/app.py:39 #: core/app.py:42
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
@ -27,28 +27,28 @@ msgstr ""
"Beaucoup de fichiers seront ouverts en même temps. Cela peut gravement " "Beaucoup de fichiers seront ouverts en même temps. Cela peut gravement "
"encombrer votre système. Continuer?" "encombrer votre système. Continuer?"
#: core/app.py:98 #: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "ne peut effacer, déplacer ou copier que 10 doublons à la fois" msgstr "ne peut effacer, déplacer ou copier que 10 doublons à la fois"
#: core/app.py:232 #: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Aucun doublon trouvé." msgstr "Aucun doublon trouvé."
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Tous les fichiers marqués ont été copiés correctement." msgstr "Tous les fichiers marqués ont été copiés correctement."
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Tous les fichiers marqués ont été déplacés correctement." msgstr "Tous les fichiers marqués ont été déplacés correctement."
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr ""
"Tous les fichiers marqués ont été correctement envoyés à la corbeille." "Tous les fichiers marqués ont été correctement envoyés à la corbeille."
#: core/app.py:274 #: core/app.py:296
msgid "" msgid ""
"You cannot delete, move or copy more than 10 duplicates at once in demo " "You cannot delete, move or copy more than 10 duplicates at once in demo "
"mode." "mode."
@ -56,58 +56,58 @@ msgstr ""
"Vous ne pouvez pas effacer, déplacer ou copier plus de 10 doublons à la fois" "Vous ne pouvez pas effacer, déplacer ou copier plus de 10 doublons à la fois"
" en mode démo." " en mode démo."
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' est déjà dans la liste." msgstr "'{}' est déjà dans la liste."
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' n'existe pas." msgstr "'{}' n'existe pas."
#: core/app.py:294 #: core/app.py:316
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "%d fichiers seront ignorés des prochains scans. Continuer?" msgstr "%d fichiers seront ignorés des prochains scans. Continuer?"
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "copier" msgstr "copier"
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "déplacer" msgstr "déplacer"
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "Sélectionnez un dossier vers lequel {} les fichiers marqués." msgstr "Sélectionnez un dossier vers lequel {} les fichiers marqués."
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "Choisissez une destination pour votre exportation CSV" msgstr "Choisissez une destination pour votre exportation CSV"
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Vous n'avez pas de commande personnalisée. Ajoutez-la dans vos préférences." "Vous n'avez pas de commande personnalisée. Ajoutez-la dans vos préférences."
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "%d fichiers seront retirés des résultats. Continuer?" msgstr "%d fichiers seront retirés des résultats. Continuer?"
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} groupes de doublons ont été modifiés par la re-prioritisation." msgstr "{} groupes de doublons ont été modifiés par la re-prioritisation."
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "Collecte des fichiers à scanner" msgstr "Collecte des fichiers à scanner"
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides." msgstr "Les dossiers sélectionnés ne contiennent pas de fichiers valides."
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d hors-groupe)" msgstr "%s (%d hors-groupe)"
@ -216,3 +216,35 @@ msgstr "Vérifié %d/%d paires"
#: core_pe/matchexif.py:18 #: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "Lu l'EXIF de %d/%d images" msgstr "Lu l'EXIF de %d/%d images"
#: core/app.py:58
msgid "Scanning for duplicates"
msgstr "Scan de doublons en cours"
#: core/app.py:59
msgid "Loading"
msgstr "Chargement en cours"
#: core/app.py:60
msgid "Moving"
msgstr "Déplacement en cours"
#: core/app.py:61
msgid "Copying"
msgstr "Copie en cours"
#: core/app.py:62
msgid "Sending to Trash"
msgstr "Envoi de fichiers à la corbeille"
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr "Envoi de fichiers à la corbeille"
#: core/app.py:246
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Une action précédente est encore en cours. Attendez quelques secondes avant "
"d'en repartir une nouvelle."

View File

@ -12,26 +12,6 @@ msgstr ""
"Language: fr\n" "Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr "Scan de doublons en cours"
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr "Chargement en cours"
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr "Déplacement en cours"
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr "Copie en cours"
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr "Envoi vers corbeille"
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "Retrait des tracks mortes de votre librairie iTunes" msgstr "Retrait des tracks mortes de votre librairie iTunes"
@ -89,10 +69,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "iPhoto n'a pas pu être trouvée dans vos applications." msgstr "iPhoto n'a pas pu être trouvée dans vos applications."
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr "Envoi de fichiers à la corbeille"
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "Quitter" msgstr "Quitter"
@ -126,14 +102,6 @@ msgstr "Vérifier les mises à jour"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Ouvrir logs de déboguage" msgstr "Ouvrir logs de déboguage"
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Une action précédente est encore en cours. Attendez quelques secondes avant "
"d'en repartir une nouvelle."
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "Fichier {} (*.{})" msgstr "Fichier {} (*.{})"
@ -872,9 +840,3 @@ msgstr "Réduire/agrandir"
#: qt/base/deletion_options.py:46 #: qt/base/deletion_options.py:46
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr ""
#~ msgid " (Mac OS X or Linux only)"
#~ msgstr " (Mac OS X ou Linux seulement)"
#~ msgid "Re-Prioritize Results"
#~ msgstr "Re-prioriser les résultats"

View File

@ -9,42 +9,42 @@ msgstr ""
"Language: hy\n" "Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:39 #: core/app.py:42
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
#: core/app.py:98 #: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "" msgstr ""
"միաժամանակ հնարավոր է ջնջել, տեղափոխել կամ պատճենել միայն 10 օրինակներ" "միաժամանակ հնարավոր է ջնջել, տեղափոխել կամ պատճենել միայն 10 օրինակներ"
#: core/app.py:232 #: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Կրկնօրինակներ չկան:" msgstr "Կրկնօրինակներ չկան:"
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Բոլոր նշված ֆայլերը հաջողությամբ պատճենվել են:" msgstr "Բոլոր նշված ֆայլերը հաջողությամբ պատճենվել են:"
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Բոլոր նշված ֆայլերը հաջողությամբ տեղափոխվել են:" msgstr "Բոլոր նշված ֆայլերը հաջողությամբ տեղափոխվել են:"
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Բոլոր նշված ֆայլերը հաջողությամբ Ջնջվել են:" msgstr "Բոլոր նշված ֆայլերը հաջողությամբ Ջնջվել են:"
#: core/app.py:274 #: core/app.py:296
msgid "" msgid ""
"You cannot delete, move or copy more than 10 duplicates at once in demo " "You cannot delete, move or copy more than 10 duplicates at once in demo "
"mode." "mode."
@ -52,58 +52,58 @@ msgstr ""
"Չեք կարող ջնջել, տեղափձոխել կամ պատճենել ավելի քան 10 օրինակներ փորձնական " "Չեք կարող ջնջել, տեղափձոխել կամ պատճենել ավելի քան 10 օրինակներ փորձնական "
"եղանակում:" "եղանակում:"
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}'-ը արդեն առկա է ցանկում:" msgstr "'{}'-ը արդեն առկա է ցանկում:"
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}'-ը գոյություն չունի:" msgstr "'{}'-ը գոյություն չունի:"
#: core/app.py:294 #: core/app.py:316
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "" msgstr ""
"Ընտրված %d համընկնումները կանտեսվեն հետագա բոլոր ստուգումներից: Շարունակե՞լ:" "Ընտրված %d համընկնումները կանտեսվեն հետագա բոլոր ստուգումներից: Շարունակե՞լ:"
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "պատճենել" msgstr "պատճենել"
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "տեղափոխել" msgstr "տեղափոխել"
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "Ընտրել թղթապանակ՝ {} նշված ֆայլերի համար" msgstr "Ընտրել թղթապանակ՝ {} նշված ֆայլերի համար"
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:" msgstr "Դուք չեք կատարել Հրամանի ընտրություն: Կատարեք այն կարգավորումներում:"
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:" msgstr "Դուք պատրաստվում եք ջնջելու %d ֆայլեր: Շարունակե՞լ:"
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար" msgstr "Հավաքվում են ֆայլեր՝ ստուգելու համար"
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:" msgstr "Ընտրված թղթապանակները պարունակում են չստուգվող ֆայլ:"
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d անպիտան)" msgstr "%s (%d անպիտան)"
@ -210,3 +210,35 @@ msgstr "Ստուգում է %d/%d համընկնումները"
#: core_pe/matchexif.py:18 #: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "Կարդալ EXIF-ը d/%d նկարներից" msgstr "Կարդալ EXIF-ը d/%d նկարներից"
#: core/app.py:58
msgid "Scanning for duplicates"
msgstr "Ստուգվում են կրկնօրինակները"
#: core/app.py:59
msgid "Loading"
msgstr "Բացվում է"
#: core/app.py:60
msgid "Moving"
msgstr "Տեղափոխվում է"
#: core/app.py:61
msgid "Copying"
msgstr "Պատճենվում է"
#: core/app.py:62
msgid "Sending to Trash"
msgstr "Ուղարկվում է Աղբարկղ"
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr "Ֆայլերը ուղարկվում են Աղբարկղ"
#: core/app.py:246
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Նախորդ գործողությունը դեռևս ձեռադրում է այստեղ: Չեք կարող սկսել մեկ ուրիշը: "
"Սպասեք մի քանի վայրկյան և կրկին փորձեք:"

View File

@ -9,26 +9,6 @@ msgstr ""
"Language: hy\n" "Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr "Ստուգվում են կրկնօրինակները"
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr "Բացվում է"
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr "Տեղափոխվում է"
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr "Պատճենվում է"
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr "Ուղարկվում է Աղբարկղ"
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "Հեռացվում են վնասված շավիղները iTunes-ի Շտեմարանից" msgstr "Հեռացվում են վնասված շավիղները iTunes-ի Շտեմարանից"
@ -82,10 +62,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "iPhoto ծրագիրը չի գտնվել:" msgstr "iPhoto ծրագիրը չի գտնվել:"
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr "Ֆայլերը ուղարկվում են Աղբարկղ"
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "Փակել" msgstr "Փակել"
@ -119,14 +95,6 @@ msgstr "Ստուգել թարմացումները"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Բացել Սխալների մատյանը" msgstr "Բացել Սխալների մատյանը"
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Նախորդ գործողությունը դեռևս ձեռադրում է այստեղ: Չեք կարող սկսել մեկ ուրիշը: "
"Սպասեք մի քանի վայրկյան և կրկին փորձեք:"
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "" msgstr ""
@ -859,9 +827,3 @@ msgstr "Չափը"
#: qt/base/deletion_options.py:46 #: qt/base/deletion_options.py:46
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr ""
#~ msgid " (Mac OS X or Linux only)"
#~ msgstr ""
#~ msgid "Re-Prioritize Results"
#~ msgstr "Վերաառաջնայնավորել արդյունքները"

View File

@ -9,55 +9,55 @@ msgstr ""
"Language: it\n" "Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:39 #: core/app.py:42
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
#: core/app.py:98 #: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "" msgstr ""
#: core/app.py:232 #: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Non sono stati trovati dei duplicati." msgstr "Non sono stati trovati dei duplicati."
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Tutti i file marcati sono stati copiati correttamente." msgstr "Tutti i file marcati sono stati copiati correttamente."
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Tutti i file marcati sono stati spostati correttamente." msgstr "Tutti i file marcati sono stati spostati correttamente."
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Tutti i file marcati sono stati inviati nel cestino." msgstr "Tutti i file marcati sono stati inviati nel cestino."
#: core/app.py:274 #: core/app.py:296
msgid "" msgid ""
"You cannot delete, move or copy more than 10 duplicates at once in demo " "You cannot delete, move or copy more than 10 duplicates at once in demo "
"mode." "mode."
msgstr "" msgstr ""
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' è già nella lista." msgstr "'{}' è già nella lista."
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' non esiste." msgstr "'{}' non esiste."
#: core/app.py:294 #: core/app.py:316
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@ -65,45 +65,45 @@ msgstr ""
"Tutti i %d elementi che coincidono verranno ignorati in tutte le scansioni " "Tutti i %d elementi che coincidono verranno ignorati in tutte le scansioni "
"successive. Continuare?" "successive. Continuare?"
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "" msgstr ""
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "" msgstr ""
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "" msgstr ""
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Non hai impostato nessun comando personalizzato. Impostalo nelle tue " "Non hai impostato nessun comando personalizzato. Impostalo nelle tue "
"preferenze." "preferenze."
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Stai per rimuovere %d file dai risultati. Continuare?" msgstr "Stai per rimuovere %d file dai risultati. Continuare?"
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "Raccolta file da scansionare" msgstr "Raccolta file da scansionare"
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Le cartelle selezionate non contengono file da scansionare." msgstr "Le cartelle selezionate non contengono file da scansionare."
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d scartati)" msgstr "%s (%d scartati)"
@ -213,3 +213,35 @@ msgstr "Verificate %d/%d somiglianze"
#: core_pe/matchexif.py:18 #: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "" msgstr ""
#: core/app.py:58
msgid "Scanning for duplicates"
msgstr "Scansione per i duplicati"
#: core/app.py:59
msgid "Loading"
msgstr "Caricamento"
#: core/app.py:60
msgid "Moving"
msgstr "Spostamento"
#: core/app.py:61
msgid "Copying"
msgstr "Copia in corso"
#: core/app.py:62
msgid "Sending to Trash"
msgstr "Spostamento nel cestino"
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr "Spostamento nel cestino"
#: core/app.py:246
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Un'azione precedente è ancora in corso. Non puoi cominciarne una nuova. "
"Aspetta qualche secondo e quindi riprova."

View File

@ -9,26 +9,6 @@ msgstr ""
"Language: it\n" "Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr "Scansione per i duplicati"
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr "Caricamento"
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr "Spostamento"
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr "Copia in corso"
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr "Spostamento nel cestino"
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "Rimozione delle tracce insistenti dalla libreria di iTunes" msgstr "Rimozione delle tracce insistenti dalla libreria di iTunes"
@ -82,10 +62,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "Non trovo l'applicazione iPhoto." msgstr "Non trovo l'applicazione iPhoto."
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr ""
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "" msgstr ""
@ -119,14 +95,6 @@ msgstr ""
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "" msgstr ""
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Un'azione precedente è ancora in corso. Non puoi cominciarne una nuova. "
"Aspetta qualche secondo e quindi riprova."
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "" msgstr ""
@ -408,7 +376,7 @@ msgstr "Rimuovi gli elementi marcati dai risultati"
#: qt/base/result_window.py:52 cocoa/base/en.lproj/Localizable.strings:0 #: qt/base/result_window.py:52 cocoa/base/en.lproj/Localizable.strings:0
msgid "Re-Prioritize Results..." msgid "Re-Prioritize Results..."
msgstr "" msgstr "Cambia la priorità dei risultati..."
#: qt/base/result_window.py:53 cocoa/base/en.lproj/Localizable.strings:0 #: qt/base/result_window.py:53 cocoa/base/en.lproj/Localizable.strings:0
msgid "Remove Selected from Results" msgid "Remove Selected from Results"
@ -866,9 +834,3 @@ msgstr "Zoom"
#: qt/base/deletion_options.py:46 #: qt/base/deletion_options.py:46
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr ""
#~ msgid " (Mac OS X or Linux only)"
#~ msgstr ""
#~ msgid "Re-Prioritize Results"
#~ msgstr "Cambia la priorità dei risultati"

View File

@ -13,15 +13,15 @@ msgstr ""
"Language: pt_BR\n" "Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Não há duplicatas marcadas. Nada foi feito." msgstr "Não há duplicatas marcadas. Nada foi feito."
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Não há duplicatas selecionadas. Nada foi feito." msgstr "Não há duplicatas selecionadas. Nada foi feito."
#: core/app.py:39 #: core/app.py:42
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
@ -29,27 +29,27 @@ msgstr ""
"Você pretende abrir muitos arquivos de uma vez. Problemas podem surgir " "Você pretende abrir muitos arquivos de uma vez. Problemas podem surgir "
"dependendo de qual app seja usado para abri-los. Continuar?" "dependendo de qual app seja usado para abri-los. Continuar?"
#: core/app.py:98 #: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "poderá apagar, mover ou copiar somente 10 duplicatas por vez" msgstr "poderá apagar, mover ou copiar somente 10 duplicatas por vez"
#: core/app.py:232 #: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Nenhuma duplicata encontrada." msgstr "Nenhuma duplicata encontrada."
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Todos os arquivos marcados foram copiados com sucesso." msgstr "Todos os arquivos marcados foram copiados com sucesso."
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Todos os arquivos marcados foram relocados com sucesso." msgstr "Todos os arquivos marcados foram relocados com sucesso."
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Todos os arquivos marcados foram movidos para o Lixo com sucesso." msgstr "Todos os arquivos marcados foram movidos para o Lixo com sucesso."
#: core/app.py:274 #: core/app.py:296
msgid "" msgid ""
"You cannot delete, move or copy more than 10 duplicates at once in demo " "You cannot delete, move or copy more than 10 duplicates at once in demo "
"mode." "mode."
@ -57,58 +57,58 @@ msgstr ""
"Em modo demo, você não pode apagar, mover ou copiar mais do que 10 " "Em modo demo, você não pode apagar, mover ou copiar mais do que 10 "
"duplicatas por vez." "duplicatas por vez."
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' já está na lista." msgstr "'{}' já está na lista."
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' não existe." msgstr "'{}' não existe."
#: core/app.py:294 #: core/app.py:316
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "Excluir %d duplicata(s) selecionada(s) de escaneamentos posteriores?" msgstr "Excluir %d duplicata(s) selecionada(s) de escaneamentos posteriores?"
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "copiar" msgstr "copiar"
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "mover" msgstr "mover"
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "Selecione uma pasta para {} os arquivos marcados" msgstr "Selecione uma pasta para {} os arquivos marcados"
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "Selecione uma pasta para o CSV exportado" msgstr "Selecione uma pasta para o CSV exportado"
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "" msgstr ""
"Você não possui nenhum comando personalizado. Crie um nas preferências." "Você não possui nenhum comando personalizado. Crie um nas preferências."
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Remover %d arquivo(s) dos resultados?" msgstr "Remover %d arquivo(s) dos resultados?"
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "{} grupos de duplicatas alterados ao re-priorizar." msgstr "{} grupos de duplicatas alterados ao re-priorizar."
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "Juntando arquivos para escanear" msgstr "Juntando arquivos para escanear"
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "As pastas selecionadas não contém arquivos escaneáveis." msgstr "As pastas selecionadas não contém arquivos escaneáveis."
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d rejeitado(s))" msgstr "%s (%d rejeitado(s))"
@ -215,3 +215,35 @@ msgstr "%d/%d coincidentes verificados"
#: core_pe/matchexif.py:18 #: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "EXIF de %d/%d fotos lidos" msgstr "EXIF de %d/%d fotos lidos"
#: core/app.py:58
msgid "Scanning for duplicates"
msgstr "Buscando por duplicatas"
#: core/app.py:59
msgid "Loading"
msgstr "Carregando"
#: core/app.py:60
msgid "Moving"
msgstr "Movendo"
#: core/app.py:61
msgid "Copying"
msgstr "Copiando"
#: core/app.py:62
msgid "Sending to Trash"
msgstr "Movendo para o Lixo"
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr "Enviando arquivos para o Lixo"
#: core/app.py:246
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Ainda há uma ação em execução. Não é possível iniciar outra agora. Espere "
"alguns segundos e tente novamente."

View File

@ -13,26 +13,6 @@ msgstr ""
"Language: pt_BR\n" "Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr "Buscando por duplicatas"
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr "Carregando"
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr "Movendo"
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr "Copiando"
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr "Movendo para o Lixo"
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "Removendo faixas sem referência da sua Biblioteca do iTunes" msgstr "Removendo faixas sem referência da sua Biblioteca do iTunes"
@ -88,10 +68,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "O aplicativo iPhoto não foi encontrado." msgstr "O aplicativo iPhoto não foi encontrado."
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr "Enviando arquivos para o Lixo"
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "Encerrar" msgstr "Encerrar"
@ -125,14 +101,6 @@ msgstr "Buscar Atualizaçõs"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Abrir Registro de Depuração" msgstr "Abrir Registro de Depuração"
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Ainda há uma ação em execução. Não é possível iniciar outra agora. Espere "
"alguns segundos e tente novamente."
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "Arquivo {} (*.{})" msgstr "Arquivo {} (*.{})"
@ -872,9 +840,3 @@ msgstr "Reduzir/Ampliar"
#: qt/base/deletion_options.py:46 #: qt/base/deletion_options.py:46
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr ""
#~ msgid " (Mac OS X or Linux only)"
#~ msgstr " (Mac OS X ou Linux somente)"
#~ msgid "Re-Prioritize Results"
#~ msgstr "Re-Priorizar Resultados"

View File

@ -9,43 +9,43 @@ msgstr ""
"Language: ru\n" "Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:39 #: core/app.py:42
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
#: core/app.py:98 #: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "" msgstr ""
"вы сможете удалить, переместить или скопировать только 10 дубликатов за один" "вы сможете удалить, переместить или скопировать только 10 дубликатов за один"
" раз" " раз"
#: core/app.py:232 #: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Дубликаты не найдены." msgstr "Дубликаты не найдены."
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Все отмеченные файлы были скопированы успешно." msgstr "Все отмеченные файлы были скопированы успешно."
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Все отмеченные файлы были перемещены успешно." msgstr "Все отмеченные файлы были перемещены успешно."
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Все отмеченные файлы были успешно отправлены в Корзину." msgstr "Все отмеченные файлы были успешно отправлены в Корзину."
#: core/app.py:274 #: core/app.py:296
msgid "" msgid ""
"You cannot delete, move or copy more than 10 duplicates at once in demo " "You cannot delete, move or copy more than 10 duplicates at once in demo "
"mode." "mode."
@ -53,15 +53,15 @@ msgstr ""
"Вы не можете удалять, перемещать или копировать более 10 дубликатов за один " "Вы не можете удалять, перемещать или копировать более 10 дубликатов за один "
"раз в демонстрационном режиме." "раз в демонстрационном режиме."
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "" msgstr ""
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "" msgstr ""
#: core/app.py:294 #: core/app.py:316
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@ -69,43 +69,43 @@ msgstr ""
"Все выбранные %d совпадений будут игнорироваться при всех последующих " "Все выбранные %d совпадений будут игнорироваться при всех последующих "
"проверках. Продолжить?" "проверках. Продолжить?"
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "копирование" msgstr "копирование"
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "перемещение" msgstr "перемещение"
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "Выберите каталог {} для отмеченных файлов" msgstr "Выберите каталог {} для отмеченных файлов"
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Вы не создали пользовательскую команду. Задайте её в настройках." msgstr "Вы не создали пользовательскую команду. Задайте её в настройках."
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Вы собираетесь удалить %d файлов из результата поиска. Продолжить?" msgstr "Вы собираетесь удалить %d файлов из результата поиска. Продолжить?"
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "Сбор файлов для сканирования" msgstr "Сбор файлов для сканирования"
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Выбранные каталоги не содержат файлов для сканирования." msgstr "Выбранные каталоги не содержат файлов для сканирования."
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s. (%d отменено)" msgstr "%s. (%d отменено)"
@ -213,3 +213,35 @@ msgstr "Проверено %d/%d совпадений"
#: core_pe/matchexif.py:18 #: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "Прочитана EXIF-информация %d/%d фотографий" msgstr "Прочитана EXIF-информация %d/%d фотографий"
#: core/app.py:58
msgid "Scanning for duplicates"
msgstr "Проверка на наличие дубликатов"
#: core/app.py:59
msgid "Loading"
msgstr "Загрузка"
#: core/app.py:60
msgid "Moving"
msgstr "Перемещение"
#: core/app.py:61
msgid "Copying"
msgstr "Копирование"
#: core/app.py:62
msgid "Sending to Trash"
msgstr "Перемещение в Корзину"
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr "Перемещение файлов в Корзину"
#: core/app.py:246
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Предыдущее действие до сих пор выполняется. Вы не можете начать новое. "
"Подождите несколько секунд, затем повторите попытку."

View File

@ -9,26 +9,6 @@ msgstr ""
"Language: ru\n" "Language: ru\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr "Проверка на наличие дубликатов"
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr "Загрузка"
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr "Перемещение"
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr "Копирование"
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr "Перемещение в Корзину"
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "Удаление «мёртвых» треков из библиотеки iTunes" msgstr "Удаление «мёртвых» треков из библиотеки iTunes"
@ -82,10 +62,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "Приложение iPhoto не найдено." msgstr "Приложение iPhoto не найдено."
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr "Перемещение файлов в Корзину"
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "Выйти" msgstr "Выйти"
@ -119,14 +95,6 @@ msgstr "Проверить обновления"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Открыть журнал отладки" msgstr "Открыть журнал отладки"
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Предыдущее действие до сих пор выполняется. Вы не можете начать новое. "
"Подождите несколько секунд, затем повторите попытку."
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "" msgstr ""
@ -863,9 +831,3 @@ msgstr "Увеличить"
#: qt/base/deletion_options.py:46 #: qt/base/deletion_options.py:46
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr ""
#~ msgid " (Mac OS X or Linux only)"
#~ msgstr ""
#~ msgid "Re-Prioritize Results"
#~ msgstr "Изменить приоритеты результатов"

View File

@ -4,26 +4,6 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: utf-8\n" "Content-Transfer-Encoding: utf-8\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr ""
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr ""
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr ""
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr ""
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr ""
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "" msgstr ""
@ -75,10 +55,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "" msgstr ""
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr ""
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "" msgstr ""
@ -112,12 +88,6 @@ msgstr ""
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "" msgstr ""
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "" msgstr ""

View File

@ -9,41 +9,41 @@ msgstr ""
"Language: uk\n" "Language: uk\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "Немає позначених дублікатів - нічого робити." msgstr "Немає позначених дублікатів - нічого робити."
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "Немає обраних дублікатів - нічого робити." msgstr "Немає обраних дублікатів - нічого робити."
#: core/app.py:39 #: core/app.py:42
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
#: core/app.py:98 #: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "може видаляти, переміщувати або копіювати лише 10 копій відразу" msgstr "може видаляти, переміщувати або копіювати лише 10 копій відразу"
#: core/app.py:232 #: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "Не знайдено жодного дублікату." msgstr "Не знайдено жодного дублікату."
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "Усі позначені файли були скопійовані успішно." msgstr "Усі позначені файли були скопійовані успішно."
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "Усі позначені файли були переміщені успішно." msgstr "Усі позначені файли були переміщені успішно."
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "Усі позначені файли були успішно відправлені до кошика." msgstr "Усі позначені файли були успішно відправлені до кошика."
#: core/app.py:274 #: core/app.py:296
msgid "" msgid ""
"You cannot delete, move or copy more than 10 duplicates at once in demo " "You cannot delete, move or copy more than 10 duplicates at once in demo "
"mode." "mode."
@ -51,15 +51,15 @@ msgstr ""
"Ви не можете видаляти, переміщати або копіювати більше 10 дублікатів відразу" "Ви не можете видаляти, переміщати або копіювати більше 10 дублікатів відразу"
" в демонстраційному режимі." " в демонстраційному режимі."
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "'{}' вже є в списку." msgstr "'{}' вже є в списку."
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "'{}' не існує." msgstr "'{}' не існує."
#: core/app.py:294 #: core/app.py:316
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
@ -67,43 +67,43 @@ msgstr ""
"Усі обрані %d результатів будуть ігноруватися під час усіх наступних " "Усі обрані %d результатів будуть ігноруватися під час усіх наступних "
"пошуків. Продовжити?" "пошуків. Продовжити?"
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "копіювання" msgstr "копіювання"
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "переміщення" msgstr "переміщення"
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "Оберіть цільову папку для {} позначених файлів" msgstr "Оберіть цільову папку для {} позначених файлів"
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "Власна команда не встановлена. Встановіть її у налаштуваннях." msgstr "Власна команда не встановлена. Встановіть її у налаштуваннях."
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "Ви збираєтеся видалити %d файлів з результату пошуку. Продовжити?" msgstr "Ви збираєтеся видалити %d файлів з результату пошуку. Продовжити?"
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "Збір файлів для пошуку" msgstr "Збір файлів для пошуку"
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "Обрані папки не містять файлів придатних для пошуку." msgstr "Обрані папки не містять файлів придатних для пошуку."
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d відкинуто)" msgstr "%s (%d відкинуто)"
@ -210,3 +210,35 @@ msgstr "Перевірено %d/%d результатів"
#: core_pe/matchexif.py:18 #: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "Прочитано EXIF з %d/%d фотографій" msgstr "Прочитано EXIF з %d/%d фотографій"
#: core/app.py:58
msgid "Scanning for duplicates"
msgstr "Пошук дублікатів"
#: core/app.py:59
msgid "Loading"
msgstr "Завантаження"
#: core/app.py:60
msgid "Moving"
msgstr "Переміщення"
#: core/app.py:61
msgid "Copying"
msgstr "Копіювання"
#: core/app.py:62
msgid "Sending to Trash"
msgstr "Відправка до кошику"
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr "Відправлення файлів до кошика"
#: core/app.py:246
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Попередню дію ще не закінчено. Ви покищо не можете розпочаті нову. Зачекайте"
" кілька секунд, потім повторіть спробу."

View File

@ -9,26 +9,6 @@ msgstr ""
"Language: uk\n" "Language: uk\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr "Пошук дублікатів"
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr "Завантаження"
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr "Переміщення"
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr "Копіювання"
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr "Відправка до кошику"
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "Видалення мертвих треків з вашої бібліотеки iTunes " msgstr "Видалення мертвих треків з вашої бібліотеки iTunes "
@ -82,10 +62,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "Не вдалося знайти програму iPhoto." msgstr "Не вдалося знайти програму iPhoto."
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr "Відправлення файлів до кошика"
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "Вихід" msgstr "Вихід"
@ -119,14 +95,6 @@ msgstr "Перевірити оновлення"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "Відкрити журнал налагодження" msgstr "Відкрити журнал налагодження"
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr ""
"Попередню дію ще не закінчено. Ви покищо не можете розпочаті нову. Зачекайте"
" кілька секунд, потім повторіть спробу."
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "" msgstr ""
@ -861,9 +829,3 @@ msgstr "Збільшити"
#: qt/base/deletion_options.py:46 #: qt/base/deletion_options.py:46
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr ""
#~ msgid " (Mac OS X or Linux only)"
#~ msgstr ""
#~ msgid "Re-Prioritize Results"
#~ msgstr "Змінити пріоритети Результати"

View File

@ -9,97 +9,97 @@ msgstr ""
"Language: zh_CN\n" "Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: core/app.py:37 #: core/app.py:40
msgid "There are no marked duplicates. Nothing has been done." msgid "There are no marked duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:38 #: core/app.py:41
msgid "There are no selected duplicates. Nothing has been done." msgid "There are no selected duplicates. Nothing has been done."
msgstr "" msgstr ""
#: core/app.py:39 #: core/app.py:42
msgid "" msgid ""
"You're about to open many files at once. Depending on what those files are " "You're about to open many files at once. Depending on what those files are "
"opened with, doing so can create quite a mess. Continue?" "opened with, doing so can create quite a mess. Continue?"
msgstr "" msgstr ""
#: core/app.py:98 #: core/app.py:110
msgid "will only be able to delete, move or copy 10 duplicates at once" msgid "will only be able to delete, move or copy 10 duplicates at once"
msgstr "" msgstr ""
#: core/app.py:232 #: core/app.py:254
msgid "No duplicates found." msgid "No duplicates found."
msgstr "没有找到重复文件。" msgstr "没有找到重复文件。"
#: core/app.py:245 #: core/app.py:267
msgid "All marked files were copied successfully." msgid "All marked files were copied successfully."
msgstr "" msgstr ""
#: core/app.py:246 #: core/app.py:268
msgid "All marked files were moved successfully." msgid "All marked files were moved successfully."
msgstr "" msgstr ""
#: core/app.py:247 #: core/app.py:269
msgid "All marked files were successfully sent to Trash." msgid "All marked files were successfully sent to Trash."
msgstr "" msgstr ""
#: core/app.py:274 #: core/app.py:296
msgid "" msgid ""
"You cannot delete, move or copy more than 10 duplicates at once in demo " "You cannot delete, move or copy more than 10 duplicates at once in demo "
"mode." "mode."
msgstr "" msgstr ""
#: core/app.py:285 #: core/app.py:307
msgid "'{}' already is in the list." msgid "'{}' already is in the list."
msgstr "" msgstr ""
#: core/app.py:287 #: core/app.py:309
msgid "'{}' does not exist." msgid "'{}' does not exist."
msgstr "" msgstr ""
#: core/app.py:294 #: core/app.py:316
msgid "" msgid ""
"All selected %d matches are going to be ignored in all subsequent scans. " "All selected %d matches are going to be ignored in all subsequent scans. "
"Continue?" "Continue?"
msgstr "目前已选的 %d 个匹配项将在后续的扫描中被忽略。继续吗?" msgstr "目前已选的 %d 个匹配项将在后续的扫描中被忽略。继续吗?"
#: core/app.py:354 #: core/app.py:376
msgid "copy" msgid "copy"
msgstr "复制" msgstr "复制"
#: core/app.py:354 #: core/app.py:376
msgid "move" msgid "move"
msgstr "移动" msgstr "移动"
#: core/app.py:355 #: core/app.py:377
msgid "Select a directory to {} marked files to" msgid "Select a directory to {} marked files to"
msgstr "选择一个文件夹将标记的 {} 个文件进行..." msgstr "选择一个文件夹将标记的 {} 个文件进行..."
#: core/app.py:381 #: core/app.py:403
msgid "Select a destination for your exported CSV" msgid "Select a destination for your exported CSV"
msgstr "" msgstr ""
#: core/app.py:406 #: core/app.py:428
msgid "You have no custom command set up. Set it up in your preferences." msgid "You have no custom command set up. Set it up in your preferences."
msgstr "你没有设定自定义命令。请在首选项中进行设定。" msgstr "你没有设定自定义命令。请在首选项中进行设定。"
#: core/app.py:512 core/app.py:523 #: core/app.py:535 core/app.py:546
msgid "You are about to remove %d files from results. Continue?" msgid "You are about to remove %d files from results. Continue?"
msgstr "你将从结果中移除 %d 个文件。继续吗?" msgstr "你将从结果中移除 %d 个文件。继续吗?"
#: core/app.py:543 #: core/app.py:566
msgid "{} duplicate groups were changed by the re-prioritization." msgid "{} duplicate groups were changed by the re-prioritization."
msgstr "" msgstr ""
#: core/app.py:563 #: core/app.py:586
msgid "Collecting files to scan" msgid "Collecting files to scan"
msgstr "收集文件以备扫描" msgstr "收集文件以备扫描"
#: core/app.py:574 #: core/app.py:597
msgid "The selected directories contain no scannable file." msgid "The selected directories contain no scannable file."
msgstr "所选文件夹中不包含可供扫描的文件。" msgstr "所选文件夹中不包含可供扫描的文件。"
#: core/app.py:613 #: core/app.py:636
msgid "%s (%d discarded)" msgid "%s (%d discarded)"
msgstr "%s (%d 无效)" msgstr "%s (%d 无效)"
@ -206,3 +206,33 @@ msgstr "验证 %d/%d 匹配项"
#: core_pe/matchexif.py:18 #: core_pe/matchexif.py:18
msgid "Read EXIF of %d/%d pictures" msgid "Read EXIF of %d/%d pictures"
msgstr "" msgstr ""
#: core/app.py:58
msgid "Scanning for duplicates"
msgstr "重复文件扫描中"
#: core/app.py:59
msgid "Loading"
msgstr "载入中"
#: core/app.py:60
msgid "Moving"
msgstr "移动中"
#: core/app.py:61
msgid "Copying"
msgstr "复制中"
#: core/app.py:62
msgid "Sending to Trash"
msgstr "移到垃圾桶"
#: core/app.py:65
msgid "Sending files to the recycle bin"
msgstr "将文件移到回收站"
#: core/app.py:246
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr "目前还有任务在执行,新任务无法开启。请等待几秒钟后再重新试一次。"

View File

@ -9,26 +9,6 @@ msgstr ""
"Language: zh_CN\n" "Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: cocoa/inter/app.py:15 qt/base/app.py:38
msgid "Scanning for duplicates"
msgstr "重复文件扫描中"
#: cocoa/inter/app.py:16 qt/base/app.py:39
msgid "Loading"
msgstr "载入中"
#: cocoa/inter/app.py:17 qt/base/app.py:40
msgid "Moving"
msgstr "移动中"
#: cocoa/inter/app.py:18 qt/base/app.py:41
msgid "Copying"
msgstr "复制中"
#: cocoa/inter/app.py:19
msgid "Sending to Trash"
msgstr "移到垃圾桶"
#: cocoa/inter/app_me.py:34 #: cocoa/inter/app_me.py:34
msgid "Removing dead tracks from your iTunes Library" msgid "Removing dead tracks from your iTunes Library"
msgstr "从你的iTunes库中移除无效的音轨" msgstr "从你的iTunes库中移除无效的音轨"
@ -81,10 +61,6 @@ msgstr ""
msgid "The iPhoto application couldn't be found." msgid "The iPhoto application couldn't be found."
msgstr "The iPhoto application couldn't be found." msgstr "The iPhoto application couldn't be found."
#: qt/base/app.py:42
msgid "Sending files to the recycle bin"
msgstr "将文件移到回收站"
#: qt/base/app.py:95 #: qt/base/app.py:95
msgid "Quit" msgid "Quit"
msgstr "退出" msgstr "退出"
@ -118,12 +94,6 @@ msgstr "检查更新"
msgid "Open Debug Log" msgid "Open Debug Log"
msgstr "打开调试记录" msgstr "打开调试记录"
#: qt/base/app.py:217 cocoa/base/en.lproj/Localizable.strings:0
msgid ""
"A previous action is still hanging in there. You can't start a new one yet. "
"Wait a few seconds, then try again."
msgstr "目前还有任务在执行,新任务无法开启。请等待几秒钟后再重新试一次。"
#: qt/base/app.py:257 #: qt/base/app.py:257
msgid "{} file (*.{})" msgid "{} file (*.{})"
msgstr "" msgstr ""
@ -854,9 +824,3 @@ msgstr "Zoom"
#: qt/base/deletion_options.py:46 #: qt/base/deletion_options.py:46
msgid " (unsupported)" msgid " (unsupported)"
msgstr "" msgstr ""
#~ msgid " (Mac OS X or Linux only)"
#~ msgstr ""
#~ msgid "Re-Prioritize Results"
#~ msgstr "Re-Prioritize Results"

View File

@ -13,17 +13,14 @@ import os.path as op
from PyQt4.QtCore import QTimer, QObject, QCoreApplication, QUrl, QProcess, SIGNAL, pyqtSignal from PyQt4.QtCore import QTimer, QObject, QCoreApplication, QUrl, QProcess, SIGNAL, pyqtSignal
from PyQt4.QtGui import QDesktopServices, QFileDialog, QDialog, QMessageBox, QApplication from PyQt4.QtGui import QDesktopServices, QFileDialog, QDialog, QMessageBox, QApplication
from jobprogress import job
from jobprogress.qt import Progress
from hscommon.trans import trget from hscommon.trans import trget
from hscommon.plat import ISLINUX from hscommon.plat import ISLINUX
from core.app import JobType
from qtlib.about_box import AboutBox from qtlib.about_box import AboutBox
from qtlib.recent import Recent from qtlib.recent import Recent
from qtlib.reg import Registration from qtlib.reg import Registration
from qtlib.util import createActions, getAppData from qtlib.util import createActions, getAppData
from qtlib.progress_window import ProgressWindow
from . import platform from . import platform
from .result_window import ResultWindow from .result_window import ResultWindow
@ -34,14 +31,6 @@ from .deletion_options import DeletionOptions
tr = trget('ui') tr = trget('ui')
JOBID2TITLE = {
JobType.Scan: tr("Scanning for duplicates"),
JobType.Load: tr("Loading"),
JobType.Move: tr("Moving"),
JobType.Copy: tr("Copying"),
JobType.Delete: tr("Sending files to the recycle bin"),
}
class DupeGuru(QObject): class DupeGuru(QObject):
MODELCLASS = None MODELCLASS = None
LOGO_NAME = '<replace this>' LOGO_NAME = '<replace this>'
@ -68,7 +57,7 @@ class DupeGuru(QObject):
self.recentResults = Recent(self, 'recentResults') self.recentResults = Recent(self, 'recentResults')
self.recentResults.mustOpenItem.connect(self.model.load_from) self.recentResults.mustOpenItem.connect(self.model.load_from)
self.resultWindow = self.RESULT_WINDOW_CLASS(self) self.resultWindow = self.RESULT_WINDOW_CLASS(self)
self._progress = Progress(self.resultWindow) self.progress_window = ProgressWindow(self.resultWindow, self.model.progress_window)
self.directories_dialog = DirectoriesDialog(self.resultWindow, self) self.directories_dialog = DirectoriesDialog(self.resultWindow, self)
self.details_dialog = self.DETAILS_DIALOG_CLASS(self.resultWindow, self) self.details_dialog = self.DETAILS_DIALOG_CLASS(self.resultWindow, self)
self.problemDialog = ProblemDialog(parent=self.resultWindow, model=self.model.problem_dialog) self.problemDialog = ProblemDialog(parent=self.resultWindow, model=self.model.problem_dialog)
@ -86,7 +75,6 @@ class DupeGuru(QObject):
# that the application haven't launched. # that the application haven't launched.
QTimer.singleShot(0, self.finishedLaunching) QTimer.singleShot(0, self.finishedLaunching)
self.connect(QCoreApplication.instance(), SIGNAL('aboutToQuit()'), self.application_will_terminate) self.connect(QCoreApplication.instance(), SIGNAL('aboutToQuit()'), self.application_will_terminate)
self.connect(self._progress, SIGNAL('finished(QString)'), self.job_finished)
def _setupActions(self): def _setupActions(self):
# Setup actions that are common to both the directory dialog and the results window. # Setup actions that are common to both the directory dialog and the results window.
@ -164,11 +152,6 @@ class DupeGuru(QObject):
def ignoreListTriggered(self): def ignoreListTriggered(self):
self.model.ignore_list_dialog.show() self.model.ignore_list_dialog.show()
def job_finished(self, jobid):
result = self.model._job_completed(jobid, self._progress.last_error)
if not result:
self._progress.reraise_if_error()
def openDebugLogTriggered(self): def openDebugLogTriggered(self):
debugLogPath = op.join(self.model.appdata, 'debug.log') debugLogPath = op.join(self.model.appdata, 'debug.log')
self.open_path(debugLogPath) self.open_path(debugLogPath)
@ -207,16 +190,6 @@ class DupeGuru(QObject):
def reveal_path(path): def reveal_path(path):
DupeGuru.open_path(path[:-1]) DupeGuru.open_path(path[:-1])
def start_job(self, jobid, func, args=()):
title = JOBID2TITLE[jobid]
try:
j = self._progress.create_job()
args = (j, ) + tuple(args)
self._progress.run(jobid, title, func, args=args)
except job.JobInProgressError:
msg = tr("A previous action is still hanging in there. You can't start a new one yet. Wait a few seconds, then try again.")
QMessageBox.information(self.resultWindow, 'Action in progress', msg)
def get_default(self, key): def get_default(self, key):
return self.prefs.get_value(key) return self.prefs.get_value(key)