[vlc-commits] macosx: cancel resume dialog after 6 seconds
David Fuhrmann
git at videolan.org
Sat Nov 29 15:03:55 CET 2014
vlc | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Sat Nov 29 15:01:39 2014 +0100| [67b241aa87e243ac7906c11efeb47bfe2578a3c6] | committer: David Fuhrmann
macosx: cancel resume dialog after 6 seconds
Also reduce intentation of code.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=67b241aa87e243ac7906c11efeb47bfe2578a3c6
---
modules/gui/macosx/playlist.h | 2 +
modules/gui/macosx/playlist.m | 103 +++++++++++++++++++++++++++--------------
2 files changed, 69 insertions(+), 36 deletions(-)
diff --git a/modules/gui/macosx/playlist.h b/modules/gui/macosx/playlist.h
index 63a8941..b947884 100644
--- a/modules/gui/macosx/playlist.h
+++ b/modules/gui/macosx/playlist.h
@@ -101,6 +101,8 @@
IBOutlet id o_save_accessory_text;
IBOutlet id o_playlist_header;
+
+ int currentResumeTimeout;
}
- (void)searchfieldChanged:(NSNotification *)o_notification;
diff --git a/modules/gui/macosx/playlist.m b/modules/gui/macosx/playlist.m
index 80e911a..203381e 100644
--- a/modules/gui/macosx/playlist.m
+++ b/modules/gui/macosx/playlist.m
@@ -1486,56 +1486,87 @@
return YES;
}
+- (void)updateAlertWindow:(NSTimer *)timer
+{
+ NSAlert *alert = [timer userInfo];
+
+ --currentResumeTimeout;
+ if (currentResumeTimeout <= 0) {
+ [[alert window] close];
+ [NSApp abortModal];
+ }
+
+ NSString *buttonLabel = _NS("Restart playback");
+ buttonLabel = [buttonLabel stringByAppendingFormat:@" (%d)", currentResumeTimeout];
+
+ [[[alert buttons] objectAtIndex:2] setTitle:buttonLabel];
+}
+
- (void)continuePlaybackWhereYouLeftOff:(input_thread_t *)p_input_thread
{
NSDictionary *recentlyPlayedFiles = [[NSUserDefaults standardUserDefaults] objectForKey:@"recentlyPlayedMedia"];
- if (recentlyPlayedFiles) {
- input_item_t *p_item = input_GetItem(p_input_thread);
- if (!p_item)
- return;
+ if (!recentlyPlayedFiles)
+ return;
- /* allow the user to over-write the start/stop/run-time */
- if (var_GetFloat(p_input_thread, "run-time") > 0 ||
- var_GetFloat(p_input_thread, "start-time") > 0 ||
- var_GetFloat(p_input_thread, "stop-time") > 0) {
- return;
- }
+ input_item_t *p_item = input_GetItem(p_input_thread);
+ if (!p_item)
+ return;
- /* check for file existance before resuming */
- if (![self isValidResumeItem:p_item])
- return;
+ /* allow the user to over-write the start/stop/run-time */
+ if (var_GetFloat(p_input_thread, "run-time") > 0 ||
+ var_GetFloat(p_input_thread, "start-time") > 0 ||
+ var_GetFloat(p_input_thread, "stop-time") > 0) {
+ return;
+ }
- char *psz_url = decode_URI(input_item_GetURI(p_item));
- if (!psz_url)
- return;
- NSString *url = toNSStr(psz_url);
- free(psz_url);
+ /* check for file existance before resuming */
+ if (![self isValidResumeItem:p_item])
+ return;
- NSNumber *lastPosition = [recentlyPlayedFiles objectForKey:url];
- if (lastPosition && lastPosition.intValue > 0) {
+ char *psz_url = decode_URI(input_item_GetURI(p_item));
+ if (!psz_url)
+ return;
+ NSString *url = toNSStr(psz_url);
+ free(psz_url);
- int settingValue = config_GetInt(VLCIntf, "macosx-continue-playback");
- NSInteger returnValue = NSAlertErrorReturn;
+ NSNumber *lastPosition = [recentlyPlayedFiles objectForKey:url];
+ if (!lastPosition || lastPosition.intValue <= 0)
+ return;
- if (settingValue == 0) {
- NSAlert *theAlert = [NSAlert alertWithMessageText:_NS("Continue playback?") defaultButton:_NS("Continue") alternateButton:_NS("Restart playback") otherButton:_NS("Always continue") informativeTextWithFormat:_NS("Playback of \"%@\" will continue at %@"), [NSString stringWithUTF8String:input_item_GetTitleFbName(p_item)], [[VLCStringUtility sharedInstance] stringForTime:lastPosition.intValue]];
+ int settingValue = config_GetInt(VLCIntf, "macosx-continue-playback");
+ if (settingValue == 2) // never resume
+ return;
- [[VLCCoreInteraction sharedInstance] pause];
- returnValue = [theAlert runModal];
- [[VLCCoreInteraction sharedInstance] playOrPause];
- }
+ NSInteger returnValue = NSAlertErrorReturn;
+ if (settingValue == 0) { // ask
+ NSAlert *theAlert = [NSAlert alertWithMessageText:_NS("Continue playback?") defaultButton:_NS("Continue") alternateButton:_NS("Restart playback") otherButton:_NS("Always continue") informativeTextWithFormat:_NS("Playback of \"%@\" will continue at %@"), [NSString stringWithUTF8String:input_item_GetTitleFbName(p_item)], [[VLCStringUtility sharedInstance] stringForTime:lastPosition.intValue]];
- if (returnValue == NSAlertAlternateReturn || settingValue == 2)
- lastPosition = [NSNumber numberWithInt:0];
+ currentResumeTimeout = 6;
+ NSTimer *timer = [NSTimer timerWithTimeInterval:1
+ target:self
+ selector:@selector(updateAlertWindow:)
+ userInfo:theAlert
+ repeats:YES];
- mtime_t lastPos = (mtime_t)lastPosition.intValue * 1000000;
- msg_Dbg(VLCIntf, "continuing playback at %lld", lastPos);
- var_SetTime(p_input_thread, "time", lastPos);
+ [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSModalPanelRunLoopMode];
- if (returnValue == NSAlertOtherReturn)
- config_PutInt(VLCIntf, "macosx-continue-playback", 1);
- }
+ [[VLCCoreInteraction sharedInstance] pause];
+ returnValue = [theAlert runModal];
+ [timer invalidate];
+ [[VLCCoreInteraction sharedInstance] playOrPause];
+
+ // restart button was pressed or timeout happened
+ if (returnValue == NSAlertAlternateReturn ||
+ returnValue == NSRunAbortedResponse)
+ return;
}
+
+ mtime_t lastPos = (mtime_t)lastPosition.intValue * 1000000;
+ msg_Dbg(VLCIntf, "continuing playback at %lld", lastPos);
+ var_SetTime(p_input_thread, "time", lastPos);
+
+ if (returnValue == NSAlertOtherReturn)
+ config_PutInt(VLCIntf, "macosx-continue-playback", 1);
}
- (void)storePlaybackPositionForItem:(input_thread_t *)p_input_thread
More information about the vlc-commits
mailing list