diff --git a/cocoa/inter/app.py b/cocoa/inter/app.py index f04ccf41..92379a41 100644 --- a/cocoa/inter/app.py +++ b/cocoa/inter/app.py @@ -14,7 +14,7 @@ class PyDupeGuruBase(PyBaseApp): @dontwrap def _init(self, modelclass): logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(message)s') - install_exception_hook() + install_exception_hook('https://github.com/hsoft/dupeguru/issues') install_cocoa_logger() patch_threaded_job_performer() self.model = modelclass(self) diff --git a/cocoalib/HSErrorReportWindow.h b/cocoalib/HSErrorReportWindow.h index 06cd76ec..4aef27c7 100644 --- a/cocoalib/HSErrorReportWindow.h +++ b/cocoalib/HSErrorReportWindow.h @@ -11,14 +11,16 @@ http://www.hardcoded.net/licenses/bsd_license @interface HSErrorReportWindow : NSWindowController { NSTextView *contentTextView; + NSString *githubUrl; } @property (readwrite, retain) NSTextView *contentTextView; +@property (readwrite, retain) NSString *githubUrl; // True if the user wants to send the report -+ (BOOL)showErrorReportWithContent:(NSString *)content; -- (id)initWithContent:(NSString *)content; ++ (void)showErrorReportWithContent:(NSString *)content githubUrl:(NSString *)githubUrl; +- (id)initWithContent:(NSString *)content githubUrl:(NSString *)githubUrl; -- (void)send; -- (void)dontSend; +- (void)goToGithub; +- (void)close; @end \ No newline at end of file diff --git a/cocoalib/HSErrorReportWindow.m b/cocoalib/HSErrorReportWindow.m index b872c410..4ad4bd3e 100644 --- a/cocoalib/HSErrorReportWindow.m +++ b/cocoalib/HSErrorReportWindow.m @@ -12,33 +12,33 @@ http://www.hardcoded.net/licenses/bsd_license @implementation HSErrorReportWindow @synthesize contentTextView; +@synthesize githubUrl; -+ (BOOL)showErrorReportWithContent:(NSString *)content ++ (void)showErrorReportWithContent:(NSString *)content githubUrl:(NSString *)githubUrl { - HSErrorReportWindow *report = [[HSErrorReportWindow alloc] initWithContent:content]; - NSInteger result = [NSApp runModalForWindow:[report window]]; + HSErrorReportWindow *report = [[HSErrorReportWindow alloc] initWithContent:content githubUrl:githubUrl]; + [NSApp runModalForWindow:[report window]]; [report release]; - return result == NSOKButton; } -- (id)initWithContent:(NSString *)content +- (id)initWithContent:(NSString *)content githubUrl:(NSString *)aGithubUrl { self = [super initWithWindow:nil]; [self setWindow:createHSErrorReportWindow_UI(self)]; [contentTextView alignLeft:nil]; [[[contentTextView textStorage] mutableString] setString:content]; + self.githubUrl = aGithubUrl; return self; } -- (void)send +- (void)goToGithub +{ + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:self.githubUrl]]; +} + +- (void)close { [[self window] orderOut:self]; [NSApp stopModalWithCode:NSOKButton]; } - -- (void)dontSend -{ - [[self window] orderOut:self]; - [NSApp stopModalWithCode:NSCancelButton]; -} @end \ No newline at end of file diff --git a/cocoalib/cocoa/CocoaProxy.h b/cocoalib/cocoa/CocoaProxy.h index 4e9fdaac..0646e9be 100644 --- a/cocoalib/cocoa/CocoaProxy.h +++ b/cocoalib/cocoa/CocoaProxy.h @@ -28,7 +28,7 @@ - (NSString *)url2path:(NSString *)url; - (void)createPool; - (void)destroyPool; -- (BOOL)reportCrash:(NSString *)crashReport; +- (void)reportCrash:(NSString *)crashReport withGithubUrl:(NSString *)githubUrl; - (void)log:(NSString *)s; - (NSDictionary *)readExifData:(NSString *)imagePath; @end \ No newline at end of file diff --git a/cocoalib/cocoa/CocoaProxy.m b/cocoalib/cocoa/CocoaProxy.m index 78cac95a..7051a278 100644 --- a/cocoalib/cocoa/CocoaProxy.m +++ b/cocoalib/cocoa/CocoaProxy.m @@ -143,9 +143,9 @@ } } -- (BOOL)reportCrash:(NSString *)crashReport +- (void)reportCrash:(NSString *)crashReport withGithubUrl:(NSString *)githubUrl { - return [HSErrorReportWindow showErrorReportWithContent:crashReport]; + return [HSErrorReportWindow showErrorReportWithContent:crashReport githubUrl:githubUrl]; } - (void)log:(NSString *)s diff --git a/cocoalib/cocoa/__init__.py b/cocoalib/cocoa/__init__.py index 40adb1ec..2c1ab58a 100644 --- a/cocoalib/cocoa/__init__.py +++ b/cocoalib/cocoa/__init__.py @@ -11,7 +11,6 @@ import time import traceback import sys -from hscommon.error_report import send_error_report from .CocoaProxy import CocoaProxy proxy = CocoaProxy() @@ -81,21 +80,20 @@ def safe_format_exception(type, value, tb): result.extend(traceback.format_exception_only(type, value)) return result -def report_crash(type, value, tb): - app_identifier = proxy.bundleIdentifier() - app_version = proxy.appVersion() - osx_version = proxy.osxVersion() - s = "Application Identifier: {}\n".format(app_identifier) - s += "Application Version: {}\n".format(app_version) - s += "Mac OS X Version: {}\n\n".format(osx_version) - s += ''.join(safe_format_exception(type, value, tb)) - if LOG_BUFFER: - s += '\nRelevant Console logs:\n\n' - s += '\n'.join(LOG_BUFFER) - if proxy.reportCrash_(s): - send_error_report(s) +def install_exception_hook(github_url): + def report_crash(type, value, tb): + app_identifier = proxy.bundleIdentifier() + app_version = proxy.appVersion() + osx_version = proxy.osxVersion() + s = "Application Identifier: {}\n".format(app_identifier) + s += "Application Version: {}\n".format(app_version) + s += "Mac OS X Version: {}\n\n".format(osx_version) + s += ''.join(safe_format_exception(type, value, tb)) + if LOG_BUFFER: + s += '\nRelevant Console logs:\n\n' + s += '\n'.join(LOG_BUFFER) + proxy.reportCrash_withGithubUrl_(s, github_url) -def install_exception_hook(): sys.excepthook = report_crash # A global log buffer to use for error reports diff --git a/cocoalib/ui/error_report.py b/cocoalib/ui/error_report.py index 30f86d34..5494623d 100644 --- a/cocoalib/ui/error_report.py +++ b/cocoalib/ui/error_report.py @@ -1,33 +1,41 @@ ownerclass = 'HSErrorReportWindow' ownerimport = 'HSErrorReportWindow.h' -result = Window(524, 390, "Error Report") +result = Window(524, 470, "Error Report") result.canClose = False result.canResize = False result.canMinimize = False -label1 = Label(result, "Something went wrong. Would you like to send the error report to Hardcoded Software?") +label1 = Label(result, "Something went wrong. How about reporting the error?") errorTextView = TextView(result) -label2 = Label(result, "Although the application should continue to run after this error, it may be in an instable state, so it is recommended that you restart the application.") -sendButton = Button(result, "Send") -dontSendButton = Button(result, "Don't Send") +label2 = Label(result, + "Error reports should be reported as Github issues. You can copy the error traceback " + "above and paste it in a new issue (bonus point if you run a search to make sure the " + "issue doesn't already exist). What usually really helps is if you add a description " + "of how you got the error. Thanks!" + "\n\n" + "Although the application should continue to run after this error, it may be in an " + "unstable state, so it is recommended that you restart the application." +) +sendButton = Button(result, "Go to Github") +dontSendButton = Button(result, "Close") owner.contentTextView = errorTextView -sendButton.action = Action(owner, 'send') +sendButton.action = Action(owner, 'goToGithub') sendButton.keyEquivalent = "\\r" -dontSendButton.action = Action(owner, 'dontSend') +dontSendButton.action = Action(owner, 'close') dontSendButton.keyEquivalent = "\\E" label1.height = 34 errorTextView.height = 221 -label2.height = 51 +label2.height = 130 sendButton.width = 100 dontSendButton.width = 100 -label1.packToCorner(Pack.UpperLeft) +label1.moveTo(Pack.UpperLeft) label1.fill(Pack.Right) -errorTextView.packRelativeTo(label1, Pack.Below, Pack.Left) +errorTextView.moveNextTo(label1, Pack.Below, Pack.Left) errorTextView.fill(Pack.Right) -label2.packRelativeTo(errorTextView, Pack.Below, Pack.Left) +label2.moveNextTo(errorTextView, Pack.Below, Pack.Left) label2.fill(Pack.Right) -sendButton.packRelativeTo(label2, Pack.Below, Pack.Right) -dontSendButton.packRelativeTo(sendButton, Pack.Left, Pack.Middle) +sendButton.moveNextTo(label2, Pack.Below, Pack.Right) +dontSendButton.moveNextTo(sendButton, Pack.Left, Pack.Middle)