dupeguru/core/app_cocoa.py

79 lines
2.9 KiB
Python

# Created By: Virgil Dupras
# Created On: 2006/11/11
# Copyright 2011 Hardcoded Software (http://www.hardcoded.net)
#
# This software is licensed under the "BSD" License as described in the "LICENSE" file,
# which should be included with this package. The terms are also available at
# http://www.hardcoded.net/licenses/bsd_license
import logging
import os.path as op
from jobprogress import job
from hscommon import cocoa
from hscommon.cocoa import install_exception_hook, pythonify
from hscommon.cocoa.objcmin import (NSNotificationCenter, NSUserDefaults,
NSSearchPathForDirectoriesInDomains, NSApplicationSupportDirectory, NSUserDomainMask,
NSWorkspace)
from hscommon.trans import tr
from . import app
JOBID2TITLE = {
app.JOB_SCAN: tr("Scanning for duplicates"),
app.JOB_LOAD: tr("Loading"),
app.JOB_MOVE: tr("Moving"),
app.JOB_COPY: tr("Copying"),
app.JOB_DELETE: tr("Sending to Trash"),
}
class DupeGuru(app.DupeGuru):
def __init__(self, data_module, appdata_subdir):
logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(message)s')
install_exception_hook()
appsupport = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, True)[0]
appdata = op.join(appsupport, appdata_subdir)
app.DupeGuru.__init__(self, data_module, appdata)
self.progress = cocoa.ThreadedJobPerformer()
#--- Override
@staticmethod
def _open_path(path):
NSWorkspace.sharedWorkspace().openFile_(str(path))
@staticmethod
def _reveal_path(path):
NSWorkspace.sharedWorkspace().selectFile_inFileViewerRootedAtPath_(str(path), '')
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:
NSNotificationCenter.defaultCenter().postNotificationName_object_('JobInProgress', self)
else:
ud = {'desc': JOBID2TITLE[jobid], 'jobid':jobid}
NSNotificationCenter.defaultCenter().postNotificationName_object_userInfo_('JobStarted', self, ud)
def _get_default(self, key_name):
raw = NSUserDefaults.standardUserDefaults().objectForKey_(key_name)
result = pythonify(raw)
return result
def _set_default(self, key_name, value):
NSUserDefaults.standardUserDefaults().setObject_forKey_(value, key_name)
def _show_extra_fairware_reminder(self):
NSNotificationCenter.defaultCenter().postNotificationName_object_userInfo_('ShowExtraFairwareReminder', self, None)
#--- Public
def start_scanning(self):
self._select_dupes([])
try:
app.DupeGuru.start_scanning(self)
return 0
except app.NoScannableFileError:
return 3