コード例 #1
0
static int
library_open(prop_t *page, const char *url, int sync)
{
    const char *q;
    bmdb_t *b;
    prop_t *model = prop_create(page, "model");

    url += strlen("library:");

    if((q = mystrbegins(url, "albums:")) != NULL) {
        b = bmdb_query_create(q, LIBRARY_QUERY_ALBUMS, model);
    } else if((q = mystrbegins(url, "album:")) != NULL) {
        b = bmdb_query_create(q, LIBRARY_QUERY_ALBUM, model);
        prop_set(model, "contents", PROP_SET_STRING, "album");
    } else if((q = mystrbegins(url, "artists:")) != NULL) {
        b = bmdb_query_create(q, LIBRARY_QUERY_ARTISTS, model);
    } else if((q = mystrbegins(url, "artist:")) != NULL) {
        b = bmdb_query_create(q, LIBRARY_QUERY_ARTIST, model);
        prop_set(model, "contents", PROP_SET_STRING, "artist");
    } else {
        nav_open_error(page, "Invalid browse URL");
        return 0;
    }

    hts_thread_create_detached("bmdbquery", bmdb_thread, b, THREAD_PRIO_LOW);
    return 0;
}
コード例 #2
0
ファイル: fa_backend.c プロジェクト: Hr-/showtime
static int
be_file_open(prop_t *page, const char *url)
{
  struct fa_stat fs;
  char errbuf[200];

  if(fa_stat(url, &fs, errbuf, sizeof(errbuf)))
    return nav_open_error(page, errbuf);

  return fs.fs_type == CONTENT_DIR ? 
    file_open_dir(page, url) : file_open_file(page, url, &fs);
}
コード例 #3
0
ファイル: navigator.c プロジェクト: CrashSerious/showtime
int
nav_open_errorf(prop_t *root, rstr_t *fmt, ...)
{
  va_list ap;
  char buf[200];

  va_start(ap, fmt);
  vsnprintf(buf, sizeof(buf), rstr_get(fmt), ap);
  va_end(ap);
  rstr_release(fmt);
  return nav_open_error(root, buf);
}
コード例 #4
0
ファイル: fa_backend.c プロジェクト: tydaikho/showtime
static int
be_file_open(prop_t *page, const char *url, int sync)
{
  struct fa_stat fs;
  char errbuf[200];

  if(fa_stat(url, &fs, errbuf, sizeof(errbuf))) {
    nav_open_error(page, errbuf);
  } else if(fs.fs_type == CONTENT_DIR) {
    file_open_dir(page, url, fs.fs_mtime);
  } else {
    file_open_file(page, url, &fs);
  }
  return 0;
}
コード例 #5
0
ファイル: fa_backend.c プロジェクト: Hr-/showtime
static int
file_open_file(prop_t *page, const char *url, struct fa_stat *fs)
{
  char redir[URL_MAX];
  char errbuf[200];
  int c;
  prop_t *meta;

  meta = prop_create_root("metadata");

  c = fa_probe(meta, url, redir, sizeof(redir), errbuf, sizeof(errbuf), fs, 1);

  switch(c) {
  case CONTENT_ARCHIVE:
  case CONTENT_ALBUM:
    prop_destroy(meta);
    return file_open_dir(page, redir);

  case CONTENT_AUDIO:
    if(!file_open_audio(page, url)) {
      prop_destroy(meta);
      return 0;
    }

    playqueue_play(url, meta, 0);
    return playqueue_open(page);

  case CONTENT_VIDEO:
  case CONTENT_DVD:
    prop_destroy(meta);
    return backend_open_video(page, url);

  case CONTENT_IMAGE:
    return file_open_image(page, meta);

  case CONTENT_PLUGIN:
    plugin_open_file(page, url);
    return 0;

  default:
    prop_destroy(meta);
    return nav_open_error(page, errbuf);
  }
}
コード例 #6
0
ファイル: es_route.c プロジェクト: Overx/showtime
int
ecmascript_openuri(prop_t *page, const char *url, int sync)
{
  hts_regmatch_t matches[8];

  hts_mutex_lock(&route_mutex);

  es_route_t *er;

  LIST_FOREACH(er, &routes, er_link)
    if(!hts_regexec(&er->er_regex, url, 8, matches, 0))
      break;

  if(er == NULL) {
    hts_mutex_unlock(&route_mutex);
    return 1;
  }

  es_resource_retain(&er->super);

  es_context_t *ec = er->super.er_ctx;

  hts_mutex_unlock(&route_mutex);

  es_context_begin(ec);


  duk_context *ctx = ec->ec_duk;


  es_push_root(ctx, er);

  es_stprop_push(ctx, page);

  duk_push_boolean(ctx, sync);

  int array_idx = duk_push_array(ctx);

  for(int i = 1; i < 8; i++) {
    if(matches[i].rm_so == -1)
      break;

    duk_push_lstring(ctx,
                     url + matches[i].rm_so,
                     matches[i].rm_eo - matches[i].rm_so);
    duk_put_prop_index(ctx, array_idx, i-1);
  }

  int rc = duk_pcall(ctx, 3);
  if(rc) {
    if(duk_is_string(ctx, -1)) {
      nav_open_error(page, duk_to_string(ctx, -1));
    } else {
      duk_get_prop_string(ctx, -1, "message");
      nav_open_error(page, duk_to_string(ctx, -1));
      duk_pop(ctx);
    }
    es_dump_err(ctx);
  }
  duk_pop(ctx);

  es_context_end(ec);
  es_resource_release(&er->super);

  return 0;
}