Exemple #1
0
static void
bookmark_add(const char *title, const char *url, const char *type)
{
  bookmark_t *bm = calloc(1, sizeof(bookmark_t));
  prop_t *p = prop_create_root(NULL);
  prop_t *src = prop_create(p, "model");
 
  prop_set_string(prop_create(src, "type"), "bookmark");

  bm->bm_title_sub = bookmark_add_prop(src, "title",    title,   bm, set_title);
  bm->bm_url_sub   = bookmark_add_prop(src, "url",      url,     bm, set_url);
  bm->bm_type_sub  = bookmark_add_prop(src, "svctype",  type,    bm, set_type);

  bm->bm_service = service_create(title, url, type, NULL, 1, 1);

  prop_link(service_get_status_prop(bm->bm_service),
	    prop_create(src, "status"));

  prop_link(service_get_statustxt_prop(bm->bm_service),
	    prop_create(src, "statustxt"));


  prop_subscribe(PROP_SUB_TRACK_DESTROY | PROP_SUB_NO_INITIAL_UPDATE,
		 PROP_TAG_CALLBACK, bookmark_destroyed, bm,
		 PROP_TAG_ROOT, p,
		 PROP_TAG_MUTEX, &bookmark_mutex,
		 NULL);
  if(prop_set_parent(p, prop_create(bookmarks, "nodes")))
    abort();

}
Exemple #2
0
void
mp_become_primary(struct media_pipe *mp)
{
  mp_init_audio(mp);

  if(media_primary == mp)
    return;

  hts_mutex_lock(&media_mutex);

  assert(mp->mp_flags & MP_PRIMABLE);

  if(media_primary != NULL) {
    prop_set_int(media_primary->mp_prop_primary, 0);

    event_t *e = event_create_action(ACTION_STOP);
    mp_enqueue_event(media_primary, e);
    event_release(e);
  }

  media_primary = mp_retain(mp);

  prop_select(mp->mp_prop_root);
  prop_link(mp->mp_prop_root, media_prop_current);
  prop_set_int(mp->mp_prop_primary, 1);

  hts_mutex_unlock(&media_mutex);
}
Exemple #3
0
prop_t *
settings_create_bound_string(prop_t *parent, prop_t *title, prop_t *value)
{
  prop_t *p = setting_add(parent, title, "string", 0);
  prop_link(value, prop_create(p, "value"));
  return p;
}
Exemple #4
0
static int
be_prop_open(prop_t *page, const char *url)
{
  proppage_t *pp;
  openpage_t *op;

  hts_mutex_lock(&pp_mutex);

  LIST_FOREACH(pp, &proppages, pp_link)
    if(!strcmp(rstr_get(pp->pp_url), url))
      break;

  if(pp == NULL) {
    hts_mutex_unlock(&pp_mutex);
    return 1;
  }

  op = calloc(1, sizeof(openpage_t));
  LIST_INSERT_HEAD(&pp->pp_pages, op, op_link);
  op->op_pp = pp;

  op->op_root = prop_ref_inc(page);
  op->op_page_sub = 
    prop_subscribe(PROP_SUB_TRACK_DESTROY,
		   PROP_TAG_CALLBACK, op_cb, op,
		   PROP_TAG_MUTEX, &pp_mutex,
		   PROP_TAG_ROOT, page,
		   NULL);

  prop_link(pp->pp_model, prop_create(page, "model"));
  hts_mutex_unlock(&pp_mutex);
  return 0;
}
Exemple #5
0
static void
nav_select(navigator_t *nav, nav_page_t *np, prop_t *origin)
{
  prop_link(np->np_prop_root, nav->nav_prop_curpage);
  prop_select_ex(np->np_prop_root, origin, NULL);
  nav->nav_page_current = np;
  nav_update_cango(nav);
}
Exemple #6
0
prop_t *
settings_multiopt_add_opt(setting_t *s, const char *id, prop_t *title,
			  int selected)
{
  prop_t *o = prop_create(s->s_val, id);
  prop_link(title, prop_create(o, "title"));
  return settings_multiopt_add(s, id, o, selected);
}
Exemple #7
0
void
settings_create_info(prop_t *parent, const char *image,
		     prop_t *description)
{
  prop_t *r = setting_add(parent, NULL, "info", 0);
  prop_link(description, prop_create(r, "description"));
  if(image != NULL)
    prop_set_string(prop_create(r, "image"), image);
}
Exemple #8
0
static void
update_service(service_instance_t *si)
{
  if(si->si_service == NULL &&
     si->si_setting_enabled &&
     si->si_setting_title &&
     si->si_setting_type) {

    si->si_service = service_create(NULL, si->si_url, NULL, NULL,
				    si->si_probe, 0);
    prop_link(settings_get_value(si->si_setting_title), 
	      prop_create(si->si_service->s_root, "title"));
    prop_link(settings_get_value(si->si_setting_type), 
	      prop_create(si->si_service->s_root, "type"));
    prop_link(settings_get_value(si->si_setting_enabled), 
	      prop_create(si->si_service->s_root, "enabled"));
  }
}
Exemple #9
0
prop_t *
makesep(prop_t *title)
{
  prop_t *d = prop_create_root(NULL);
  prop_link(title, prop_create(prop_create(d, "metadata"), "title"));
  prop_set_string(prop_create(d, "type"), "separator");
  return d;

}
Exemple #10
0
prop_t *
settings_add_dir(prop_t *parent, prop_t *title, const char *subtype,
		 const char *icon, prop_t *shortdesc,
		 const char *url)
{
  prop_t *p = setting_add(parent, title, "settings", 0);
  prop_t *metadata = prop_create(p, "metadata");

  if(shortdesc != NULL)
    prop_link(shortdesc, prop_create(metadata, "shortdesc"));

  settings_add_dir_sup(p, url, icon, subtype);
  return p;
}
Exemple #11
0
void
settings_multiopt_add_opt(setting_t *s, const char *id, prop_t *title,
			  int selected)
{
  prop_t *o = prop_create(s->s_val, id);
  prop_link(title, prop_create(o, "title"));

  if(selected) {
    mystrset(&s->s_initial_value, id);
    prop_select_ex(o, NULL, s->s_sub);
  }

  if(s->s_first == NULL)
    s->s_first = strdup(id);
}
Exemple #12
0
prop_t *
settings_add_url(prop_t *parent, prop_t *title,
		 const char *subtype, const char *icon,
		 prop_t *shortdesc, const char *url)
{
  prop_t *p = setting_add(parent, title, "settings", 0);
  prop_t *metadata = prop_create(p, "metadata");

  if(shortdesc != NULL)
    prop_link(shortdesc, prop_create(metadata, "shortdesc"));

  prop_set_string(prop_create(p, "url"), url);
  prop_set_string(prop_create(p, "subtype"), subtype);

  if(icon != NULL)
    prop_set_string(prop_create(metadata, "icon"), icon);
  return p;
}
Exemple #13
0
static int
be_prop_open(prop_t *page, const char *url)
{
  proppage_t *pp;

  hts_mutex_lock(&pp_mutex);

  LIST_FOREACH(pp, &proppages, pp_link)
    if(!strcmp(pp->pp_url, url))
      break;

  if(pp == NULL) {
    hts_mutex_unlock(&pp_mutex);
    return 1;
  }

  prop_link(pp->pp_model, prop_create(page, "model"));
  hts_mutex_unlock(&pp_mutex);
  return 0;
}
Exemple #14
0
prop_t *
settings_add_dir(prop_t *parent, prop_t *title, const char *subtype,
		 const char *icon, prop_t *shortdesc)
{
  char url[100];
  prop_t *p = setting_add(parent ? prop_create(parent, "model") : NULL,
			  title, "settings");
  prop_t *model = prop_create(p, "model");
  prop_t *metadata = prop_create(model, "metadata");

  prop_set_string(prop_create(model, "subtype"), subtype);

  backend_prop_make(model, url, sizeof(url));
  prop_set_string(prop_create(p, "url"), url);
  if(icon != NULL)
    prop_set_string(prop_create(metadata, "icon"), icon);

  if(shortdesc != NULL)
    prop_link(shortdesc, prop_create(metadata, "shortdesc"));
  return p;
}
Exemple #15
0
void
metadata_browse(void *db, const char *url, prop_t *nodes,
                prop_t *model,
                library_query_t type,
                int (*checkstop)(void *opaque), void *opaque)
{
    prop_t *status = prop_create_r(model, "status");
    bmdb_t b = {0};
    b.b_query = strdup(url);
    b.b_type = type;
    b.b_nodes = nodes;
    b.b_metadata = prop_create_r(model, "metadata");

    while(!checkstop(opaque)) {
        int p = get_percentage(url);

        if(p != 100) {
            prop_set(model, "percentage", PROP_SET_INT, p);
            prop_set(model, "progressmeter", PROP_SET_INT, 1);
            prop_link(_p("Indexing"), status);
        } else {
            prop_set(model, "progressmeter", PROP_SET_INT, 0);
            prop_unlink(status);
        }

        //    int64_t ts = showtime_get_ts();
        bmdb_query_exec(db, &b);
        //    printf("Query took %lld\n", showtime_get_ts() - ts);
        prop_set(model, "loading", PROP_SET_INT, 0);
        sleep(1);
    }

    prop_set(model, "progressmeter", PROP_SET_INT, 0);
    prop_unlink(status);

    free(b.b_query);
    prop_ref_dec(status);
    prop_ref_dec(b.b_metadata);
}
Exemple #16
0
static connman_service_t *
update_service(GVariant *v, const char *path, connman_service_t *after)
{
  connman_service_t *cs = connman_service_find(path);

  if(cs == NULL) {

    GError *err = NULL;
    GDBusProxy *proxy =
      g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM,
				    G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START ,
				    NULL,
				    "net.connman",
				    path,
				    "net.connman.Service",
				    NULL,
				    &err);
    if(proxy == NULL) {
      TRACE(TRACE_ERROR, "CONNMAN", "Unable to connect to service %s -- %s",
	    path, err->message);
      g_error_free(err);
      return NULL;
    }

    cs = calloc(1, sizeof(connman_service_t));
    cs->cs_refcount = 1;
    cs->cs_proxy = proxy;

    if(after == NULL) {
      TAILQ_INSERT_HEAD(&connman_services, cs, cs_link);
    } else {
      TAILQ_INSERT_AFTER(&connman_services, after, cs, cs_link);
    }

    connman_service_t *next = TAILQ_NEXT(cs, cs_link);

    cs->cs_prop = prop_create_root(path);
    cs->cs_path = strdup(path);

    cs->cs_sub =
      prop_subscribe(0,
		     PROP_TAG_CALLBACK_EVENT, connman_service_event, cs,
		     PROP_TAG_ROOT, cs->cs_prop,
		     PROP_TAG_COURIER, connman_courier,
		     NULL);

    g_signal_connect(G_OBJECT(cs->cs_proxy), "g-signal",
		     G_CALLBACK(connman_svc_signal), cs);

    // Insert at correct position

    if(prop_set_parent_ex(cs->cs_prop, service_nodes,
			  next ? next->cs_prop : NULL, NULL))
      abort();

    prop_t *m = prop_create(cs->cs_prop, "metadata");
    prop_link(prop_create(m, "name"), prop_create(m, "title"));
    prop_set(cs->cs_prop, "type", PROP_SET_STRING, "network");

  } else {

    // Possibly move

    TAILQ_REMOVE(&connman_services, cs, cs_link);

    if(after == NULL) {
      TAILQ_INSERT_HEAD(&connman_services, cs, cs_link);
    } else {
      TAILQ_INSERT_AFTER(&connman_services, after, cs, cs_link);
    }

    connman_service_t *next = TAILQ_NEXT(cs, cs_link);

    prop_move(cs->cs_prop, next ? next->cs_prop : NULL);
  }

  // Update metadata

  prop_set_from_vardict(v, prop_create(cs->cs_prop, "metadata"));

  GVariant *name = g_variant_lookup_value(v, "Name", NULL);
  const gchar *val = name ? g_variant_get_string(name, NULL) : NULL;
  if(val)
    mystrset(&cs->cs_name, val);
  return cs;
}
Exemple #17
0
static int
be_netconf_open(prop_t *page, const char *url0, int sync)
{
  prop_link(netconf_model, prop_create(page, "model"));
  return 0;
}
Exemple #18
0
static void
update_events(htsp_connection_t *hc, prop_t *metadata, int id, int next)
{
  int i;
  htsmsg_t *m;
  prop_t *events        = prop_create(metadata, "list");
  prop_t *current_event = prop_create(metadata, "current");
  prop_t *next_event    = prop_create(metadata, "next");
  int linkstate = 0;
  htsmsg_field_t *f;

  if(id == 0) {

    if(next == 0) {
      // No events at all
      prop_destroy_childs(events);
      return;
    }
    
    id = next;
    linkstate = 1;
  }

  m = htsmsg_create_map();
  htsmsg_add_str(m, "method", "getEvents");
  htsmsg_add_u32(m, "eventId", id);
  htsmsg_add_u32(m, "numFollowing", EPG_TAIL);

  if((m = htsp_reqreply(hc, m)) != NULL) {

    htsmsg_t *events = htsmsg_get_list(m, "events");
    f = events ? TAILQ_FIRST(&events->hm_fields) : NULL;

  } else {
    f = NULL;
  }


  for(i = 0; i < EPG_TAIL; i++) {
    char buf[10];
    uint32_t u32;
    snprintf(buf, sizeof(buf), "%d", i);

    if(f != NULL && f->hmf_type != HMF_MAP)
      f = NULL;

    if(f != NULL) {

      m = htsmsg_get_map_by_field(f);

      prop_t *e = prop_create(events, buf);
      prop_set_string(prop_create(e, "title"), htsmsg_get_str(m, "title"));
      prop_set_string(prop_create(e, "description"),
		      htsmsg_get_str(m, "description"));
      if(!htsmsg_get_u32(m, "start", &u32))
	prop_set_int(prop_create(e, "start"), u32);
      
      if(!htsmsg_get_u32(m, "stop", &u32))
	prop_set_int(prop_create(e, "stop"), u32);
      
      switch(linkstate) {
      case 0:
	prop_link(e, current_event);
	break;
      case 1:
	prop_link(e, next_event);
	break;
      }
      linkstate++;

      f = TAILQ_NEXT(f, hmf_link);
      continue;
    }
    prop_destroy_by_name(events, buf);

    switch(linkstate) {
    case 0:
      prop_unlink(current_event);
      break;
    case 1:
      prop_unlink(next_event);
      break;
    }
    linkstate++;
  }
}
Exemple #19
0
static int
be_settings_open(prop_t *page, const char *url0)
{
  prop_link(settings_root, prop_create(page, "model"));
  return 0;
}
Exemple #20
0
static void
set_title2(prop_t *root, prop_t *title)
{
  prop_link(title, prop_create(prop_create(root, "metadata"), "title"));
}
Exemple #21
0
static void
set_title(prop_t *model, prop_t *title)
{
  prop_link(title, prop_create(prop_create(model, "metadata"), "title"));
}
Exemple #22
0
static void
update_events(htsp_connection_t *hc, prop_t *metadata, int id, int next)
{
  int i;
  htsmsg_t *m;
  prop_t *events        = prop_create(metadata, "list");
  prop_t *current_event = prop_create(metadata, "current");
  prop_t *next_event    = prop_create(metadata, "next");
  char buf[10];
  uint32_t u32;
  int linkstate = 0;

  if(id == 0) {

    if(next == 0) {
      // No events at all
      prop_destroy_childs(events);
      return;
    }
    
    id = next;
    linkstate = 1;
  }

  for(i = 0; i < EPG_TAIL; i++) {
    snprintf(buf, sizeof(buf), "id%d", i);

    if(id != 0) {
      m = htsmsg_create_map();
      htsmsg_add_str(m, "method", "getEvent");
      htsmsg_add_u32(m, "eventId", id);
    
      if((m = htsp_reqreply(hc, m)) != NULL) {

	prop_t *e = prop_create(events, buf);
	prop_set_string(prop_create(e, "title"), htsmsg_get_str(m, "title"));
	prop_set_string(prop_create(e, "description"),
			htsmsg_get_str(m, "description"));
	if(!htsmsg_get_u32(m, "start", &u32))
	  prop_set_int(prop_create(e, "start"), u32);
	
	if(!htsmsg_get_u32(m, "stop", &u32))
	  prop_set_int(prop_create(e, "stop"), u32);

	switch(linkstate) {
	case 0:
	  prop_link(e, current_event);
	  break;
	case 1:
	  prop_link(e, next_event);
	  break;
	}
	linkstate++;
	id = htsmsg_get_u32_or_default(m, "nextEventId", 0);
	continue;
      } else {
	id = 0;
      }
    }
    prop_destroy_by_name(events, buf);

    switch(linkstate) {
    case 0:
      prop_unlink(current_event);
      break;
    case 1:
      prop_unlink(next_event);
      break;
    }
    linkstate++;
  }
}