From 8a535461da984c7a3f80445a41a092d6f37b5b4b Mon Sep 17 00:00:00 2001 From: Maksym Veremeyenko Date: Wed, 5 Oct 2011 22:44:57 +0300 Subject: [PATCH] relink funcionality added --- src/library.c | 29 +++++++++++++++++++++++++++++ src/omnplay.cpp | 29 +++++++++++++++++++++++++++++ src/omnplay.h | 4 ++++ src/ui.c | 10 ++++++++++ src/ui_buttons.c | 8 ++++++++ 5 files changed, 80 insertions(+), 0 deletions(-) diff --git a/src/library.c b/src/library.c index c0bcb24..148f720 100644 --- a/src/library.c +++ b/src/library.c @@ -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; diff --git a/src/omnplay.cpp b/src/omnplay.cpp index dbdc7d3..4895e5f 100644 --- a/src/omnplay.cpp +++ b/src/omnplay.cpp @@ -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; diff --git a/src/omnplay.h b/src/omnplay.h index fe8d077..22e2dff 100644 --- a/src/omnplay.h +++ b/src/omnplay.h @@ -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); diff --git a/src/ui.c b/src/ui.c index 203b8f3..ef4311f 100644 --- 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; } diff --git a/src/ui_buttons.c b/src/ui_buttons.c index 6de8bd8..bc70e44 100644 --- a/src/ui_buttons.c +++ b/src/ui_buttons.c @@ -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, -- 1.7.4.4