void RecordingsResponder::showRecordings(ostream& out, cxxtools::http::Request& request, cxxtools::http::Reply& reply) { QueryHandler q("/recordings", request); bool read_marks = q.getOptionAsString("marks") == "true"; string sync_id = q.getOptionAsString("syncId"); RecordingList* recordingList = getRecordingList(out, q, reply, read_marks); if (recordingList == NULL) { return; } SyncMap* sync_map = new SyncMap(q); int start_filter = q.getOptionAsInt("start"); int limit_filter = q.getOptionAsInt("limit"); const cRecording* recording = getRecordingByRequest(q); if ( start_filter >= 0 && limit_filter >= 1 ) { recordingList->activateLimit(start_filter, limit_filter); } recordingList->init(); #if APIVERSNUM > 20300 LOCK_RECORDINGS_READ; const cRecordings& recordings = *Recordings; #else cRecordings& recordings = Recordings; #endif if ( recording == NULL ) { for (int i = 0; i < recordings.Count(); i++) { recordingList->addRecording(recordings.Get(i), i, sync_map, ""); } } else { recordingList->addRecording(recording, recording->Index(), sync_map, ""); } recordingList->setTotal(recordings.Count()); recordingList->finish(); delete recordingList; if (sync_map->active()) { sync_map->write(); } delete sync_map; }
void RecordingsResponder::showRecordings(ostream& out, cxxtools::http::Request& request, cxxtools::http::Reply& reply) { QueryHandler q("/recordings", request); RecordingList* recordingList; bool read_marks = q.getOptionAsString("marks") == "true"; if ( q.isFormat(".json") ) { reply.addHeader("Content-Type", "application/json; charset=utf-8"); recordingList = (RecordingList*)new JsonRecordingList(&out, read_marks); } else if ( q.isFormat(".html") ) { reply.addHeader("Content-Type", "text/html; charset=utf-8"); recordingList = (RecordingList*)new HtmlRecordingList(&out, read_marks); } else if ( q.isFormat(".xml") ) { reply.addHeader("Content-Type", "text/xml; charset=utf-8"); recordingList = (RecordingList*)new XmlRecordingList(&out, read_marks); } else { reply.httpReturn(404, "Resources are not available for the selected format. (Use: .json or .html)"); return; } int start_filter = q.getOptionAsInt("start"); int limit_filter = q.getOptionAsInt("limit"); int requested_item = q.getParamAsInt(0); if ( start_filter >= 0 && limit_filter >= 1 ) { recordingList->activateLimit(start_filter, limit_filter); } recordingList->init(); cRecording* recording = NULL; for (int i = 0; i < Recordings.Count();i++) { if ( requested_item == i || requested_item < 0 ) { recording = Recordings.Get(i); recordingList->addRecording(recording, i); } } recordingList->setTotal(Recordings.Count()); recordingList->finish(); delete recordingList; }