2 * playlist.c -- GTK+ 2 omnplay
3 * Copyright (C) 2011 Maksym Veremeyenko <verem@m1stereo.tv>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software Foundation,
17 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 #include <gdk/gdkkeysyms.h>
35 void omnplay_library_load(omnplay_instance_t
* app
)
42 /* allocate space for strings and items */
45 pthread_mutex_lock(&app
->library
.lock
);
47 app
->library
.count
= 0;
49 /* open and process file */
50 if(app
->library
.filename
[0] && (f
= fopen(app
->library
.filename
, "rt")))
54 char *s
, *sp_r
, *sp_b
;
57 memset(l
, 0, PATH_MAX
);
58 fgets(l
, PATH_MAX
, f
);
61 if( (s
= strchr(l
, '\n')) ) *s
= 0;
62 if( (s
= strchr(l
, '\r')) ) *s
= 0;
64 /* check for empty line */
65 if(l
[0] && l
[0] != '#')
67 memset(&item
, 0, sizeof(playlist_item_t
));
69 for(i
= 0, sp_b
= l
; (NULL
!= (sp_r
= strtok(sp_b
, "\t"))); i
++, sp_b
= NULL
)
73 case 0: strncpy(item
.id
, sp_r
, PATH_MAX
); break;
74 case 1: tc2frames(sp_r
, 25.0, &item
.in
); break;
75 case 2: tc2frames(sp_r
, 25.0, &item
.dur
); break;
76 case 3: strncpy(item
.title
, sp_r
, PATH_MAX
); break;
81 app
->library
.item
[app
->library
.count
++] = item
;
88 pthread_mutex_unlock(&app
->library
.lock
);
93 omnplay_library_draw(app
);
96 void omnplay_library_save(omnplay_instance_t
* app
)
101 pthread_mutex_lock(&app
->library
.lock
);
103 if(app
->library
.filename
[0] && (f
= fopen(app
->library
.filename
, "wt")))
105 char tc_in
[32], tc_dur
[32];
107 for(i
= 0; i
< app
->library
.count
; i
++)
108 fprintf(f
, "%s\t%s\t%s\t%s\n",
109 app
->library
.item
[i
].id
,
110 frames2tc(app
->library
.item
[i
].in
, 25.0, tc_in
),
111 frames2tc(app
->library
.item
[i
].dur
, 25.0, tc_dur
),
112 app
->library
.item
[i
].title
);
117 pthread_mutex_unlock(&app
->library
.lock
);
120 void omnplay_library_refresh(omnplay_instance_t
* app
)
124 void omnplay_library_draw(omnplay_instance_t
* app
)
128 GtkListStore
*list_store
;
131 list_store
= GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(app
->library_grid
)));
132 gtk_list_store_clear(list_store
);
134 pthread_mutex_lock(&app
->library
.lock
);
136 for(i
= 0;i
< app
->library
.count
; i
++)
138 gtk_list_store_append(list_store
, &iter
);
140 gtk_list_store_set(list_store
, &iter
,
141 0, app
->library
.item
[i
].id
,
142 1, frames2tc(app
->playlist
.item
[i
].dur
, 25.0, tc
),
143 2, app
->library
.item
[i
].title
,
148 pthread_mutex_unlock(&app
->library
.lock
);