move omneon status threads to GThread
[melted_gui] / src / omnplay.h
index e2b0ea2..de4e942 100644 (file)
@@ -20,6 +20,8 @@
 #ifndef OMNPLAY_H
 #define OMNPLAY_H
 
+#include <pthread.h>
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -48,42 +50,49 @@ typedef enum control_buttons
     BUTTON_LIBRARY_ADD,
     BUTTON_LIBRARY_REFRESH,
 
+    BUTTON_LIBRARY_FIND,
+    BUTTON_LIBRARY_FIND_NEXT,
+
     BUTTON_LAST
 } control_buttons_t;
 
-#define OMNPLAY_PLAYLIST_BLOCK_BEGIN    (1 << 0)        // 1
-#define OMNPLAY_PLAYLIST_BLOCK_BODY     0               // 0
-#define OMNPLAY_PLAYLIST_BLOCK_END      (1 << 1)        // 2
-#define OMNPLAY_PLAYLIST_BLOCK_LOOP     (1 << 2)        // 4
+#define OMNPLAY_PLAYLIST_BLOCK_BEGIN    1
+#define OMNPLAY_PLAYLIST_BLOCK_BODY     0
+#define OMNPLAY_PLAYLIST_BLOCK_END      2
+#define OMNPLAY_PLAYLIST_BLOCK_LOOP     4
 
 typedef enum playlist_item_type
 {
+    // 1
     OMNPLAY_PLAYLIST_ITEM_BLOCK_BEGIN   =       OMNPLAY_PLAYLIST_BLOCK_BEGIN,
-
+    // 0
     OMNPLAY_PLAYLIST_ITEM_BLOCK_BODY    =       OMNPLAY_PLAYLIST_BLOCK_BODY,
-
+    // 2
     OMNPLAY_PLAYLIST_ITEM_BLOCK_END     =       OMNPLAY_PLAYLIST_BLOCK_END,
-
-    OMNPLAY_PLAYLIST_ITEM_BLOCK_SINGLE  =       OMNPLAY_PLAYLIST_BLOCK_END      | \
-                                                OMNPLAY_PLAYLIST_BLOCK_BODY     | \
+    // 3
+    OMNPLAY_PLAYLIST_ITEM_BLOCK_SINGLE  =       OMNPLAY_PLAYLIST_BLOCK_BEGIN    |
+                                                OMNPLAY_PLAYLIST_BLOCK_BODY     |
                                                 OMNPLAY_PLAYLIST_BLOCK_END,
-
-    OMNPLAY_PLAYLIST_ITEM_LOOP_BEGIN    =       OMNPLAY_PLAYLIST_BLOCK_BEGIN    | \
+    // 5
+    OMNPLAY_PLAYLIST_ITEM_LOOP_BEGIN    =       OMNPLAY_PLAYLIST_BLOCK_BEGIN    |
                                                 OMNPLAY_PLAYLIST_BLOCK_LOOP,
-
-    OMNPLAY_PLAYLIST_ITEM_LOOP_BODY     =       OMNPLAY_PLAYLIST_BLOCK_BODY     | \
+    // 4
+    OMNPLAY_PLAYLIST_ITEM_LOOP_BODY     =       OMNPLAY_PLAYLIST_BLOCK_BODY     |
                                                 OMNPLAY_PLAYLIST_BLOCK_LOOP,
-
-    OMNPLAY_PLAYLIST_ITEM_LOOP_END      =       OMNPLAY_PLAYLIST_BLOCK_END      | \
+    // 6
+    OMNPLAY_PLAYLIST_ITEM_LOOP_END      =       OMNPLAY_PLAYLIST_BLOCK_END      |
                                                 OMNPLAY_PLAYLIST_BLOCK_LOOP,
-
-    OMNPLAY_PLAYLIST_ITEM_LOOP_SINGLE   =       OMNPLAY_PLAYLIST_BLOCK_END      | \
-                                                OMNPLAY_PLAYLIST_BLOCK_BODY     | \
-                                                OMNPLAY_PLAYLIST_BLOCK_END      | \
+    // 7
+    OMNPLAY_PLAYLIST_ITEM_LOOP_SINGLE   =       OMNPLAY_PLAYLIST_BLOCK_BEGIN    |
+                                                OMNPLAY_PLAYLIST_BLOCK_BODY     |
+                                                OMNPLAY_PLAYLIST_BLOCK_END      |
                                                 OMNPLAY_PLAYLIST_BLOCK_LOOP,
 } playlist_item_type_t;
 
 #define MAX_PLAYLIST_ITEMS      1024
+#define MAX_LIBRARY_ITEMS       10240
+#define PLAYLIST_ITEM_ERROR_LIB 1
+#define PLAYLIST_ITEM_ERROR_CUE 2
 
 typedef struct playlist_item
 {
@@ -93,6 +102,9 @@ typedef struct playlist_item
     int dur;
     int player;
     playlist_item_type_t type;
+    int omn_idx;
+    int omn_offset;
+    int error;
 } playlist_item_t;
 
 #define MAX_PLAYERS 4
@@ -105,12 +117,11 @@ typedef struct omnplay_player
     char name[PATH_MAX];
     char host[PATH_MAX];
     void* handle;
-    pthread_t thread;
-    pthread_mutex_t lock;
+    GThread* thread;
     GtkWidget *label_status, *label_state, *label_tc_cur, *label_tc_rem, *label_clip;
     struct omnplay_instance *app;
     int playlist_start;
-    int playlist_count;
+    int playlist_length;
 } omnplay_player_t;
 
 typedef struct omnplay_instance
@@ -124,6 +135,7 @@ typedef struct omnplay_instance
         omnplay_player_t item[MAX_PLAYERS];
         int count;
         char path[PATH_MAX];
+        pthread_mutex_t lock;
     } players;
     int f_exit;
     struct
@@ -132,13 +144,50 @@ typedef struct omnplay_instance
         int count;
         int ver_curr;
         int ver_prev;
+        pthread_mutex_t lock;
+        char* path;
+        GdkPixbuf *block_icons[8];
     } playlist;
+    struct
+    {
+        playlist_item_t item[MAX_LIBRARY_ITEMS];
+        int count;
+        char filename[PATH_MAX];
+        char whois[PATH_MAX];
+        pthread_mutex_t lock;
+        GThread* refresh_thread;
+        GtkWidget *search;
+    } library;
+    struct
+    {
+        playlist_item_t item[MAX_LIBRARY_ITEMS];
+        int count;
+    } clipboard;
 } omnplay_instance_t;
 
 omnplay_instance_t* omnplay_create(int argc, char** argv);
 void omnplay_init(omnplay_instance_t* app);
 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_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);
+void omnplay_library_load(omnplay_instance_t* app);
+void omnplay_library_save(omnplay_instance_t* app);
+void omnplay_library_refresh(omnplay_instance_t* app);
+void omnplay_library_draw(omnplay_instance_t* app);
+typedef void (*omnplay_get_content_cb_proc)(omnplay_instance_t* app, playlist_item_t *items, void* data);
+int omnplay_get_content(omnplay_instance_t* app, playlist_item_t *items, int limit,
+    omnplay_get_content_cb_proc proc, void* data);
+int omnplay_whois_list(omnplay_instance_t* app, playlist_item_t *items, int* plimit);
+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);
+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);
 
 #ifdef __cplusplus
 };