]> git.sesse.net Git - vlc/commitdiff
macosx: Fix resume playback in certain situations
authorDavid Fuhrmann <dfuhrmann@videolan.org>
Sat, 1 Nov 2014 11:26:48 +0000 (12:26 +0100)
committerDavid Fuhrmann <dfuhrmann@videolan.org>
Sat, 1 Nov 2014 11:34:35 +0000 (12:34 +0100)
For resumption we need to rely on the "time" variable instead of
"position", as the total duration of the file might not have been
set yet.

Also simplifies the code.

close #11981

modules/gui/macosx/playlist.m

index e29d39f8e975edcf41983504780d94bc88c6629b..57f7ae9afeaaf02174249278f375113120aec3f0 100644 (file)
 
         NSNumber *lastPosition = [recentlyPlayedFiles objectForKey:url];
         if (lastPosition && lastPosition.intValue > 0) {
-            vlc_value_t pos;
-            var_Get(p_input_thread, "position", &pos);
-            float f_current_pos = 100. * pos.f_float;
-            long long int dur = input_item_GetDuration(p_item) / 1000000;
-            int current_pos_in_sec = (f_current_pos * dur) / 100;
-
-            if (current_pos_in_sec >= lastPosition.intValue)
-                return;
 
             int settingValue = config_GetInt(VLCIntf, "macosx-continue-playback");
             NSInteger returnValue = NSAlertErrorReturn;
             if (returnValue == NSAlertAlternateReturn || settingValue == 2)
                 lastPosition = [NSNumber numberWithInt:0];
 
-            pos.f_float = (float)lastPosition.intValue / (float)dur;
-            msg_Dbg(VLCIntf, "continuing playback at %2.2f", pos.f_float);
-            var_Set(p_input_thread, "position", pos);
+            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);
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
     NSMutableDictionary *mutDict = [[NSMutableDictionary alloc] initWithDictionary:[defaults objectForKey:@"recentlyPlayedMedia"]];
 
-    vlc_value_t pos;
-    var_Get(p_input_thread, "position", &pos);
-    float f_current_pos = 100. * pos.f_float;
-    long long int dur = input_item_GetDuration(p_item) / 1000000;
-    int current_pos_in_sec = (f_current_pos * dur) / 100;
+    float relativePos = var_GetFloat(p_input_thread, "position");
+    mtime_t pos = var_GetTime(p_input_thread, "time") / 1000000;
+    mtime_t dur = input_item_GetDuration(p_item) / 1000000;
+
     NSMutableArray *mediaList = [[defaults objectForKey:@"recentlyPlayedMediaList"] mutableCopy];
 
-    if (pos.f_float > .05 && pos.f_float < .95 && dur > 180) {
-        [mutDict setObject:[NSNumber numberWithInt:current_pos_in_sec] forKey:url];
+    if (relativePos > .05 && relativePos < .95 && dur > 180) {
+        [mutDict setObject:[NSNumber numberWithInt:pos] forKey:url];
 
         [mediaList removeObject:url];
         [mediaList addObject:url];