void metadata_filename_to_title(const char *filename, int *yearp, rstr_t **titlep) { int year = 0; char *s = mystrdupa(filename); url_deescape(s); int i = strlen(s); while(i > 0) { if(i > 5 && s[i-5] == '.' && isnum(s[i-4]) && isnum(s[i-3]) && isnum(s[i-2]) && isnum(s[i-1])) { year = atoi(s + i - 4); i -= 5; s[i] = 0; continue; } if(i > 7 && s[i-7] == ' ' && s[i-6] == '(' && isnum(s[i-5]) && isnum(s[i-4]) && isnum(s[i-3]) && isnum(s[i-2]) && s[i-1] == ')') { year = atoi(s + i - 5); i -= 7; s[i] = 0; continue; } int j; for(j = 0; stopstrings[j] != NULL; j++) { int len = strlen(stopstrings[j]); if(i > len+1 && (s[i-len-1] == '.' || s[i-len-1] == ' ') && !strncasecmp(s+i-len, stopstrings[j], len) && (s[i] == '.' || s[i] == ' ' || s[i] == '-' || s[i] == 0)) { i -= len+1; s[i] = 0; break; } } if(stopstrings[j] != NULL) continue; i--; } for(i = 0; s[i]; i++) { if(s[i] == '.') { s[i] = ' '; } } if(yearp != NULL) *yearp = year; if(titlep != NULL) *titlep = rstr_alloc(s); }
static JSBool js_queryStringSplit(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { const char *str; char *s, *s0; JSObject *robj = JS_NewObject(cx, NULL, NULL, NULL); if (!JS_ConvertArguments(cx, argc, argv, "s", &str)) return JS_FALSE; s0 = s = strdup(str); while(s) { char *k = s; char *v = strchr(s, '='); if(v == NULL) break; *v++ = 0; if((s = strchr(v, '&')) != NULL) *s++ = 0; k = strdup(k); v = strdup(v); url_deescape(k); url_deescape(v); jsval val = STRING_TO_JSVAL(JS_NewString(cx, v, strlen(v))); JS_SetProperty(cx, robj, k, &val); free(k); } free(s0); *rval = OBJECT_TO_JSVAL(robj); return JS_TRUE; }
int metadata_filename_to_episode(const char *s, int *seasonp, int *episodep, rstr_t **titlep) { int i, j; int len = strlen(s); int season = -1; int episode = -1; for(i = 0; i < len; i++) { if((s[i] == 's' || s[i] == 'S') && isnum(s[i+1]) && isnum(s[i+2])) { int o = 3+i; if(s[o] == '.') o++; if((s[o] == 'e' || s[o] == 'E') && isnum(s[o+1]) && isnum(s[o+2])) { season = atoi(s+i+1); episode = atoi(s+o+1); break; } } } if(season == -1 || episode == -1) return -1; *seasonp = season; *episodep = episode; char *t = mystrdupa(s); url_deescape(t); for(j= 0; j < i; j++) { if(t[j] == '.') { t[j] = ' '; } } t[j] = 0; if(titlep != NULL) { if(j) *titlep = rstr_alloc(t); else *titlep = NULL; } return 0; }
static int hc_image(http_connection_t *hc, const char *remain, void *opaque, http_cmd_t method) { htsbuf_queue_t out; image_t *img; char errbuf[200]; const char *content; image_meta_t im = {0}; im.im_no_decoding = 1; rstr_t *url; const char *u = http_arg_get_req(hc, "url"); if(u != NULL) { url = rstr_alloc(u); url_deescape(rstr_data(url)); } else { if(remain == NULL) { return 404; } url = rstr_alloc(remain); } img = backend_imageloader(url, &im, NULL, errbuf, sizeof(errbuf), NULL, NULL); rstr_release(url); if(img == NULL) return http_error(hc, 404, "Unable to load image %s : %s", remain, errbuf); const image_component_t *ic = image_find_component(img, IMAGE_CODED); if(ic == NULL) { image_release(img); return http_error(hc, 404, "Unable to load image %s : Original data not available", remain); } const image_component_coded_t *icc = &ic->coded; htsbuf_queue_init(&out, 0); htsbuf_append(&out, buf_cstr(icc->icc_buf), buf_len(icc->icc_buf)); switch(icc->icc_type) { case IMAGE_JPEG: content = "image/jpeg"; break; case IMAGE_PNG: content = "image/png"; break; case IMAGE_GIF: content = "image/gif"; break; default: content = "image"; break; } image_release(img); return http_send_reply(hc, 0, content, NULL, NULL, 0, &out); }
int metadata_filename_to_episode(const char *s, int *seasonp, int *episodep, rstr_t **titlep) { int i, j; int len = strlen(s); int season = -1; int episode = -1; // Parse S##E## format for(i = 0; i < len; i++) { if((s[i] == 's' || s[i] == 'S') && isnum(s[i+1]) && isnum(s[i+2])) { int o = 3+i; if(s[o] == '.') o++; if((s[o] == 'e' || s[o] == 'E') && isnum(s[o+1]) && isnum(s[o+2])) { season = atoi(s+i+1); episode = atoi(s+o+1); break; } } } if(season == -1 && episode == -1) { // Parse ' (#)#x## - ' format for(i = 3; i < len - 2; i++) { if(s[i] == 'x' && isnum(s[i + 1]) && isnum(s[i + 2]) && s[i + 3] == ' ' && s[i + 4] == '-' && s[i + 5] == ' ') { episode = atoi(s + i + 1); if(isnum(s[i - 1]) && s[i - 2] == ' ') { season = atoi(s + i - 1); i--; break; } else if(isnum(s[i - 1]) && isnum(s[i - 2]) && s[i - 3] == ' ') { season = atoi(s + i - 2); i-=2; break; } } } } if(season == -1 || episode == -1) return -1; *seasonp = season; *episodep = episode; char *t = mystrdupa(s); url_deescape(t); for(j= 0; j < i; j++) { if(t[j] == '.') { t[j] = ' '; } } t[j] = 0; if(titlep != NULL) { if(j) *titlep = rstr_alloc(t); else *titlep = NULL; } return 0; }
void metadata_filename_to_title(const char *filename, int *yearp, rstr_t **titlep) { int year = 0; //skip the chars between a starting '[' and ']'. char* start=NULL; if(filename[0]=='[') { start = strchr(filename,']'); if(start != NULL) { start++; if(start[0]=='.') start++; } if(start>=filename+strlen(filename)) //don't skip if the '[]' includes the whole filename start=NULL; } char *s ; if(start==NULL) s = mystrdupa(filename); else s = mystrdupa(start); url_deescape(s); int i = strlen(s); while(i > 0) { if(i > 5 && s[i-5] == '.' && isnum(s[i-4]) && isnum(s[i-3]) && isnum(s[i-2]) && isnum(s[i-1])) { year = atoi(s + i - 4); i -= 5; s[i] = 0; continue; } if(i > 7 && s[i-7] == ' ' && s[i-6] == '(' && isnum(s[i-5]) && isnum(s[i-4]) && isnum(s[i-3]) && isnum(s[i-2]) && s[i-1] == ')') { year = atoi(s + i - 5); i -= 7; s[i] = 0; continue; } int j; for(j = 0; stopstrings[j] != NULL; j++) { int len = strlen(stopstrings[j]); if(i > len+1 && (s[i-len-1] == '.' || s[i-len-1] == ' ') && !strncasecmp(s+i-len, stopstrings[j], len) && (s[i] == '.' || s[i] == ' ' || s[i] == '-' || s[i] == 0)) { i -= len+1; s[i] = 0; break; } } if(stopstrings[j] != NULL) continue; i--; } char *lastword = strrchr(s, ' '); if(lastword && lastword > s) { int y = atoi(lastword + 1); if(y > 1900 && y < 2040) { year = y; *lastword = 0; } } for(i = 0; s[i]; i++) { if(s[i] == '.') { s[i] = ' '; } } if(yearp != NULL) *yearp = year; if(titlep != NULL) *titlep = rstr_alloc(s); }