]> git.sesse.net Git - vlc/blobdiff - modules/gui/macosx/bookmarks.m
macosx gui: use vlc_path2uri.
[vlc] / modules / gui / macosx / bookmarks.m
index d07b8d1ca61b935bf288250771f5d47f161bc708..049e63d1343c4fc992dbbb80ad3a15ac7042a8d4 100644 (file)
@@ -117,12 +117,12 @@ static VLCBookmarks *_o_sharedInstance = nil;
     /* add item to list */
     input_thread_t * p_input = pl_CurrentInput( VLCIntf );
 
-    if( !p_input ) return;
+    if( !p_input )
+        return;
 
     seekpoint_t bookmark;
 
-    if( !input_Control( p_input, INPUT_GET_BOOKMARK, &bookmark ) )
-    {
+    if( !input_Control( p_input, INPUT_GET_BOOKMARK, &bookmark ) ) {
         bookmark.psz_name = _("Untitled");
         input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark );
     }
@@ -161,25 +161,23 @@ static VLCBookmarks *_o_sharedInstance = nil;
     if( !p_input )
         return;
 
-    if( row < 0 )
-    {
+    if( row < 0 ) {
         vlc_object_release( p_input );
         return;
     }
 
-    if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
-        &i_bookmarks ) != VLC_SUCCESS )
-    {
+    if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, &i_bookmarks ) != VLC_SUCCESS ) {
         vlc_object_release( p_input );
         return;
     }
 
