void htsmsg_store_set(const char *store, const char *key, int value_type, ...) { va_list ap; va_start(ap, value_type); hts_mutex_lock(&loaded_msg_mutex); loaded_msg_t *lm = htsmsg_store_obtain(store, 1); htsmsg_delete_field(lm->lm_msg, key); switch(value_type) { case -1: break; case HMF_MAP: case HMF_LIST: htsmsg_add_msg(lm->lm_msg, key, va_arg(ap, htsmsg_t *)); break; case HMF_S64: htsmsg_add_s64(lm->lm_msg, key, va_arg(ap, int64_t)); break; case HMF_STR: htsmsg_add_str(lm->lm_msg, key, va_arg(ap, const char *)); break; default: abort(); } lm->lm_dirty = 1; callout_arm_managed(&lm->lm_timer, htsmsg_store_timer_cb, lm, SETTINGS_CACHE_DELAY, htsmsg_store_lockmgr); hts_mutex_unlock(&loaded_msg_mutex); va_end(ap); }
static int xmlrpc_parse_value(htsmsg_t *dst, htsmsg_field_t *g, const char *name, char *errbuf, size_t errlen) { const char *cdata; htsmsg_t *c; htsmsg_t *sub; if(!strcmp(g->hmf_name, "struct") && (c = htsmsg_get_map_by_field(g)) != NULL) { sub = htsmsg_create_map(); if(xmlrpc_parse_struct(sub, c, errbuf, errlen)) { htsmsg_release(sub); return -1; } htsmsg_add_msg(dst, name, sub); return 0; } else if(!strcmp(g->hmf_name, "array") && (c = htsmsg_get_map_by_field(g)) != NULL) { sub = htsmsg_create_list(); if(xmlrpc_parse_array(sub, c, errbuf, errlen)) { htsmsg_release(sub); return -1; } htsmsg_add_msg(dst, name, sub); return 0; } cdata = g->hmf_type == HMF_STR ? g->hmf_str : NULL; if(!strcmp(g->hmf_name, "string")) { if(cdata != NULL) htsmsg_add_str(dst, name, cdata); } else if(!strcmp(g->hmf_name, "boolean")) { if(cdata != NULL) htsmsg_add_u32(dst, name, atoi(cdata)); } else if(!strcmp(g->hmf_name, "double")) { if(cdata != NULL) htsmsg_add_dbl(dst, name, my_str2double(cdata, NULL)); } else if(!strcmp(g->hmf_name, "int")) { if(cdata != NULL) htsmsg_add_s64(dst, name, atoll(cdata)); } else { snprintf(errbuf, errlen, "Unknown field type \"%s\" %s = %s", g->hmf_name, name, cdata); return -1; } return 0; }
static void satip_device_dbus_notify( satip_device_t *sd, const char *sig_name ) { #if ENABLE_DBUS_1 char buf[256]; htsmsg_t *msg = htsmsg_create_list(); htsmsg_add_str(msg, NULL, sd->sd_info.addr); htsmsg_add_str(msg, NULL, sd->sd_info.location); htsmsg_add_str(msg, NULL, sd->sd_info.server); htsmsg_add_s64(msg, NULL, sd->sd_info.rtsp_port); snprintf(buf, sizeof(buf), "/input/mpegts/satip/%s", idnode_uuid_as_sstr(&sd->th_id)); dbus_emit_signal(buf, sig_name, msg); #endif }
htsmsg_t * opensub_build_query(const char *lang, int64_t hash, int64_t movsize, const char *imdb, const char *title) { htsmsg_t *m = htsmsg_create_map(); if(lang != NULL) htsmsg_add_str(m, "sublanguageid", lang); if(movsize) { char str[20]; snprintf(str, sizeof(str), "%" PRIx64, hash); htsmsg_add_str(m, "moviehash", str); htsmsg_add_s64(m, "moviebytesize", movsize); } if(imdb != NULL) htsmsg_add_str(m, "imdbid", imdb); if(title != NULL) htsmsg_add_str(m, "query", title); return m; }
/* * Note: text in data pointer is not preserved (must be read/write) */ htsmsg_t *parse_m3u (char *data, const char *charset, const char *url) { char *p, *x, *y; char *charset_id = intlconv_charset_id(charset, 0, 1); const char *multi_name; int delim; htsmsg_t *m = htsmsg_create_map(); htsmsg_t *item = NULL, *l = NULL, *t, *key = NULL; char buf[512]; while (*data && *data <= ' ') data++; p = data; data = until_eol(data); if (strncmp(p, "#EXTM3U", 7)) { htsmsg_add_msg(m, "items", htsmsg_create_list()); return m; } while (*data) { if (strncmp(data, "#EXTINF:", 8) == 0) { if (item == NULL) item = htsmsg_create_map(); data += 8; p = data; if (*data == '-') data++; while (*data >= '0' && *data <= '9') data++; delim = *data; *data = '\0'; htsmsg_add_s64(item, "m3u-duration", strtoll(p, NULL, 10)); *data = delim; while (*data > ' ' && *data != ',') data++; while (delim && delim != ',' && delim != '\n' && delim != '\r') { while (*data && *data <= ' ') data++; if (*data == '\0' || *data == ',') break; p = data++; while (*data && *data != ',' && *data != '=') data++; if (*data == '=') { *data = '\0'; x = get_m3u_str(data + 1, &data, &delim); if (*p && *x) { y = intlconv_to_utf8safestr(charset_id, x, strlen(x)*2); htsmsg_add_str(item, p, y ?: ".invalid.charset."); free(y); } get_m3u_str_post(&data, delim); } } p = NULL; if (*data == ',') { delim = ','; data++; } if (delim == ',') { while (*data && *data <= ' ' && *data != '\n' && *data != '\r') data++; if (*data) p = data; } data = until_eol(data); if (p && *p) { y = intlconv_to_utf8safestr(charset_id, p, strlen(p)*2); htsmsg_add_str(item, "m3u-name", y ?: ".invalid.charset."); free(y); }