示例#1
0
static void
notifications_update(void *opaque, prop_event_t event, ...)
{
  statusbar_t *sb = opaque;
  prop_t *p, *txt;
  statusbar_entry_t *sbe;
  char *buf;
  rstr_t *msg;
  int i, l;
  va_list ap;
  va_start(ap, event);

  switch(event) {
  case PROP_ADD_CHILD:
    p = va_arg(ap, prop_t *);

    txt = prop_get_by_name(PNVEC("self", "text"), 1,
			   PROP_TAG_NAMED_ROOT, p, "self",
			   NULL);
    if(txt != NULL) {
      msg = prop_get_string(txt);

      if(msg != NULL) {
	buf = mystrdupa(rstr_get(msg));
	l = strlen(buf);
	for(i = 0; i < l; i++)
	  if(buf[i] < ' ')
	    buf[i] = ' ';

	sbe = calloc(1, sizeof(statusbar_entry_t));
	sbe->p = prop_ref_inc(p);
	sbe->id = gtk_statusbar_push(GTK_STATUSBAR(sb->bar), sb->ctxid, buf);
	LIST_INSERT_HEAD(&sb->entries, sbe, link);
	rstr_release(msg);
      }
      prop_ref_dec(txt);
    }
    break;

  case PROP_DEL_CHILD:
    p = va_arg(ap, prop_t *);

    LIST_FOREACH(sbe, &sb->entries, link)
      if(sbe->p == p)
	break;

    if(sbe == NULL)
      break;

    prop_ref_dec(sbe->p);
    gtk_statusbar_remove(GTK_STATUSBAR(sb->bar), sb->ctxid, sbe->id);
    LIST_REMOVE(sbe, link);
    free(sbe);
    break;

  default:
    break;
  }
}
示例#2
0
static void
bmdb_destroy(bmdb_t *b)
{
    prop_ref_dec(b->b_nodes);
    prop_ref_dec(b->b_metadata);
    free(b->b_query);
    free(b);
}
示例#3
0
文件: event.c 项目: kshostak/showtime
static void
event_openurl_dtor(event_t *e)
{
  event_openurl_t *ou = (void *)e;
  prop_ref_dec(ou->origin);
  prop_ref_dec(ou->model);
  free(ou->url);
  free(ou->view);
  free(ou->how);
}
示例#4
0
文件: event.c 项目: supersn0b/movian
static void
event_openurl_dtor(event_t *e)
{
  event_openurl_t *ou = (void *)e;
  prop_ref_dec(ou->item_model);
  prop_ref_dec(ou->parent_model);
  free(ou->url);
  free(ou->view);
  free(ou->how);
  free(ou->parent_url);
}
示例#5
0
文件: settings.c 项目: Rautz/showtime
void
setting_destroy(setting_t *s)
{
  s->s_callback = NULL;
  free(s->s_id);
  free(s->s_initial_value);
  free(s->s_first);
  prop_unsubscribe(s->s_sub);
  prop_destroy(s->s_root);
  prop_ref_dec(s->s_val);
  prop_ref_dec(s->s_root);
  free(s);
}
示例#6
0
文件: event.c 项目: supersn0b/movian
static void
event_prop_action_dtor(event_t *e)
{
  event_prop_action_t *epa = (event_prop_action_t *)e;
  prop_ref_dec(epa->p);
  rstr_release(epa->action);
}
示例#7
0
static JSBool 
js_item_addOptAction(JSContext *cx, JSObject *obj,
		     uintN argc, jsval *argv, jsval *rval)
{
  js_item_t *ji = JS_GetPrivate(cx, obj);
  const char *title;
  const char *action;

  if (!JS_ConvertArguments(cx, argc, argv, "ss", &title, &action))
    return JS_FALSE;
  
  prop_t *p = prop_create_root(NULL);
  prop_set_string(prop_create(p, "type"), "action");
  prop_set_string(prop_create(prop_create(p, "metadata"), "title"), title);
  prop_set_int(prop_create(p, "enabled"), 1);
  prop_set_string(prop_create(p, "action"), action);

  prop_t *opts = prop_create_r(ji->ji_root, "options");
  if(prop_set_parent(p, opts))
    prop_destroy(p);
  prop_ref_dec(opts);

  *rval = JSVAL_VOID;
  return JS_TRUE;
}
示例#8
0
文件: glw.c 项目: dev-life/showtime
static int
top_event_handler(glw_t *w, void *opaque, glw_signal_t sig, void *extra)
{
  event_t *e = extra;
  glw_root_t *gr = opaque;

  if(sig != GLW_SIGNAL_EVENT_BUBBLE)
    return 0;

  if(e->e_type_x == EVENT_KEYDESC)
    return 0;

  if(event_is_action(e, ACTION_ENABLE_SCREENSAVER)) {
    gr->gr_screensaver_force_enable = 1;

  } else if(event_is_action(e, ACTION_NAV_BACK) ||
	    event_is_action(e, ACTION_NAV_FWD) ||
	    event_is_action(e, ACTION_HOME) ||
	    event_is_action(e, ACTION_PLAYQUEUE) ||
	    event_is_action(e, ACTION_RELOAD_DATA) ||
	    event_is_type(e, EVENT_OPENURL)) {

    prop_t *p = prop_get_by_name(PNVEC("nav", "eventsink"), 0,
                                 PROP_TAG_ROOT, gr->gr_prop_nav,
                                 NULL);
    prop_send_ext_event(p, e);
    prop_ref_dec(p);
  } else {
    event_addref(e);
    event_dispatch(e);
  }

  return 1;
}
示例#9
0
static int
hc_prop(http_connection_t *hc, const char *remain, void *opaque,
        http_cmd_t method)
{
    htsbuf_queue_t out;
    rstr_t *r;
    int rval, i;
    prop_t *p;
    const char *action = http_arg_get_req(hc, "action");

    if(remain == NULL)
        return 404;

    p = prop_from_path(remain);

    if(p == NULL)
        return 404;

    htsbuf_queue_init(&out, 0);

    switch(method) {
    case HTTP_CMD_GET:

        if(action != NULL) {
            event_t *e = event_create_action_str(action);
            prop_send_ext_event(p, e);
            event_release(e);
            rval = HTTP_STATUS_OK;
            break;
        }

        r = prop_get_string(p, NULL);

        if(r == NULL) {

            char **childs = prop_get_name_of_childs(p);
            if(childs == NULL) {
                rval = HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE;
                break;
            }
            for(i = 0; childs[i] != NULL; i++) {
                htsbuf_qprintf(&out, "\t%s\n", childs[i]);
            }
        } else {
            htsbuf_append(&out, rstr_get(r), strlen(rstr_get(r)));
            htsbuf_append(&out, "\n", 1);
            rstr_release(r);
        }
        rval = http_send_reply(hc, 0, "text/ascii", NULL, NULL, 0, &out);
        break;

    default:
        rval = HTTP_STATUS_METHOD_NOT_ALLOWED;
        break;
    }

    prop_ref_dec(p);

    return rval;
}
示例#10
0
文件: gu_video.c 项目: Allba/showtime
static void
video_destroy(GtkWidget *w, gu_video_t *gv)
{
  prop_unsubscribe(gv->gv_status_sub);
  prop_ref_dec(gv->gv_closeprop);
  free(gv);
}
示例#11
0
static void
news_sink(void *opaque, prop_event_t event, ...)
{
  prop_t *p = opaque;
  event_t *e;
  va_list ap;

  va_start(ap, event);

  switch(event) {
  case PROP_DESTROYED:
    prop_unsubscribe(va_arg(ap, prop_sub_t *));
    prop_ref_dec(p);
    break;

  case PROP_EXT_EVENT:
    e = va_arg(ap, event_t *);
    if(event_is_type(e, EVENT_DYNAMIC_ACTION)) {
      const event_payload_t *ep = (const event_payload_t *)e;
      if(!strcmp(ep->payload, "dismiss")) {
	rstr_t *id = prop_get_string(p, "id", NULL);
	dismis_news(rstr_get(id));
	rstr_release(id);
	prop_destroy(opaque);
      }
    }
    break;

  default:
    break;
  }
  va_end(ap);
}
示例#12
0
static void
prop_callback(void *opaque, prop_event_t event, ...)
{
  glw_text_bitmap_t *gtb = opaque;
  const char *caption;
  prop_str_type_t type = 0;
  va_list ap;
  va_start(ap, event);

  switch(event) {
  case PROP_SET_VOID:
    caption = NULL;
    break;

  case PROP_SET_RSTRING:
    caption = rstr_get(va_arg(ap, const rstr_t *));
    type = va_arg(ap, prop_str_type_t);
    break;

  case PROP_VALUE_PROP:
    prop_ref_dec(gtb->gtb_p);
    gtb->gtb_p = prop_ref_inc(va_arg(ap, prop_t *));
    return;

  default:
    return;
  }


  caption_set_internal(gtb, caption, type);
}
示例#13
0
static void
prop_callback(void *opaque, prop_event_t event, ...)
{
  glw_keyintercept_t *ki = opaque;
  const char *str;
  prop_t *p;
  int c;
  va_list ap;
  va_start(ap, event);

  switch(event) {
  case PROP_SET_VOID:
    ki->buflen = 0;
    str = NULL;
    p = va_arg(ap, prop_t *);
    break;

  case PROP_SET_RSTRING:
    str = rstr_get(va_arg(ap, const rstr_t *));

    ki->buflen = 0;
    while((c = utf8_get(&str)) != 0 && ki->buflen < 64)
      ki->buf[ki->buflen++] = c;
    p = va_arg(ap, prop_t *);
    break;

  default:
    return;
  }

  prop_ref_dec(ki->prop);
  ki->prop = prop_ref_inc(p);
}
示例#14
0
static void
event_prop_dtor(event_t *e)
{
  event_prop_t *ep = (event_prop_t *)e;
  prop_ref_dec(ep->p);
  free(e);
}
示例#15
0
static void
jni_property_unexport_from_sub(jni_subscription_t *js, jni_prop_t *jp)
{
  prop_ref_dec(jp->jp_prop);
  LIST_REMOVE(jp, jp_sub_link);
  RB_REMOVE(&jni_props, jp, jp_link);
  free(jp);
}
示例#16
0
static void
popup_destroy(popup_t *pop)
{
  gtk_widget_destroy(pop->win);
  prop_ref_dec(pop->p);
  LIST_REMOVE(pop, link);
  free(pop);
}
示例#17
0
static void
notify_timeout(callout_t *c, void *aux)
{
  prop_t *p = aux;
  prop_destroy(p);
  prop_ref_dec(p);
  free(c);
}
示例#18
0
文件: playinfo.c 项目: Overx/showtime
static void
mip_release(metadb_item_prop_t *mip)
{
  mip->mip_refcount--;
  if(mip->mip_refcount > 0)
    return;

  LIST_REMOVE(mip, mip_link);

  prop_unsubscribe(mip->mip_destroy_sub);
  prop_unsubscribe(mip->mip_playcount_sub);
  prop_ref_dec(mip->mip_playcount);
  prop_ref_dec(mip->mip_lastplayed);
  prop_ref_dec(mip->mip_restartpos);
  free(mip->mip_url);
  free(mip);

}
示例#19
0
void
setting_destroy(setting_t *s)
{
  free(s->s_id);
  prop_unsubscribe(s->s_sub);
  prop_destroy(s->s_root);
  prop_ref_dec(s->s_val);
  free(s);
}
示例#20
0
文件: js_page.c 项目: Allba/showtime
static void
item_finalize(JSContext *cx, JSObject *obj)
{
  js_item_t *ji = JS_GetPrivate(cx, obj);
  assert(LIST_FIRST(&ji->ji_event_handlers) == NULL);
  TAILQ_REMOVE(&ji->ji_model->jm_items, ji, ji_link);
  prop_ref_dec(ji->ji_root);
  free(ji);
}
示例#21
0
文件: event.c 项目: kshostak/showtime
void
event_release(event_t *e)
{
  if(atomic_add(&e->e_refcount, -1) == 1) {
    if(e->e_dtor != NULL)
      e->e_dtor(e);
    prop_ref_dec(e->e_nav);
    free(e);
  }
}
示例#22
0
static void
event_openurl_dtor(event_t *e)
{
  event_openurl_t *ou = (void *)e;
  if(ou->origin != NULL)
    prop_ref_dec(ou->origin);
  free(ou->url);
  free(ou->view);
  free(ou);
}
示例#23
0
static void
gtb_unbind(glw_text_bitmap_t *gtb)
{
  prop_unsubscribe(gtb->gtb_sub);

  if(gtb->gtb_p != NULL) {
    prop_ref_dec(gtb->gtb_p);
    gtb->gtb_p = NULL;
  }
}
示例#24
0
static void
gu_playqueue_send_event(gu_tab_t *gt, struct event *e)
{
  prop_t *p = prop_get_by_name(PNVEC("global", "playqueue", "eventsink"), 1,
			       NULL);

  prop_send_ext_event(p, e);
  prop_ref_dec(p);
  event_release(e);
}
示例#25
0
文件: event.c 项目: supersn0b/movian
void
event_release(event_t *e)
{
  if(atomic_dec(&e->e_refcount))
    return;
  if(e->e_dtor != NULL)
    e->e_dtor(e);
  prop_ref_dec(e->e_nav);
  free(e);
}
示例#26
0
文件: event.c 项目: Bibamaru/showtime
static void
event_playurl_dtor(event_t *e)
{
  event_playurl_t *ep = (event_playurl_t *)e;
  prop_destroy(ep->model);
  free(ep->url);
  free(ep->how);
  free(ep->parent_url);
  prop_ref_dec(ep->origin);
}
示例#27
0
int
message_popup(const char *message, int flags, const char **extra)
{
  prop_t *p;
  int rval;

  p = prop_ref_inc(prop_create_root(NULL));

  TRACE(TRACE_DEBUG, "Notification", "%s", message);

  prop_set_string(prop_create(p, "type"), "message");
  prop_set_string_ex(prop_create(p, "message"), NULL, message,
		     flags & MESSAGE_POPUP_RICH_TEXT ?
		     PROP_STR_RICH : PROP_STR_UTF8);

  if(extra) {
    int cnt = 1;
    prop_t *btns = prop_create(p, "buttons");
    while(*extra) {
      prop_t *b = prop_create_root(NULL);
      prop_set_string(prop_create(b, "title"), *extra);
      char action[10];
      snprintf(action, sizeof(action), "btn%d", cnt);
      prop_set_string(prop_create(b, "action"), action);
      if(prop_set_parent(b, btns))
	abort();
      cnt++;
      extra++;
    }
  }

  if(flags & MESSAGE_POPUP_CANCEL)
    prop_set_int(prop_create(p, "cancel"), 1);
  if(flags & MESSAGE_POPUP_OK)
    prop_set_int(prop_create(p, "ok"), 1);

  event_t *e = popup_display(p);
  prop_destroy(p);
  prop_ref_dec(p);

  const event_payload_t *ep = (const event_payload_t *)e;

  if(event_is_action(e, ACTION_OK))
    rval = MESSAGE_POPUP_OK;
  else if(event_is_action(e, ACTION_CANCEL))
    rval = MESSAGE_POPUP_CANCEL;
  else if(event_is_type(e, EVENT_DYNAMIC_ACTION) &&
	  !strncmp(ep->payload, "btn", 3))
    rval = atoi(ep->payload + 3);
  else
    rval = 0;

  event_release(e);
  return rval;
}
示例#28
0
static JSBool 
js_appendItem0(JSContext *cx, js_model_t *model, prop_t *parent,
	       const char *url, const char *type, JSObject *metaobj,
	       jsval *data, jsval *rval, int enabled,
	       const char *metabind)
{
  prop_t *item = prop_create_root(NULL);

  if(url != NULL)
    prop_set_string(prop_create(item, "url"), url);

  if(data != NULL)
    js_prop_set_from_jsval(cx, prop_create(item, "data"), *data);

  *rval = JSVAL_VOID;

  if(metabind != NULL)
    metadb_bind_url_to_prop(NULL, metabind, item);

  if(type != NULL) {
    prop_set_string(prop_create(item, "type"), type);

    if(metaobj)
      js_prop_from_object(cx, metaobj, prop_create(item, "metadata"));

  } else if(url != NULL) {

    if(backend_resolve_item(url, item)) {
      prop_destroy(item);
      return JS_TRUE;
    }
  }

  prop_set_int(prop_create(item, "enabled"), enabled);

  prop_t *p = prop_ref_inc(item);

  if(prop_set_parent(item, parent)) {
    prop_destroy(item);
    prop_ref_dec(p);
  } else {
    JSObject *robj =
      JS_NewObjectWithGivenProto(cx, &item_class,
				 JSVAL_TO_OBJECT(model->jm_item_proto), NULL);

    *rval =  OBJECT_TO_JSVAL(robj);
    js_item_t *ji = calloc(1, sizeof(js_item_t));
    ji->ji_model = model;
    ji->ji_root =  p;
    LIST_INSERT_HEAD(&model->jm_items, ji, ji_link);
    JS_SetPrivate(cx, robj, ji);
    ji->ji_enable_set_property = 1; 
  }
  return JS_TRUE;
}
示例#29
0
static void
artist_query(bmdb_t *b, void *db)
{
    sqlite3_stmt *stmt;
    int rc;
    int artist_id = atoi(b->b_query);

    rc = db_prepare(db, &stmt,
                    "SELECT title "
                    "FROM artist "
                    "WHERE ds_id = 1 "
                    "AND id = ?1");

    if(rc != SQLITE_OK)
        return;

    sqlite3_bind_int(stmt, 1, artist_id);

    if(db_step(stmt) == SQLITE_ROW) {
        rstr_t *artist = db_rstr(stmt, 0);
        prop_set(b->b_metadata, "title",       PROP_SET_RSTRING, artist);

        prop_t *p = prop_create_r(b->b_metadata, "artist_images");
        metadata_bind_artistpics(p, artist);
        prop_ref_dec(p);

        rstr_release(artist);
    }

    sqlite3_finalize(stmt);

    rc = db_prepare(db, &stmt,
                    "SELECT id,title "
                    "FROM album "
                    "WHERE ds_id = 1 "
                    "AND artist_id = ?1");

    if(rc != SQLITE_OK)
        return;

    sqlite3_bind_int(stmt, 1, artist_id);

    rstr_t *ct = rstr_alloc("album");

    while((rc = db_step(stmt)) == SQLITE_ROW) {
        char url[PATH_MAX];
        snprintf(url, sizeof(url), "library:album:%d",
                 sqlite3_column_int(stmt, 0));

        add_item(b, url, NULL, ct,
                 (const char *)sqlite3_column_text(stmt, 1), 0, NULL, 0);
    }
    rstr_release(ct);
    sqlite3_finalize(stmt);
}
示例#30
0
static void
add_item(bmdb_t *b, const char *url, const char *parent, rstr_t *contenttype,
         const char *title, int track, const char *artist, int duration)
{
    prop_t *c = prop_create_r(b->b_nodes, url);

    prop_unmark(c);

    prop_set(c, "type", PROP_SET_RSTRING, contenttype);
    prop_set(c, "url", PROP_SET_STRING, url);

    prop_t *metadata = prop_create_r(c, "metadata");

    if(track)
        prop_set(metadata, "track", PROP_SET_INT, track);

    if(artist)
        prop_set(metadata, "artist", PROP_SET_STRING, artist);

    if(duration > 0)
        prop_set(metadata, "duration", PROP_SET_INT, duration / 1000);

    if(title == NULL) {
        char fname[512];
        fa_url_get_last_component(fname, sizeof(fname), url);

        rstr_t *ft = metadata_remove_postfix(fname);
        prop_set(metadata, "title", PROP_SET_RSTRING, ft);
        rstr_release(ft);
    } else {
        prop_set(metadata, "title", PROP_SET_STRING, title);
    }


#if 0
    prop_t *options = prop_create(bi->bi_prop, "options");
    metadata_bind_video_info(metadata, bi->bi_url, title, NULL, 0, options,
                             bi->bi_prop, NULL, 0, 1);
#endif
    prop_ref_dec(metadata);
    prop_ref_dec(c);
}