-    [o_edit_fld_name setStringValue: [NSString stringWithUTF8String:
-            pp_bookmarks[row]->psz_name]];
-    [o_edit_fld_time setStringValue: [[NSNumber numberWithInt:
-            (pp_bookmarks[row]->i_time_offset / 1000000)] stringValue]];
-    [o_edit_fld_bytes setStringValue: [[NSNumber numberWithInt:
-            pp_bookmarks[row]->i_byte_offset] stringValue]];
+    [o_edit_fld_name setStringValue: [NSString stringWithFormat:@"%s", pp_bookmarks[row]->psz_name]];
+    int total = pp_bookmarks[row]->i_time_offset/ 1000000;
+    int hour = total / (60*60);
+    int min = (total - hour*60*60) / 60;
+    int sec = total - hour*60*60 - min*60;
+    [o_edit_fld_time setStringValue: [NSString stringWithFormat:@"%02d:%02d:%02d", hour, min, sec]];
+    [o_edit_fld_bytes setStringValue: [NSString stringWithFormat:@"%lli", pp_bookmarks[row]->i_byte_offset]];
 
     /* Just keep the pointer value to check if it
      * changes. Note, we don't need to keep a reference to the object.
@@ -187,17 +185,12 @@ static VLCBookmarks *_o_sharedInstance = nil;
     p_old_input = p_input;
     vlc_object_release( p_input );
 
-    [NSApp beginSheet: o_edit_window
-        modalForWindow: o_bookmarks_window
-        modalDelegate: o_edit_window
-        didEndSelector: nil
-        contextInfo: nil];
+    [NSApp beginSheet: o_edit_window modalForWindow: o_bookmarks_window modalDelegate: o_edit_window didEndSelector: nil contextInfo: nil];
 
     // Clear the bookmark list
     for( int i = 0; i < i_bookmarks; i++)
         vlc_seekpoint_Delete( pp_bookmarks[i] );
     free( pp_bookmarks );
-
 }
 
 - (IBAction)edit_cancel:(id)sender
@@ -214,28 +207,17 @@ static VLCBookmarks *_o_sharedInstance = nil;
     int i_bookmarks, i;
     input_thread_t * p_input = pl_CurrentInput( VLCIntf );
 
-    if( !p_input )
-    {
-        NSBeginCriticalAlertSheet(_NS("No input"), _NS("OK"),
-                @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("No "
-                "input found. A stream must be playing or paused for "
-                "bookmarks to work."));
+    if( !p_input ) {
+        NSBeginCriticalAlertSheet(_NS("No input"), _NS("OK"), @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("No input found. A stream must be playing or paused for bookmarks to work."));
         return;
     }
-    if( p_old_input != p_input )
-    {
-        NSBeginCriticalAlertSheet(_NS("Input has changed"), _NS("OK"),
-            @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("Input "
-            "has changed, unable to save bookmark. Suspending playback with "
-            "\"Pause\" while editing bookmarks to ensure to keep the same "
-            "input."));
+    if( p_old_input != p_input ) {
+        NSBeginCriticalAlertSheet(_NS("Input has changed"), _NS("OK"), @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("Input has changed, unable to save bookmark. Suspending playback with \"Pause\" while editing bookmarks to ensure to keep the same input."));
         vlc_object_release( p_input );
         return;
     }
 
-    if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
-        &i_bookmarks ) != VLC_SUCCESS )
-    {
+    if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, &i_bookmarks ) != VLC_SUCCESS ) {
         vlc_object_release( p_input );
         return;
     }
@@ -246,11 +228,21 @@ static VLCBookmarks *_o_sharedInstance = nil;
 
     pp_bookmarks[i]->psz_name = strdup([[o_edit_fld_name stringValue] UTF8String]);
     pp_bookmarks[i]->i_byte_offset = [[o_edit_fld_bytes stringValue] intValue];
-    pp_bookmarks[i]->i_time_offset = ([[o_edit_fld_time stringValue] intValue]  * 1000000);
 
-    if( input_Control( p_input, INPUT_CHANGE_BOOKMARK, pp_bookmarks[i], i )
-        != VLC_SUCCESS )
-    {
+    NSArray * components = [[o_edit_fld_time stringValue] componentsSeparatedByString:@":"];
+    NSUInteger componentCount = [components count];
+    if( componentCount == 1 )
+        pp_bookmarks[i]->i_time_offset = 1000000 * ( [[components objectAtIndex:0] intValue] );
+    else if( componentCount == 2 )
+        pp_bookmarks[i]->i_time_offset = 1000000 * ( [[components objectAtIndex:0] intValue] * 60 + [[components objectAtIndex:1] intValue] );
+    else if( componentCount == 3 )
+        pp_bookmarks[i]->i_time_offset = 1000000 * ( [[components objectAtIndex:0] intValue] * 3600 + [[components objectAtIndex:1] intValue] * 60 + [[components objectAtIndex:2] intValue] );
+    else {
+        msg_Err( VLCIntf, "Invalid string format for time" );
+        goto clear;
+    }
+
+    if( input_Control( p_input, INPUT_CHANGE_BOOKMARK, pp_bookmarks[i], i ) != VLC_SUCCESS ) {
         msg_Warn( VLCIntf, "Unable to change the bookmark");
         goto clear;
     }
@@ -258,7 +250,6 @@ static VLCBookmarks *_o_sharedInstance = nil;
     [o_tbl_dataTable reloadData];
     vlc_object_release( p_input );
 
-
     [NSApp endSheet: o_edit_window];
     [o_edit_window close];
 
@@ -271,20 +262,13 @@ clear:
 
 - (IBAction)extract:(id)sender
 {
-    /* extract */
-    if( [o_tbl_dataTable numberOfSelectedRows] < 2 )
-    {
-        NSBeginAlertSheet(_NS("Invalid selection"), _NS("OK"),
-            @"", @"", o_bookmarks_window, nil, nil, nil, nil,
-            _NS("Two bookmarks have to be selected."));
+    if( [o_tbl_dataTable numberOfSelectedRows] < 2 ) {
+        NSBeginAlertSheet(_NS("Invalid selection"), _NS("OK"), @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("Two bookmarks have to be selected."));
         return;
     }
     input_thread_t * p_input = pl_CurrentInput( VLCIntf );
-    if( !p_input )
-    {
-        NSBeginCriticalAlertSheet(_NS("No input found"), _NS("OK"),
-            @"", @"", o_bookmarks_window, nil, nil, nil, nil,
-            _NS("The stream must be playing or paused for bookmarks to work."));
+    if( !p_input ) {
+        NSBeginCriticalAlertSheet(_NS("No input found"), _NS("OK"), @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("The stream must be playing or paused for bookmarks to work."));
         return;
     }
 
@@ -293,44 +277,28 @@ clear:
     int i_first = -1;
     int i_second = -1;
     int c = 0;
-    for (NSUInteger x = 0; c != 2; x++)
-    {
-        if([o_tbl_dataTable isRowSelected:x])
-        {
-            if (i_first == -1)
-            {
+    for (NSUInteger x = 0; c != 2; x++) {
+        if([o_tbl_dataTable isRowSelected:x]) {
+            if (i_first == -1) {
                 i_first = x;
                 c = 1;
-            }
-            else if (i_second == -1)
-            {
+            } else if (i_second == -1) {
                 i_second = x;
                 c = 2;
             }
         }
     }
 
-    msg_Dbg( VLCIntf, "got the bookmark-indexes");
-
-    if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
-        &i_bookmarks ) != VLC_SUCCESS )
-    {
+    if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, &i_bookmarks ) != VLC_SUCCESS ) {
         vlc_object_release( p_input );
         msg_Err( VLCIntf, "already defined bookmarks couldn't be retrieved");
         return;
     }
-    msg_Dbg( VLCIntf, "calling wizard");
 
     char *psz_uri = input_item_GetURI( input_GetItem( p_input ) );
-    [[[VLCMain sharedInstance] wizard] initWithExtractValuesFrom:
-            [[NSNumber numberWithInt:
-            (pp_bookmarks[i_first]->i_time_offset/1000000)] stringValue]
-            to: [[NSNumber numberWithInt:
-            (pp_bookmarks[i_second]->i_time_offset/1000000)] stringValue]
-            ofItem: [NSString stringWithUTF8String: psz_uri]];
+    [[[VLCMain sharedInstance] wizard] initWithExtractValuesFrom: [NSString stringWithFormat:@"%lli", pp_bookmarks[i_first]->i_time_offset/1000000] to: [NSString stringWithFormat:@"%lli", pp_bookmarks[i_second]->i_time_offset/1000000] ofItem: [NSString stringWithFormat:@"%s", psz_uri]];
     free( psz_uri );
     vlc_object_release( p_input );
-    msg_Dbg( VLCIntf, "released input");
 
     // Clear the bookmark list
     for( int i = 0; i < i_bookmarks; i++)
@@ -342,7 +310,8 @@ clear:
 {
     input_thread_t * p_input = pl_CurrentInput( VLCIntf );
 
-    if( !p_input ) return;
+    if( !p_input )
+        return;
 
     input_Control( p_input, INPUT_SET_BOOKMARK, [o_tbl_dataTable selectedRow] );
 
@@ -351,10 +320,10 @@ clear:
 
 - (IBAction)remove:(id)sender
 {
-    /* remove selected item */
     input_thread_t * p_input = pl_CurrentInput( VLCIntf );
 
-    if( !p_input ) return;
+    if( !p_input )
+        return;
 
     int i_focused = [o_tbl_dataTable selectedRow];
 
@@ -386,14 +355,12 @@ clear:
     seekpoint_t **pp_bookmarks;
     int i_bookmarks;
 
-    if( !p_input ) return 0;
-    else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
-                       &i_bookmarks ) != VLC_SUCCESS )
-    {
+    if( !p_input )
+        return 0;
+    else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, &i_bookmarks ) != VLC_SUCCESS ) {
         vlc_object_release( p_input );
         return 0;
-    }
-    else {
+    } else {
         vlc_object_release( p_input );
         // Clear the bookmark list
         for( int i = 0; i < i_bookmarks; i++)
@@ -403,48 +370,29 @@ clear:
     }
 }
 
