/** Dispatch checks args and then trys to match against commands */ void cmd_dispatch(int argc, char **argv) { int i; if(argc < 1) { cmd_sendresponse(put_error(501,"Bad Request"), 404); cmd_done(); return; } for(i = 0; i < sizeof(commands) / sizeof(commands[0]); i++) { if(!strcmp(commands[i].name, argv[0])) { if(commands[i].fn(argc, argv)) cmd_done(); return; }else if(!strcmp("playlist", argv[0])) { /// @note: this is soon to be deprecated, a backwardcomp for prev version #ifdef USE_MYSQL _mysql_updateStats(g_conn, "init"); cmd_sendresponse(put_error(200,"Pong"), 200); cmd_done(); return; #endif } } cmd_sendresponse(put_error(501,"Not implemented"), 404); cmd_done(); }
/** Cmd pong Used when you need to ping the service, and see if its up Responds with "pong" if available. */ int cmd_pong(int arc, char **argv){ #ifdef USE_MYSQL _mysql_updateStats(g_conn, "init"); #endif cmd_sendresponse(put_error(200,"Pong"), 200); cmd_done(); return 1; }
int cmd_search(int argc, char **argv) { char query[1024]; int i; if (argc < 2) { search_usage(); return -1; } query[0] = 0; for(i = 1; i < argc; i++) snprintf(query + strlen(query), sizeof(query) - strlen(query), "%s%s", i == 1 ? "" : " ", argv[i]); #ifdef USE_MYSQL _mysql_updateStats(g_conn, "search"); #endif sp_search_create(g_session, query, 0, 100, 0, 100, 0, 100, &search_complete, NULL); return 0; }
int cmd_toplist(int argc, char **argv) { sp_toplisttype type; sp_toplistregion region; char username[252]; if(argc == 2) { if(!strcasecmp(argv[1], "charts")) toplist_charts(); return -1; } if(argc < 3) { toplist_usage(); return -1; } if(!strcasecmp(argv[1], "artists")) type = SP_TOPLIST_TYPE_ARTISTS; else if(!strcasecmp(argv[1], "albums")) type = SP_TOPLIST_TYPE_ALBUMS; else if(!strcasecmp(argv[1], "tracks")) type = SP_TOPLIST_TYPE_TRACKS; else { toplist_usage(); return -1; } if(!strcasecmp(argv[2], "global")) region = SP_TOPLIST_REGION_EVERYWHERE; else if(!strcasecmp(argv[2], "user")){ region = SP_TOPLIST_REGION_USER; if(argc != 4 || strlen(argv[3]) < 0) { toplist_usage(); return -1; } strcpy(username, argv[3]); }else if(!strcasecmp(argv[2], "region")) { if(argc != 4 || strlen(argv[3]) != 2) { toplist_usage(); return -1; } int i; for (i = 0; argv[3][i]; i++) argv[3][i] = toupper(argv[3][i]); region = SP_TOPLIST_REGION(argv[3][0], argv[3][1]); } else { toplist_usage(); return -1; } #ifdef USE_MYSQL _mysql_updateStats(g_conn, "toplist"); #endif sp_toplistbrowse_create(g_session, type, region, username, got_toplist, NULL); return 0; }