X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fomnplay.cpp;h=d460135026002b7e79464d43bc23850862100f06;hb=0eacb2babbab14c5318e883963073b32079a9aff;hp=bd5b46d308414d8e2d85693b9fcc0deb2d47a9aa;hpb=af72d979bc8b5168b4cf8fc5df1b987d8587e837;p=melted_gui diff --git a/src/omnplay.cpp b/src/omnplay.cpp index bd5b46d..d460135 100644 --- a/src/omnplay.cpp +++ b/src/omnplay.cpp @@ -39,10 +39,64 @@ #include "omplrclnt.h" +int omnplay_get_content(omnplay_instance_t* app, playlist_item_t *items, int limit, + omnplay_get_content_cb_proc proc, void* data) +{ + int r, c = 0; + OmPlrClipInfo clip_info; + char clip_name[omPlrMaxClipDirLen]; + + pthread_mutex_lock(&app->players.lock); + + r = OmPlrClipGetFirst((OmPlrHandle)app->players.item[0].handle, clip_name, sizeof(clip_name)); + for(; c < limit && !r;) + { + /* get clip info */ + clip_info.maxMsTracks = 0; + clip_info.size = sizeof(clip_info); + + r = OmPlrClipGetInfo((OmPlrHandle)app->players.item[0].handle, clip_name, &clip_info); + + if(!r) + { + /* copy item props */ + strncpy(items[c].id, clip_name, PATH_MAX); + items[c].in = clip_info.firstFrame; + items[c].dur = clip_info.lastFrame - clip_info.firstFrame; + + /* callback */ + pthread_mutex_unlock(&app->players.lock); + if(proc) + proc(app, &items[c], data); + pthread_mutex_lock(&app->players.lock); + + c++; + }; + + r = OmPlrClipGetNext((OmPlrHandle)app->players.item[0].handle, clip_name, sizeof(clip_name)); + }; + + pthread_mutex_unlock(&app->players.lock); + + return c; +}; + + static gboolean on_main_window_delete_event( GtkWidget *widget, GdkEvent *event, gpointer user_data ) { - gtk_exit(0); - return TRUE; + g_print ("delete event occurred [start]\n"); + gdk_threads_leave(); + omnplay_release((omnplay_instance_t*)user_data); + gdk_threads_enter(); + g_print ("delete event occurred [finish]\n"); + + return FALSE; +} + +static void on_main_window_destroy( GtkWidget *widget, gpointer user_data ) +{ + g_print ("destroy occurred\n"); + gtk_main_quit(); } omnplay_instance_t* omnplay_create(int argc, char** argv) @@ -428,7 +482,7 @@ static void omnplay_playlist_delete_items(omnplay_instance_t* app, int* idxs, in idx = idxs[j] - j; /* fix block types */ - if(!idx) + if(idx) app->playlist.item[idx - 1].type = (playlist_item_type_t)(app->playlist.item[idx - 1].type | OMNPLAY_PLAYLIST_BLOCK_END); if(idx + 1 < app->playlist.count) @@ -814,7 +868,7 @@ static void omnplay_playlist_item_swap(omnplay_instance_t* app, int dir) omnplay_playlist_draw_item(app, b); /* fix block types */ - if(!a) + if(a) { app->playlist.item[a - 1].type = (playlist_item_type_t)(app->playlist.item[a - 1].type | OMNPLAY_PLAYLIST_BLOCK_END); @@ -873,7 +927,9 @@ static gboolean omnplay_button_click(omnplay_instance_t* app, control_buttons_t omnplay_ctl(app, button); break; case BUTTON_LIBRARY_ADD: + break; case BUTTON_LIBRARY_REFRESH: + omnplay_library_refresh(app); break; }; @@ -949,9 +1005,12 @@ void omnplay_init(omnplay_instance_t* app) pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - gtk_signal_connect( GTK_OBJECT( app->window ), "destroy", + gtk_signal_connect( GTK_OBJECT( app->window ), "delete-event", GTK_SIGNAL_FUNC(on_main_window_delete_event), app); + gtk_signal_connect( GTK_OBJECT( app->window ), "destroy", + GTK_SIGNAL_FUNC(on_main_window_destroy), app); + gtk_widget_add_events(app->playlist_grid, GDK_BUTTON_PRESS_MASK); gtk_signal_connect(GTK_OBJECT(app->playlist_grid), "key-press-event", GTK_SIGNAL_FUNC(on_playlist_grid_key), app); @@ -972,6 +1031,11 @@ void omnplay_init(omnplay_instance_t* app) gtk_signal_connect(GTK_OBJECT(app->buttons[i]), "clicked", GTK_SIGNAL_FUNC( on_button_click), app ); + /* create lock */ + pthread_mutex_init(&app->library.lock, &attr); + + /* load library */ + omnplay_library_load(app); }; void omnplay_release(omnplay_instance_t* app) @@ -990,4 +1054,10 @@ void omnplay_release(omnplay_instance_t* app) /* destroy lock */ pthread_mutex_destroy(&app->playlist.lock); + + /* load library */ + omnplay_library_save(app); + + /* destroy library lock */ + pthread_mutex_destroy(&app->library.lock); };