bool CUpnpBrowserGui::getItems(std::string id, unsigned int index, std::vector<UPnPEntry> * &entries, unsigned int &total) { bool tfound = false; bool rfound = false; bool nfound = false; unsigned int returned = 0; std::list<UPnPAttribute>results; std::list<UPnPAttribute>::iterator i; delete entries; entries = NULL; printf("getItems: getResults: index %d count %d\n", index, m_listmaxshow); if (!getResults(id, index, m_listmaxshow, results)) return false; for (i=results.begin(); i!=results.end(); ++i) { if (i->first=="NumberReturned") { returned=atoi(i->second.c_str()); nfound=true; } else if (i->first=="TotalMatches") { total=atoi(i->second.c_str()); tfound=true; } else if (i->first=="Result") { entries=decodeResult(i->second); rfound=true; } } if (!entries || !nfound || !tfound || !rfound || returned != entries->size() || returned == 0) return false; return true; }
CFX_ByteString CBC_QRCodeReader::Decode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e) { CBC_CommonBitMatrix* matrix = image->GetMatrix(e); BC_EXCEPTION_CHECK_ReturnValue(e, ""); CBC_QRDetector detector(matrix); std::unique_ptr<CBC_QRDetectorResult> detectorResult( detector.Detect(hints, e)); BC_EXCEPTION_CHECK_ReturnValue(e, ""); std::unique_ptr<CBC_CommonDecoderResult> decodeResult( m_decoder->Decode(detectorResult->GetBits(), 0, e)); BC_EXCEPTION_CHECK_ReturnValue(e, ""); return (decodeResult->GetText()); }
bool CUpnpBrowserGui::selectItem(std::string id) { bool loop = true; bool endall = false; bool changed = true; bool rchanged = true; neutrino_msg_t msg; neutrino_msg_data_t data; std::vector<UPnPEntry> *entries; unsigned int index, selected, dirnum; index=0; selected=0; dirnum=0; entries=NULL; while (loop) { updateTimes(); if (rchanged) { if (entries) delete entries; entries=NULL; std::list<UPnPAttribute>attribs; std::list<UPnPAttribute>results; std::list<UPnPAttribute>::iterator i; std::stringstream sindex; std::stringstream scount; unsigned int returned = 0; bool rfound = false; bool nfound = false; bool tfound = false; sindex << index; scount << m_listmaxshow; attribs.push_back(UPnPAttribute("ObjectID", id)); attribs.push_back(UPnPAttribute("BrowseFlag", "BrowseDirectChildren")); attribs.push_back(UPnPAttribute("Filter", "*")); attribs.push_back(UPnPAttribute("StartingIndex", sindex.str())); attribs.push_back(UPnPAttribute("RequestedCount", scount.str())); attribs.push_back(UPnPAttribute("SortCriteria", "")); #if 0 try { results=m_devices[m_selecteddevice].SendSOAP("urn:schemas-upnp-org:service:ContentDirectory:1", "Browse", attribs); } catch (std::runtime_error error) { ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, error.what(), CMessageBox::mbrBack, CMessageBox::mbBack, "info.raw"); if (entries) delete entries; return endall; } #endif results=m_devices[m_selecteddevice].SendSOAP("urn:schemas-upnp-org:service:ContentDirectory:1", "Browse", attribs); for (i=results.begin(); i!=results.end(); i++) { if (i->first=="NumberReturned") { returned=atoi(i->second.c_str()); nfound=true; } if (i->first=="TotalMatches") { dirnum=atoi(i->second.c_str()); tfound=true; } if (i->first=="Result") { entries=decodeResult(i->second); rfound=true; } } if (!entries) return endall; if (!nfound || !tfound || !rfound) { delete entries; return endall; } if (returned != entries->size()) { delete entries; return endall; } if (returned == 0) { delete entries; return endall; } rchanged=false; changed=true; } if (changed) { paintItem(entries, selected - index, dirnum - index, index); changed=false; } g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display neutrino_msg_t msg_repeatok = msg & ~CRCInput::RC_Repeat; if( msg == CRCInput::RC_timeout) { // nothing } else if(msg == CRCInput::RC_home) { loop=false; endall=true; } else if(msg == CRCInput::RC_left) { loop=false; } else if (msg_repeatok == CRCInput::RC_up && selected > 0) { selected--; if (selected < index) { index-=m_listmaxshow; rchanged=true; } changed=true; } else if(msg == CRCInput::RC_green && selected > 0) { if (index > 0) { index-=m_listmaxshow; selected-=m_listmaxshow; rchanged=true; } else selected=0; changed=true; } else if (msg_repeatok == CRCInput::RC_down && selected + 1 < dirnum) { selected++; if (selected + 1 > index + m_listmaxshow) { index+=m_listmaxshow; rchanged=true; } changed=true; } else if(msg == CRCInput::RC_red && selected + 1 < dirnum) { if (index < ((dirnum - 1) / m_listmaxshow) * m_listmaxshow) { index+=m_listmaxshow; selected+=m_listmaxshow; if (selected + 1 >= dirnum) selected=dirnum - 1; rchanged=true; } else selected=dirnum - 1; changed=true; } else if(msg == CRCInput::RC_right) { if ((*entries)[selected - index].isdir) { endall=selectItem((*entries)[selected - index].id); if (endall) loop=false; } changed=true; } else if(msg == CRCInput::RC_ok) { if (!(*entries)[selected - index].isdir) { m_folderplay = false; int preferred=(*entries)[selected - index].preferred; if (preferred != -1) { std::string protocol, prot, network, mime, additional; protocol=(*entries)[selected - index].resources[preferred].protocol; splitProtocol(protocol, prot, network, mime, additional); if (mime == "audio/mpeg") { CAudiofile mp3((*entries)[selected - index].resources[preferred].url, CFile::FILE_MP3); CAudioPlayer::getInstance()->play(&mp3, g_settings.audioplayer_highprio == 1); } else if (mime == "audio/x-vorbis+ogg") { CAudiofile mp3((*entries)[selected - index].resources[preferred].url, CFile::FILE_OGG); CAudioPlayer::getInstance()->play(&mp3, g_settings.audioplayer_highprio == 1); } m_playing_entry = (*entries)[selected - index]; #if 0 // #ifdef ENABLE_PICTUREVIEWER else if ((mime == "image/gif") || (mime == "image/jpeg")) { CPictureViewer *viewer = new CPictureViewer(); bool loop=true; viewer->SetScaling((CPictureViewer::ScalingMode)g_settings.picviewer_scaling); viewer->SetVisible(g_settings.screen_StartX, g_settings.screen_EndX, g_settings.screen_StartY, g_settings.screen_EndY); if(g_settings.video_Format==1) viewer->SetAspectRatio(16.0/9); else if(g_settings.video_Format==0) { CControldClient cdc; cdc.setVideoFormat(CControldClient::VIDEOFORMAT_4_3); viewer->SetAspectRatio(4.0/3); } else viewer->SetAspectRatio(4.0/3); m_frameBuffer->setMode(720, 576, 16); m_frameBuffer->setTransparency(0); viewer->ShowImage((*entries)[selected - index].resources[preferred].url, true); while (loop) { g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display if( msg == CRCInput::RC_home) loop=false; } m_frameBuffer->setMode(720, 576, 8 * sizeof(fb_pixel_t)); m_frameBuffer->setBlendLevel(g_settings.gtx_alpha1, g_settings.gtx_alpha2); m_frameBuffer->ClearFrameBuffer(); delete viewer; } // #endif #endif } }
void CUpnpBrowserGui::playnext(void) { while (true) { std::list<UPnPAttribute>attribs; std::list<UPnPAttribute>results; std::list<UPnPAttribute>::iterator i; std::stringstream sindex; std::vector<UPnPEntry> *entries = NULL; bool rfound = false; bool nfound = false; bool tfound = false; sindex << m_playid; attribs.push_back(UPnPAttribute("ObjectID", m_playfolder)); attribs.push_back(UPnPAttribute("BrowseFlag", "BrowseDirectChildren")); attribs.push_back(UPnPAttribute("Filter", "*")); attribs.push_back(UPnPAttribute("StartingIndex", sindex.str())); attribs.push_back(UPnPAttribute("RequestedCount", "1")); attribs.push_back(UPnPAttribute("SortCriteria", "")); #if 0 try { results=m_devices[m_selecteddevice].SendSOAP("urn:schemas-upnp-org:service:ContentDirectory:1", "Browse", attribs); } catch (std::runtime_error error) { ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, error.what(), CMessageBox::mbrBack, CMessageBox::mbBack, "info.raw"); m_folderplay = false; return; } #endif results=m_devices[m_selecteddevice].SendSOAP("urn:schemas-upnp-org:service:ContentDirectory:1", "Browse", attribs); for (i=results.begin(); i!=results.end(); i++) { if (i->first=="NumberReturned") { if (atoi(i->second.c_str()) != 1) { m_folderplay = false; return; } nfound=true; } if (i->first=="TotalMatches") { tfound=true; } if (i->first=="Result") { entries=decodeResult(i->second); rfound=true; } } m_playid++; if ((entries != NULL) && (!(*entries)[0].isdir)) { int preferred=(*entries)[0].preferred; if (preferred != -1) { std::string protocol, prot, network, mime, additional; protocol=(*entries)[0].resources[preferred].protocol; splitProtocol(protocol, prot, network, mime, additional); if (mime == "audio/mpeg") { m_playing_entry = (*entries)[0]; m_playing_entry_is_shown = false; CAudiofile mp3((*entries)[0].resources[preferred].url, CFile::FILE_MP3); CAudioPlayer::getInstance()->play(&mp3, g_settings.audioplayer_highprio == 1); return; } else if (mime == "audio/x-vorbis+ogg") { m_playing_entry = (*entries)[0]; m_playing_entry_is_shown = false; CAudiofile mp3((*entries)[0].resources[preferred].url, CFile::FILE_OGG); CAudioPlayer::getInstance()->play(&mp3, g_settings.audioplayer_highprio == 1); return; } } } else { neutrino_msg_t msg; neutrino_msg_data_t data; g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display if( msg == CRCInput::RC_home) { m_folderplay = false; break; } } } }
bool CUpnpBrowserGui::selectItem(std::string id) { bool loop = true; bool endall = false; bool changed = true; bool rchanged = true; neutrino_msg_t msg; neutrino_msg_data_t data; std::vector<UPnPEntry> *entries; unsigned int index, selected, dirnum; index = 0; selected = 0; dirnum = 0; entries = NULL; while (loop) { updateTimes(); if (rchanged) { if (entries) delete entries; entries = NULL; std::list<UPnPAttribute>attribs; std::list<UPnPAttribute>results; std::list<UPnPAttribute>::iterator i; std::stringstream sindex; std::stringstream scount; unsigned int returned = 0; bool rfound = false; bool nfound = false; bool tfound = false; sindex << index; scount << m_listmaxshow; attribs.push_back(UPnPAttribute("ObjectID", id)); attribs.push_back(UPnPAttribute("BrowseFlag", "BrowseDirectChildren")); attribs.push_back(UPnPAttribute("Filter", "*")); attribs.push_back(UPnPAttribute("StartingIndex", sindex.str())); attribs.push_back(UPnPAttribute("RequestedCount", scount.str())); attribs.push_back(UPnPAttribute("SortCriteria", "")); results = m_devices[m_selecteddevice].SendSOAP("urn:schemas-upnp-org:service:ContentDirectory:1", "Browse", attribs); for (i = results.begin(); i != results.end(); i++) { if (i->first == "NumberReturned") { returned = atoi(i->second.c_str()); nfound = true; } if (i->first == "TotalMatches") { dirnum = atoi(i->second.c_str()); tfound = true; } if (i->first == "Result") { entries = decodeResult(i->second); rfound = true; } } if (!entries) return endall; if (!nfound || !tfound || !rfound) { delete entries; return endall; } if (returned != entries->size()) { delete entries; return endall; } if (returned == 0) { delete entries; return endall; } rchanged=false; changed=true; } if (changed) { paintItem(entries, selected - index, dirnum - index, index); changed = false; } m_frameBuffer->blit(); g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display neutrino_msg_t msg_repeatok = msg & ~CRCInput::RC_Repeat; if( msg == CRCInput::RC_timeout) { // nothing } else if(msg == CRCInput::RC_home) { loop = false; endall = true; } else if(msg == CRCInput::RC_left) { loop = false; } else if (msg_repeatok == CRCInput::RC_up && selected > 0) { selected--; if (selected < index) { index -= m_listmaxshow; rchanged = true; } changed = true; } else if( (msg == CRCInput::RC_yellow || (int) msg == g_settings.key_channelList_pageup) && selected > 0) { if (index > 0) { index-=m_listmaxshow; selected-=m_listmaxshow; rchanged=true; } else selected=0; changed = true; } else if (msg_repeatok == CRCInput::RC_down && selected + 1 < dirnum) { selected++; if (selected + 1 > index + m_listmaxshow) { index += m_listmaxshow; rchanged = true; } changed=true; } else if( (msg == CRCInput::RC_green || (int) msg == g_settings.key_channelList_pagedown)&& selected + 1 < dirnum) { if (index < ((dirnum - 1) / m_listmaxshow) * m_listmaxshow) { index += m_listmaxshow; selected += m_listmaxshow; if (selected + 1 >= dirnum) selected = dirnum - 1; rchanged = true; } else selected = dirnum - 1; changed = true; } else if(msg == CRCInput::RC_right) { if ((*entries)[selected - index].isdir) { endall = selectItem((*entries)[selected - index].id); if (endall) loop = false; } changed = true; } else if(msg == CRCInput::RC_ok) { if (!(*entries)[selected - index].isdir) { m_folderplay = false; int preferred = (*entries)[selected - index].preferred; if (preferred != -1) { std::string protocol, prot, network, mime, additional; protocol=(*entries)[selected - index].resources[preferred].protocol; splitProtocol(protocol, prot, network, mime, additional); if (mime == "audio/mpeg") { CAudioPlayerGui tmpAudioPlayerGui; CAudiofileExt audiofile((*entries)[selected - index].resources[preferred].url, CFile::EXTENSION_MP3); tmpAudioPlayerGui.addToPlaylist(audiofile); tmpAudioPlayerGui.exec(NULL, "urlplayback"); } else if ((mime == "image/gif") || (mime == "image/jpeg")) { CPictureViewerGui tmpPictureViewerGui; CPicture pic; struct stat statbuf; pic.Filename = (*entries)[selected - index].resources[preferred].url; std::string tmp = (*entries)[selected - index].resources[preferred].url.substr((*entries)[selected - index].resources[preferred].url.rfind('/') + 1); pic.Name = tmp.substr(0, tmp.rfind('.')); pic.Type = tmp.substr(tmp.rfind('.') + 1); if(stat(pic.Filename.c_str(), &statbuf) != 0) printf("stat error"); pic.Date = statbuf.st_mtime; tmpPictureViewerGui.addToPlaylist(pic); tmpPictureViewerGui.exec(NULL, "urlplayback"); changed = true; } else if (mime.substr(0,6) == "video/") { m_frameBuffer->ClearFrameBuffer(); m_frameBuffer->blit(); CFile file; file.Name = (*entries)[selected - index].resources[preferred].url.c_str(); //FIXME CMoviePlayerGui tmpMoviePlayerGui; tmpMoviePlayerGui.addToPlaylist(file); tmpMoviePlayerGui.exec(NULL, "urlplayback"); changed = true; } m_playing_entry = (*entries)[selected - index]; } } else { m_folderplay = true; m_playfolder = (*entries)[selected - index].id; m_playid = 0; playnext(); } changed = true; } else if( msg == CRCInput::RC_red) { if(CAudioPlayer::getInstance()->getState() != CBaseDec::STOP) CAudioPlayer::getInstance()->stop(); m_folderplay = false; } else if(msg == NeutrinoMessages::RECORD_START || msg == NeutrinoMessages::ZAPTO || msg == NeutrinoMessages::STANDBY_ON || msg == NeutrinoMessages::SHUTDOWN || msg == NeutrinoMessages::SLEEPTIMER) { loop = false; g_RCInput->postMsg(msg, data); } else if(msg == NeutrinoMessages::EVT_TIMER) { CNeutrinoApp::getInstance()->handleMsg( msg, data ); } else { if( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) loop = false; changed = true; } if (m_folderplay && (CAudioPlayer::getInstance()->getState() == CBaseDec::STOP)) playnext(); m_frameBuffer->blit(); } if (entries) delete entries; m_frameBuffer->ClearFrameBuffer(); m_frameBuffer->blit(); return endall; }
void CUpnpBrowserGui::playnext(void) { while (true) { std::list<UPnPAttribute>attribs; std::list<UPnPAttribute>results; std::list<UPnPAttribute>::iterator i; std::stringstream sindex; std::vector<UPnPEntry> *entries = NULL; bool rfound = false; bool nfound = false; bool tfound = false; sindex << m_playid; attribs.push_back(UPnPAttribute("ObjectID", m_playfolder)); attribs.push_back(UPnPAttribute("BrowseFlag", "BrowseDirectChildren")); attribs.push_back(UPnPAttribute("Filter", "*")); attribs.push_back(UPnPAttribute("StartingIndex", sindex.str())); attribs.push_back(UPnPAttribute("RequestedCount", "1")); attribs.push_back(UPnPAttribute("SortCriteria", "")); results = m_devices[m_selecteddevice].SendSOAP("urn:schemas-upnp-org:service:ContentDirectory:1", "Browse", attribs); for (i = results.begin(); i!=results.end(); i++) { if (i->first=="NumberReturned") { if (atoi(i->second.c_str()) != 1) { m_folderplay = false; return; } nfound=true; } if (i->first=="TotalMatches") { tfound=true; } if (i->first=="Result") { entries=decodeResult(i->second); rfound=true; } } m_playid++; if ((entries != NULL) && (!(*entries)[0].isdir)) { int preferred=(*entries)[0].preferred; if (preferred != -1) { std::string protocol, prot, network, mime, additional; protocol=(*entries)[0].resources[preferred].protocol; splitProtocol(protocol, prot, network, mime, additional); if (mime == "audio/mpeg") { m_playing_entry = (*entries)[0]; m_playing_entry_is_shown = false; CAudioPlayerGui tmpAudioPlayerGui; CAudiofileExt audiofile((*entries)[0].resources[preferred].url, CFile::EXTENSION_MP3); tmpAudioPlayerGui.addToPlaylist(audiofile); tmpAudioPlayerGui.exec(NULL, "urlplayback"); return; } else if (mime.substr(0,6) == "video/") { m_frameBuffer->ClearFrameBuffer(); m_frameBuffer->blit(); CFile mfile; mfile.Name = (*entries)[0].resources[preferred].url.c_str(); //FIXME CMoviePlayerGui tmpMoviePlayerGui; tmpMoviePlayerGui.addToPlaylist(mfile); tmpMoviePlayerGui.exec(NULL, "urlplayback"); return; } else if (mime.substr(0,6) == "image/") { CPictureViewerGui tmpPictureViewerGui; CPicture pic; struct stat statbuf; pic.Filename = (*entries)[0].resources[preferred].url; std::string tmp = (*entries)[0].resources[preferred].url.substr((*entries)[0].resources[preferred].url.rfind('/') + 1); pic.Name = tmp.substr(0, tmp.rfind('.')); pic.Type = tmp.substr(tmp.rfind('.') + 1); if(stat(pic.Filename.c_str(), &statbuf) != 0) printf("stat error"); pic.Date = statbuf.st_mtime; tmpPictureViewerGui.addToPlaylist(pic); tmpPictureViewerGui.exec(NULL, "urlplayback"); return; } } } else { neutrino_msg_t msg; neutrino_msg_data_t data; g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display if( msg == CRCInput::RC_home) { m_folderplay = false; break; } } } // m_frameBuffer->ClearFrameBuffer(); m_frameBuffer->blit(); }
void CUpnpBrowserGui::playnext(void) { std::vector<UPnPEntry> *entries = NULL; while (true) { timeout = 0; std::list<UPnPAttribute>results; std::list<UPnPAttribute>::iterator i; printf("playnext: getResults m_playfolder %s m_playid %d\n", m_playfolder.c_str(), m_playid); if (!getResults(m_playfolder, m_playid, 1, results)) { m_folderplay = false; return; } for (i=results.begin(); i!=results.end(); ++i) { if (i->first=="NumberReturned") { if (atoi(i->second.c_str()) != 1) { m_folderplay = false; return; } } else if (i->first=="Result") { entries=decodeResult(i->second); } } //m_playid++; if ((entries != NULL) && (!(*entries)[0].isdir)) { int preferred=(*entries)[0].preferred; if (preferred != -1) { std::string &mime = (*entries)[0].mime; if (mime.substr(0,6) == "audio/") { m_playing_entry = (*entries)[0]; m_playing_entry_is_shown = false; playAudio((*entries)[0].resources[preferred].url, (*entries)[0].type); } else if (mime.substr(0,6) == "video/") { playVideo((*entries)[0].title, (*entries)[0].resources[preferred].url); m_folderplay = false; // FIXME else no way to stop in video folder } else if (mime.substr(0,6) == "image/") { if (m_folderplay) timeout = time(NULL) + g_settings.picviewer_slide_time; showPicture((*entries)[0].resources[preferred].url); } return; } } else { neutrino_msg_t msg; neutrino_msg_data_t data; g_RCInput->getMsg(&msg, &data, 10); // 1 sec timeout to update play/stop state display if (msg == CRCInput::RC_home) { m_folderplay = false; break; } } } delete entries; m_frameBuffer->Clear(); }