void CUPnPPlayer::DoAudioWork() { NPT_String data; NPT_CHECK_POINTER_LABEL_SEVERE(m_delegate, failed); m_delegate->UpdatePositionInfo(); if(m_started) { NPT_String uri, meta; NPT_CHECK_LABEL(m_delegate->m_transport->GetStateVariableValue("CurrentTrackURI", uri), failed); NPT_CHECK_LABEL(m_delegate->m_transport->GetStateVariableValue("CurrentTrackMetadata", meta), failed); if(m_current_uri != (const char*)uri || m_current_meta != (const char*)meta) { m_current_uri = (const char*)uri; m_current_meta = (const char*)meta; CFileItemPtr item = GetFileItem(uri, meta); g_application.CurrentFileItem() = *item; CApplicationMessenger::Get().SetCurrentItem(*item.get()); } NPT_CHECK_LABEL(m_delegate->m_transport->GetStateVariableValue("TransportState", data), failed); if(data == "STOPPED") { m_started = false; m_callback.OnPlayBackEnded(); } } return; failed: return; }
void CDownloadList::RemoveFile(CPartFile *pPartFile) { if (pPartFile != NULL) { PFIter itFile = FindFileItem(pPartFile); // If it was found... if (IsValidIterator(itFile)) { CPartFileDLItem *pFileItem = GetFileItem(itFile); // Remove the file item from the file map m_mapFiles.erase(itFile); // // If it's in the dirty list, remove it from there too PartFileItemVector::iterator it = ::find(m_pvecDirtyFiles->begin(),m_pvecDirtyFiles->end(),pFileItem); if (it != m_pvecDirtyFiles->end()) { m_pvecDirtyFiles->erase(it); } // NOTE: This call must remain synchronous as the item is destroyed immediately after. m_pctlDownloadList->RemoveFileItem(pFileItem); // Destroy the file item delete pFileItem; } } }
void cMenuFileBrowserBase::BuildActualPlayList(const cPlayListItem &item, cPlayList &playlist, bool all) { playlist.Clear(); if(!item.GetFileType().IsPlayable()) { return; } int pos = GetItemPos(item.GetPath()); if(pos < 0) { return; } int startPos = 0; cMenuFileItem* fileitem; for (startPos = pos; startPos >= 0; --startPos) { fileitem = GetFileItem(startPos); if(fileitem) { if(fileitem->IsPlayable() && !fileitem->IsOfSimilarType(item) && !all) { ++startPos; break; } } } for (int i = startPos; i<= Count(); ++i) { fileitem = GetFileItem(i); if(fileitem) { if(fileitem->IsOfSimilarType(item)) { playlist.Insert(*fileitem); } else if(fileitem->IsPlayable() && !all) { break; } } } playlist.SetCurrent(item); }
cMenuFileItem *cMenuFileBrowserBase::GetSingleMarkedFileItem() const { if(markedEntries_.size() == 1) { return GetFileItem(*markedEntries_.begin()); } return NULL; }
cMenuFileItem *cMenuFileBrowserBase::GetFileItem(itemId id) const { for (int i = 0; i < Count(); i++) { cMenuFileItem *item = GetFileItem(i); if(item && item->GetId() == id) { return item; } } return NULL; }
/*---------------------------------------------------------------------- | CUPnPRenderer::OnSetAVTransportURI +---------------------------------------------------------------------*/ NPT_Result CUPnPRenderer::OnSetNextAVTransportURI(PLT_ActionReference& action) { NPT_String uri, meta; PLT_Service* service; NPT_CHECK_SEVERE(FindServiceByType("urn:schemas-upnp-org:service:AVTransport:1", service)); NPT_CHECK_SEVERE(action->GetArgumentValue("NextURI", uri)); NPT_CHECK_SEVERE(action->GetArgumentValue("NextURIMetaData", meta)); CFileItemPtr item = GetFileItem(uri, meta); if (!item) { return NPT_FAILURE; } #if 0 if (g_application.m_pPlayer->IsPlaying()) { int playlist = PLAYLIST_MUSIC; if(item->IsVideo()) playlist = PLAYLIST_VIDEO; { CSingleLock lock(g_graphicsContext); g_playlistPlayer.ClearPlaylist(playlist); g_playlistPlayer.Add(playlist, item); g_playlistPlayer.SetCurrentSong(-1); g_playlistPlayer.SetCurrentPlaylist(playlist); } CGUIMessage msg(GUI_MSG_PLAYLIST_CHANGED, 0, 0); g_windowManager.SendThreadMessage(msg); service->SetStateVariable("NextAVTransportURI", uri); service->SetStateVariable("NextAVTransportURIMetaData", meta); NPT_CHECK_SEVERE(action->SetArgumentsOutFromStateVariable()); return NPT_SUCCESS; } else if (g_windowManager.GetActiveWindow() == WINDOW_SLIDESHOW) { return NPT_FAILURE; } else { return NPT_FAILURE; } #endif return NPT_SUCCESS; }
void CDownloadList::UpdateFile(CPartFile *pPartFile) { if (pPartFile != NULL) { PFIter itFileItem = FindFileItem(pPartFile); // For each file item associated with 'pFile'... if (IsValidIterator(itFileItem)) { CPartFileDLItem *pFileItem = GetFileItem(itFileItem); if (pFileItem != NULL) { AddDirtyFile(pFileItem); } } m_pctlDownloadList->PostRefreshMessage(); } }
/*---------------------------------------------------------------------- | CUPnPRenderer::PlayMedia +---------------------------------------------------------------------*/ NPT_Result CUPnPRenderer::PlayMedia(const NPT_String& uri, const NPT_String& meta, PLT_Action* action) { PLT_Service* service; NPT_CHECK_SEVERE(FindServiceByType("urn:schemas-upnp-org:service:AVTransport:1", service)); { NPT_AutoLock lock(m_state); service->SetStateVariable("TransportState", "TRANSITIONING"); service->SetStateVariable("TransportStatus", "OK"); } CFileItemPtr item = GetFileItem(uri, meta); if (!item) { return NPT_FAILURE; } #if 0 if (item->IsPicture()) { CApplicationMessenger::Get().PictureShow(item->GetPath()); } else { CApplicationMessenger::Get().MediaPlay(*item); } if (g_application.m_pPlayer->IsPlaying() || g_windowManager.GetActiveWindow() == WINDOW_SLIDESHOW) { NPT_AutoLock lock(m_state); service->SetStateVariable("TransportState", "PLAYING"); service->SetStateVariable("TransportStatus", "OK"); service->SetStateVariable("AVTransportURI", uri); service->SetStateVariable("AVTransportURIMetaData", meta); } else { NPT_AutoLock lock(m_state); service->SetStateVariable("TransportState", "STOPPED"); service->SetStateVariable("TransportStatus", "ERROR_OCCURRED"); } service->SetStateVariable("NextAVTransportURI", ""); service->SetStateVariable("NextAVTransportURIMetaData", ""); if (action) { NPT_CHECK_SEVERE(action->SetArgumentsOutFromStateVariable()); } #endif return NPT_SUCCESS; }
/*---------------------------------------------------------------------- | CUPnPRenderer::PlayMedia +---------------------------------------------------------------------*/ NPT_Result CUPnPRenderer::PlayMedia(const NPT_String& uri, const NPT_String& meta, PLT_Action* action) { PLT_Service* service; NPT_CHECK_SEVERE(FindServiceByType("urn:schemas-upnp-org:service:AVTransport:1", service)); { NPT_AutoLock lock(m_state); service->SetStateVariable("TransportState", "TRANSITIONING"); service->SetStateVariable("TransportStatus", "OK"); } CFileItemPtr item = GetFileItem(uri, meta); if (!item) { return NPT_FAILURE; } if (item->IsPicture()) { CApplicationMessenger::GetInstance().PostMsg(TMSG_PICTURE_SHOW, -1, -1, nullptr, item->GetPath()); } else { CFileItemList *l = new CFileItemList; //don't delete, l->Add(std::make_shared<CFileItem>(*item)); CApplicationMessenger::GetInstance().PostMsg(TMSG_MEDIA_PLAY, -1, -1, static_cast<void*>(l)); } // just return success because the play actions are asynchronous NPT_AutoLock lock(m_state); service->SetStateVariable("TransportState", "PLAYING"); service->SetStateVariable("TransportStatus", "OK"); service->SetStateVariable("AVTransportURI", uri); service->SetStateVariable("AVTransportURIMetaData", meta); service->SetStateVariable("NextAVTransportURI", ""); service->SetStateVariable("NextAVTransportURIMetaData", ""); if (action) { NPT_CHECK_SEVERE(action->SetArgumentsOutFromStateVariable()); } return NPT_SUCCESS; }