#include <sys/stat.h>
#include <pthread.h>
+#include "main.h"
#include "utils.h"
#include <ucx/map.h>
#include <ucx/properties.h>
+#include <ucx/buffer.h>
+#include <ucx/utils.h>
#define CONFIG_BASE_DIR ".config"
#define UWP_CONFIG_DIR "uwplayer"
char *cfgfile_path = util_concat_path(uwp_config_dir, UWP_CONFIG_FILE);
FILE *cfgfile = fopen(cfgfile_path, "r");
free(cfgfile_path);
- if(!cfgfile) return 0;
int ret = 0;
- if(ucx_properties_load(uwp_settings, cfgfile)) {
- fprintf(stderr, "Error: Cannot read uwplayer settings\n");
- ret = 1;
- }
- fclose(cfgfile);
-
- if(ret) {
- return ret;
+ if(cfgfile) {
+ if(ucx_properties_load(uwp_settings, cfgfile)) {
+ fprintf(stderr, "Error: Cannot read uwplayer settings\n");
+ ret = 1;
+ }
+ fclose(cfgfile);
+
+ if(ret) {
+ return ret;
+ }
}
+
// check if mpv or mplayer binaries are configured
char *player_bin = ucx_map_cstr_get(uwp_settings, UWP_PLAYER_BIN);
return 0;
}
+static char* get_which_output(FILE *f, UcxBuffer *buf) {
+ buf->pos = 0;
+ buf->size = 0;
+ ucx_stream_copy(f, buf, (read_func)fread, (write_func)ucx_buffer_write);
+ if(!pclose(f)) {
+ ucx_buffer_putc(buf, 0);
+ size_t i;
+ for(i=0;i<buf->pos;i++) {
+ if(buf->space[i] == '\n') {
+ buf->space[i] = 0;
+ break;
+ }
+ }
+ return buf->space;
+ }
+ return NULL;
+}
+
+static void finish_bin_search(XtPointer data, XtIntervalId *id) {
+ PlayerInfo *playerInfo = data;
+ ucx_map_cstr_put(uwp_settings, UWP_PLAYER_BIN, playerInfo->bin);
+ ucx_map_cstr_put(uwp_settings, UWP_PLAYER_TYPE, playerInfo->type);
+ free(playerInfo);
+}
+
static void* player_bin_search_thread(void *data) {
- // TODO:
- //printf("search\n");
+ UcxBuffer *buf = ucx_buffer_new(NULL, 256, UCX_BUFFER_AUTOEXTEND);
+
+ FILE *f = popen("which mpv", "r");
+ if(f) {
+ char *bin = get_which_output(f, buf);
+ if(bin) {
+ PlayerInfo *playerInfo = malloc(sizeof(PlayerInfo));
+ playerInfo->bin = strdup(bin);
+ playerInfo->type = strdup("mpv");
+ AppAddTimeOut(0, finish_bin_search, playerInfo);
+
+ ucx_buffer_free(buf);
+ return NULL;
+ }
+ }
+
+ f = popen("which mplayer", "r");
+ if(f) {
+ char *bin = get_which_output(f, buf);
+ if(bin) {
+ PlayerInfo *playerInfo = malloc(sizeof(PlayerInfo));
+ playerInfo->bin = strdup(bin);
+ playerInfo->type = strdup("mplayer");
+ AppAddTimeOut(0, finish_bin_search, playerInfo);
+ }
+ }
+ ucx_buffer_free(buf);
return NULL;
}