-- (id)tableView:(NSTableView *)theDataTable objectValueForTableColumn:
-    (NSTableColumn *)theTableColumn row: (NSInteger)row
+- (id)tableView:(NSTableView *)theDataTable objectValueForTableColumn: (NSTableColumn *)theTableColumn row: (NSInteger)row
 {
     /* return the corresponding data as NSString */
     input_thread_t * p_input = pl_CurrentInput( VLCIntf );
     seekpoint_t **pp_bookmarks;
     int i_bookmarks;
-    char *toBeReturned;
-    int i_toBeReturned = 0;
     id ret;
 
     if( !p_input ) return @"";
-    else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
-                       &i_bookmarks ) != VLC_SUCCESS )
-    {
+    else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, &i_bookmarks ) != VLC_SUCCESS )
         ret = @"";
-    }
-    else
-    {
+    else {
         NSString * identifier = [theTableColumn identifier];
-        if ([identifier isEqualToString: @"description"])
-        {
-            toBeReturned = pp_bookmarks[row]->psz_name;
-            ret = [NSString stringWithUTF8String: toBeReturned];
-        }
-        else if ([identifier isEqualToString: @"size_offset"])
-        {
-            i_toBeReturned = pp_bookmarks[row]->i_byte_offset;
-            ret = [[NSNumber numberWithInt: i_toBeReturned] stringValue];
-        }
-        else if ([identifier isEqualToString: @"time_offset"])
-        {
-            i_toBeReturned = pp_bookmarks[row]->i_time_offset;
-            ret = [[NSNumber numberWithInt: (i_toBeReturned / 1000000)]
-                stringValue];
-        }
-        else
-        {
-            /* may not happen, just in case */
-            msg_Err( VLCIntf, "unknown table column identifier (%s) while "
-                "updating the bookmark table", [identifier UTF8String] );
-            ret = @"unknown identifier";
+        if ([identifier isEqualToString: @"description"]) {
+            ret = [NSString stringWithFormat:@"%s", pp_bookmarks[row]->psz_name];
+        } else if ([identifier isEqualToString: @"size_offset"]) {
+            ret = [NSString stringWithFormat:@"%lli", pp_bookmarks[row]->i_byte_offset];
+        } else if ([identifier isEqualToString: @"time_offset"]) {
+            int total = pp_bookmarks[row]->i_time_offset/ 1000000;
+            int hour = total / (60*60);
+            int min = (total - hour*60*60) / 60;
+            int sec = total - hour*60*60 - min*60;
+            ret = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, min, sec];
         }
 
         // Clear the bookmark list
@@ -463,22 +411,17 @@ clear:
 - (void)tableViewSelectionDidChange:(NSNotification *)aNotification
 {
     /* check whether a row is selected and en-/disable the edit/remove buttons */
-    if ([o_tbl_dataTable selectedRow] == -1)
-    {
+    if ([o_tbl_dataTable selectedRow] == -1) {
         /* no row is selected */
         [o_btn_edit setEnabled: NO];
         [o_btn_rm setEnabled: NO];
         [o_btn_extract setEnabled: NO];
-    }
-    else
-    {
+    } else {
         /* a row is selected */
         [o_btn_edit setEnabled: YES];
         [o_btn_rm setEnabled: YES];
         if ([o_tbl_dataTable numberOfSelectedRows] == 2)
-        {
             [o_btn_extract setEnabled: YES];
-        }
     }
 }