relink funcionality added
authorMaksym Veremeyenko <verem@m1stereo.tv>
Wed, 5 Oct 2011 19:44:57 +0000 (22:44 +0300)
committerMaksym Veremeyenko <verem@m1stereo.tv>
Wed, 5 Oct 2011 19:44:57 +0000 (22:44 +0300)
src/library.c
src/omnplay.cpp
src/omnplay.h
src/ui.c
src/ui_buttons.c

index c0bcb24..148f720 100644 (file)
@@ -91,6 +91,35 @@ int omnplay_library_normalize_item(omnplay_instance_t* app, playlist_item_t* ite
     return r;
 };
 
+int omnplay_library_relink_item(omnplay_instance_t* app, playlist_item_t* item)
+{
+    int r = 0;
+    playlist_item_t* lib;
+
+    pthread_mutex_lock(&app->library.lock);
+
+    lib = omnplay_library_find(app, item->id);
+
+    item->error = 0;
+
+    if(lib)
+    {
+        r = 1;
+        strcpy(item->title, lib->title);
+        item->dur = lib->dur;
+        item->in = lib->in;
+    }
+    else
+    {
+        r = 1;
+        item->error = PLAYLIST_ITEM_ERROR_LIB;
+    };
+
+    pthread_mutex_unlock(&app->library.lock);
+
+    return r;
+};
+
 void omnplay_library_sort(omnplay_instance_t* app)
 {
     int i, j, m;
index dbdc7d3..4895e5f 100644 (file)
@@ -571,6 +571,32 @@ static void omnplay_playlist_item_del(omnplay_instance_t* app)
     free(list);
 };
 
+void omnplay_playlist_relink(omnplay_instance_t* app)
+{
+    int i, idx, c;
+    int *list;
+
+    pthread_mutex_lock(&app->playlist.lock);
+    list = omnplay_selected_idxs_playlist(app);
+    if(list)
+    {
+        for(i = 0, c = 0; i < list[0]; i++)
+        {
+            /* check for playing block */
+            if(idx_in_players_range(app, list[i + 1]))
+                continue;
+            /* relink item */
+            omnplay_library_relink_item(app, &app->playlist.item[list[i + 1]]);
+        };
+
+        free(list);
+    };
+    pthread_mutex_unlock(&app->playlist.lock);
+
+    /* redraw playlist */
+    omnplay_playlist_draw(app);
+};
+
 static int omnplay_playlist_insert_check(omnplay_instance_t* app, int idx, playlist_item_type_t* t)
 {
     *t = OMNPLAY_PLAYLIST_ITEM_BLOCK_SINGLE;
@@ -999,6 +1025,9 @@ static gboolean omnplay_button_click(omnplay_instance_t* app, control_buttons_t
         case BUTTON_LIBRARY_FIND_NEXT:
             omnplay_library_search(app, 1);
             break;
+        case BUTTON_PLAYLIST_RELINK:
+            omnplay_playlist_relink(app);
+            break;
     };
 
     return TRUE;
index fe8d077..22e2dff 100644 (file)
@@ -53,6 +53,8 @@ typedef enum control_buttons
     BUTTON_LIBRARY_FIND,
     BUTTON_LIBRARY_FIND_NEXT,
 
+    BUTTON_PLAYLIST_RELINK,
+
     BUTTON_LAST
 } control_buttons_t;
 
@@ -175,6 +177,7 @@ void omnplay_release(omnplay_instance_t* app);
 void omnplay_destroy(omnplay_instance_t* app);
 void omnplay_playlist_load(omnplay_instance_t* app);
 void omnplay_playlist_save(omnplay_instance_t* app);
+void omnplay_playlist_relink(omnplay_instance_t* app);
 void omnplay_playlist_draw(omnplay_instance_t* app);
 void omnplay_playlist_draw_item(omnplay_instance_t* app, int idx);
 void omnplay_playlist_draw_item_rem(omnplay_instance_t* app, int idx, char* rem);
@@ -189,6 +192,7 @@ int omnplay_whois_list(omnplay_instance_t* app, playlist_item_t *items, int* pli
 int omnplay_library_load_file(playlist_item_t* items, int *pcount, char* filename);
 playlist_item_t* omnplay_library_find(omnplay_instance_t* app, char* id);
 int omnplay_library_normalize_item(omnplay_instance_t* app, playlist_item_t* item);
+int omnplay_library_relink_item(omnplay_instance_t* app, playlist_item_t* item);
 playlist_item_t* omnplay_library_get_selected(omnplay_instance_t* app, int *count);
 void omnplay_playlist_normalize(omnplay_instance_t* app);
 void omnplay_library_search(omnplay_instance_t* app, int next);
index 203b8f3..ef4311f 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
@@ -439,6 +439,16 @@ static GtkWidget* pane_operate_buttons_playlist(GtkWidget* top, omnplay_instance
         ui_create_button(top, app, BUTTON_PLAYLIST_ITEM_DOWN),
             FALSE, FALSE, 0);
 
+    /* spacer */
+    gtk_box_pack_start (GTK_BOX (hbox),
+        create_label(top, "   ", NULL, GTK_JUSTIFY_CENTER),
+            FALSE, FALSE, 0);
+
+    /* playlist relink */
+    gtk_box_pack_start (GTK_BOX (hbox),
+        ui_create_button(top, app, BUTTON_PLAYLIST_RELINK),
+            FALSE, FALSE, 0);
+
     return hbox;
 }
 
index 6de8bd8..bc70e44 100644 (file)
@@ -59,6 +59,14 @@ static const button_desc_t buttons[] =
         "Axialis_Team_item_add_16x116.png"
     },
     {
+        BUTTON_PLAYLIST_RELINK,
+        "Relink items in playlist",
+        NULL,
+        NULL,
+        "button_playlist_relink",
+        "Axialis_Team_item_add_16x116.png"
+    },
+    {
         BUTTON_PLAYLIST_ITEM_EDIT,
         "Edit item in playlist (E)",
         NULL,