1
0
镜像自地址 https://github.com/arsenetar/dupeguru.git 已同步 2025-09-11 17:58:17 +00:00

[#125 state:fixed] Wrapped error message around a crash when the iPhoto app can't be found.

这个提交包含在:
Virgil Dupras 2010-12-31 12:10:44 +01:00
父节点 6a6f2d51aa
当前提交 09082955a3
共有 2 个文件被更改,包括 27 次插入10 次删除

查看文件

@ -63,13 +63,16 @@ http://www.hardcoded.net/licenses/bsd_license
[_py setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])]; [_py setIgnoreHardlinkMatches:n2b([ud objectForKey:@"ignoreHardlinkMatches"])];
[_py setMatchScaled:[ud objectForKey:@"matchScaled"]]; [_py setMatchScaled:[ud objectForKey:@"matchScaled"]];
int r = n2i([py doScan]); int r = n2i([py doScan]);
if (r != 0) if (r != 0) {
[[ProgressController mainProgressController] hide]; [[ProgressController mainProgressController] hide];
if (r == 3) }
{ if (r == 3) {
[Dialogs showMessage:@"The selected directories contain no scannable file."]; [Dialogs showMessage:@"The selected directories contain no scannable file."];
[app toggleDirectories:nil]; [app toggleDirectories:nil];
} }
if (r == 4) {
[Dialogs showMessage:@"The iPhoto application couldn't be found."];
}
} }
- (IBAction)toggleDirectories:(id)sender - (IBAction)toggleDirectories:(id)sender

查看文件

@ -11,7 +11,7 @@ import plistlib
import logging import logging
import re import re
from appscript import app, k, CommandError from appscript import app, k, CommandError, ApplicationNotFoundError
from hsutil import io from hsutil import io
from hsutil.str import get_file_ext, remove_invalid_xml from hsutil.str import get_file_ext, remove_invalid_xml
@ -24,12 +24,14 @@ from core import app_cocoa, directories
from . import data, _block_osx from . import data, _block_osx
from .scanner import ScannerPE from .scanner import ScannerPE
IPHOTO_PATH = Path('iPhoto Library')
class Photo(fs.File): class Photo(fs.File):
INITIAL_INFO = fs.File.INITIAL_INFO.copy() INITIAL_INFO = fs.File.INITIAL_INFO.copy()
INITIAL_INFO.update({ INITIAL_INFO.update({
'dimensions': (0,0), 'dimensions': (0,0),
}) })
HANDLED_EXTS = set(['png', 'jpg', 'jpeg', 'gif', 'psd', 'bmp', 'tiff', 'tif', 'nef', 'cr2']) HANDLED_EXTS = {'png', 'jpg', 'jpeg', 'gif', 'psd', 'bmp', 'tiff', 'tif', 'nef', 'cr2'}
@classmethod @classmethod
def can_handle(cls, path): def can_handle(cls, path):
@ -97,7 +99,7 @@ class Directories(directories.Directories):
self.iphoto_libpath = None self.iphoto_libpath = None
def _get_files(self, from_path): def _get_files(self, from_path):
if from_path == Path('iPhoto Library'): if from_path == IPHOTO_PATH:
if self.iphoto_libpath is None: if self.iphoto_libpath is None:
return [] return []
is_ref = self.get_state(from_path) == directories.STATE_REFERENCE is_ref = self.get_state(from_path) == directories.STATE_REFERENCE
@ -110,23 +112,26 @@ class Directories(directories.Directories):
@staticmethod @staticmethod
def get_subfolders(path): def get_subfolders(path):
if path == Path('iPhoto Library'): if path == IPHOTO_PATH:
return [] return []
else: else:
return directories.Directories.get_subfolders(path) return directories.Directories.get_subfolders(path)
def add_path(self, path): def add_path(self, path):
if path == Path('iPhoto Library'): if path == IPHOTO_PATH:
if path not in self: if path not in self:
self._dirs.append(path) self._dirs.append(path)
else: else:
directories.Directories.add_path(self, path) directories.Directories.add_path(self, path)
def has_iphoto_path(self):
return any(path == IPHOTO_PATH for path in self._dirs)
def has_any_file(self): def has_any_file(self):
# If we don't do that, it causes a hangup in the GUI when we click Start Scanning because # If we don't do that, it causes a hangup in the GUI when we click Start Scanning because
# checking if there's any file to scan involves reading the whole library. If we have the # checking if there's any file to scan involves reading the whole library. If we have the
# iPhoto library, we assume we have at least one file. # iPhoto library, we assume we have at least one file.
if any(path == Path('iPhoto Library') for path in self._dirs): if self.has_iphoto_path():
return True return True
else: else:
return directories.Directories.has_any_file(self) return directories.Directories.has_any_file(self)
@ -158,7 +163,7 @@ class DupeGuruPE(app_cocoa.DupeGuru):
self.path2iphoto[str(photo.image_path(timeout=0))] = photo self.path2iphoto[str(photo.image_path(timeout=0))] = photo
except CommandError: except CommandError:
pass pass
except (CommandError, RuntimeError): except (CommandError, RuntimeError, ApplicationNotFoundError):
pass pass
j.start_job(self.results.mark_count, "Sending dupes to the Trash") j.start_job(self.results.mark_count, "Sending dupes to the Trash")
self.results.perform_on_marked(op, True) self.results.perform_on_marked(op, True)
@ -203,3 +208,12 @@ class DupeGuruPE(app_cocoa.DupeGuru):
return None return None
return ref.path return ref.path
def start_scanning(self):
result = app_cocoa.DupeGuru.start_scanning(self)
if self.directories.has_iphoto_path():
try:
app('iPhoto')
except ApplicationNotFoundError:
return 4
return result