本文整理汇总了C++中CStdString::Format方法的典型用法代码示例。如果您正苦于以下问题:C++ CStdString::Format方法的具体用法?C++ CStdString::Format怎么用?C++ CStdString::Format使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CStdString
的用法示例。
在下文中一共展示了CStdString::Format方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnGetThumb
// TODO: Currently no support for "embedded thumb" as there is no easy way to grab it
// without sending a file that has this as it's album to this class
void CGUIWindowMusicInfo::OnGetThumb()
{
CFileItemList items;
// Grab the thumbnail from the web
CStdString thumbFromWeb;
CUtil::AddFileToFolder(g_advancedSettings.m_cachePath, "allmusicThumb", thumbFromWeb);
CScraperUrl url;
if (m_bArtistInfo)
url = m_artist.thumbURL;
else
url = m_album.thumbURL;
for (unsigned int i = 0; i < url.m_url.size(); i++)
{
CStdString strThumb;
strThumb.Format("thumb://Remote%i",i);
CFileItemPtr item(new CFileItem(strThumb, false));
item->SetThumbnailImage("http://this.is/a/thumb/from/the/web");
item->SetIconImage("defaultPicture.png");
item->GetVideoInfoTag()->m_strPictureURL.m_url.push_back(url.m_url[i]);
item->SetLabel(g_localizeStrings.Get(415));
item->SetProperty("labelonthumbload", g_localizeStrings.Get(20015));
// make sure any previously cached thumb is removed
if (CFile::Exists(item->GetCachedPictureThumb()))
CFile::Delete(item->GetCachedPictureThumb());
items.Add(item);
}
// Current thumb
if (CFile::Exists(m_albumItem->GetThumbnailImage()))
{
CFileItemPtr item(new CFileItem("thumb://Current", false));
item->SetThumbnailImage(m_albumItem->GetThumbnailImage());
item->SetLabel(g_localizeStrings.Get(20016));
items.Add(item);
}
// local thumb
CStdString cachedLocalThumb;
CStdString localThumb;
if (m_bArtistInfo)
{
CMusicDatabase database;
database.Open();
CStdString strArtistPath;
database.GetArtistPath(m_artist.idArtist,strArtistPath);
CUtil::AddFileToFolder(strArtistPath,"folder.jpg",localThumb);
}
else
CStdString localThumb = m_albumItem->GetUserMusicThumb();
if (CFile::Exists(localThumb))
{
CUtil::AddFileToFolder(g_advancedSettings.m_cachePath, "localthumb.jpg", cachedLocalThumb);
CPicture pic;
if (pic.DoCreateThumbnail(localThumb, cachedLocalThumb))
{
CFileItemPtr item(new CFileItem("thumb://Local", false));
item->SetThumbnailImage(cachedLocalThumb);
item->SetLabel(g_localizeStrings.Get(20017));
items.Add(item);
}
}
CFileItemPtr item(new CFileItem("thumb://None", false));
if (m_bArtistInfo)
item->SetThumbnailImage("defaultArtistBig.png");
else
item->SetThumbnailImage("defaultAlbumCover.png");
item->SetLabel(g_localizeStrings.Get(20018));
items.Add(item);
CStdString result;
if (!CGUIDialogFileBrowser::ShowAndGetImage(items, g_settings.m_musicSources, g_localizeStrings.Get(1030), result))
return; // user cancelled
if (result == "thumb://Current")
return; // user chose the one they have
// delete the thumbnail if that's what the user wants, else overwrite with the
// new thumbnail
CStdString cachedThumb;
if (m_bArtistInfo)
cachedThumb = m_albumItem->GetCachedArtistThumb();
else
cachedThumb = CUtil::GetCachedAlbumThumb(m_album.strAlbum, m_album.strArtist);
if (result.Left(14).Equals("thumb://Remote"))
{
CStdString strFile;
CFileItem chosen(result, false);
CStdString thumb = chosen.GetCachedPictureThumb();
if (CFile::Exists(thumb))
{
// NOTE: This could fail if the thumbloader was too slow and the user too impatient
CFile::Cache(thumb, cachedThumb);
}
else
//.........这里部分代码省略.........
示例2: OnGetThumb
// TODO: Currently no support for "embedded thumb" as there is no easy way to grab it
// without sending a file that has this as it's album to this class
void CGUIDialogMusicInfo::OnGetThumb()
{
CFileItemList items;
// Current thumb
if (CFile::Exists(m_albumItem->GetArt("thumb")))
{
CFileItemPtr item(new CFileItem("thumb://Current", false));
item->SetArt("thumb", m_albumItem->GetArt("thumb"));
item->SetLabel(g_localizeStrings.Get(20016));
items.Add(item);
}
// Grab the thumbnail(s) from the web
vector<CStdString> thumbs;
if (m_bArtistInfo)
m_artist.thumbURL.GetThumbURLs(thumbs);
else
m_album.thumbURL.GetThumbURLs(thumbs);
for (unsigned int i = 0; i < thumbs.size(); ++i)
{
CStdString strItemPath;
strItemPath.Format("thumb://Remote%i", i);
CFileItemPtr item(new CFileItem(strItemPath, false));
item->SetArt("thumb", thumbs[i]);
item->SetIconImage("DefaultPicture.png");
item->SetLabel(g_localizeStrings.Get(20015));
// TODO: Do we need to clear the cached image?
// CTextureCache::Get().ClearCachedImage(thumb);
items.Add(item);
}
// local thumb
CStdString localThumb;
if (m_bArtistInfo)
{
CMusicDatabase database;
database.Open();
CStdString strArtistPath;
if (database.GetArtistPath(m_artist.idArtist,strArtistPath))
localThumb = URIUtils::AddFileToFolder(strArtistPath, "folder.jpg");
}
else
localThumb = m_albumItem->GetUserMusicThumb();
if (CFile::Exists(localThumb))
{
CFileItemPtr item(new CFileItem("thumb://Local", false));
item->SetArt("thumb", localThumb);
item->SetLabel(g_localizeStrings.Get(20017));
items.Add(item);
}
else
{
CFileItemPtr item(new CFileItem("thumb://None", false));
if (m_bArtistInfo)
item->SetIconImage("DefaultArtist.png");
else
item->SetIconImage("DefaultAlbumCover.png");
item->SetLabel(g_localizeStrings.Get(20018));
items.Add(item);
}
CStdString result;
bool flip=false;
VECSOURCES sources(*CMediaSourceSettings::Get().GetSources("music"));
AddItemPathToFileBrowserSources(sources, *m_albumItem);
g_mediaManager.GetLocalDrives(sources);
if (!CGUIDialogFileBrowser::ShowAndGetImage(items, sources, g_localizeStrings.Get(1030), result, &flip))
return; // user cancelled
if (result == "thumb://Current")
return; // user chose the one they have
CStdString newThumb;
if (result.Left(14) == "thumb://Remote")
{
int number = atoi(result.Mid(14));
newThumb = thumbs[number];
}
else if (result == "thumb://Local")
newThumb = localThumb;
else if (CFile::Exists(result))
newThumb = result;
else // none
newThumb = "-"; // force local thumbs to be ignored
// update thumb in the database
CMusicDatabase db;
if (db.Open())
{
db.SetArtForItem(m_albumItem->GetMusicInfoTag()->GetDatabaseId(), m_albumItem->GetMusicInfoTag()->GetType(), "thumb", newThumb);
db.Close();
}
m_albumItem->SetArt("thumb", newThumb);
m_hasUpdatedThumb = true;
//.........这里部分代码省略.........
示例3: SetInt
void XMLUtils::SetInt(TiXmlNode* pRootNode, const char *strTag, int value)
{
CStdString strValue;
strValue.Format("%i", value);
SetString(pRootNode, strTag, strValue);
}
示例4: GetWithoutUserDetails
CStdString CURL::GetWithoutUserDetails() const
{
CStdString strURL;
if (m_strProtocol.Equals("stack"))
{
CFileItemList items;
CStdString strURL2;
strURL2 = Get();
XFILE::CStackDirectory dir;
dir.GetDirectory(strURL2,items);
vector<CStdString> newItems;
for (int i=0;i<items.Size();++i)
{
CURL url(items[i]->GetPath());
items[i]->SetPath(url.GetWithoutUserDetails());
newItems.push_back(items[i]->GetPath());
}
dir.ConstructStackPath(newItems,strURL);
return strURL;
}
unsigned int sizeneed = m_strProtocol.length()
+ m_strDomain.length()
+ m_strHostName.length()
+ m_strFileName.length()
+ m_strOptions.length()
+ m_strProtocolOptions.length()
+ 10;
strURL.reserve(sizeneed);
if (m_strProtocol == "")
return m_strFileName;
strURL = m_strProtocol;
strURL += "://";
if (m_strHostName != "")
{
if (URIUtils::ProtocolHasParentInHostname(m_strProtocol))
strURL += CURL(m_strHostName).GetWithoutUserDetails();
else
strURL += m_strHostName;
if ( HasPort() )
{
CStdString strPort;
strPort.Format("%i", m_iPort);
strURL += ":";
strURL += strPort;
}
strURL += "/";
}
strURL += m_strFileName;
if( m_strOptions.length() > 0 )
strURL += m_strOptions;
if( m_strProtocolOptions.length() > 0 )
strURL += "|"+m_strProtocolOptions;
return strURL;
}
示例5: Process
//.........这里部分代码省略.........
CLog::Log(LOGINFO, "-->Python script returned the following error<--");
CLog::Log(LOGERROR, "Error Type: %s", PyString_AsString(PyObject_Str(exc_type)));
if (PyObject_Str(exc_value))
CLog::Log(LOGERROR, "Error Contents: %s", PyString_AsString(PyObject_Str(exc_value)));
tracebackModule = PyImport_ImportModule((char*)"traceback");
if (tracebackModule != NULL)
{
PyObject *tbList, *emptyString, *strRetval;
tbList = PyObject_CallMethod(tracebackModule, (char*)"format_exception", (char*)"OOO", exc_type, exc_value == NULL ? Py_None : exc_value, exc_traceback == NULL ? Py_None : exc_traceback);
emptyString = PyString_FromString("");
strRetval = PyObject_CallMethod(emptyString, (char*)"join", (char*)"O", tbList);
CLog::Log(LOGERROR, "%s", PyString_AsString(strRetval));
Py_DECREF(tbList);
Py_DECREF(emptyString);
Py_DECREF(strRetval);
Py_DECREF(tracebackModule);
}
CLog::Log(LOGINFO, "-->End of Python script error report<--");
}
else
{
pystring = NULL;
CLog::Log(LOGINFO, "<unknown exception type>");
}
CGUIDialogKaiToast *pDlgToast = (CGUIDialogKaiToast*)g_windowManager.GetWindow(WINDOW_DIALOG_KAI_TOAST);
if (pDlgToast)
{
CStdString desc;
CStdString path;
CStdString script;
URIUtils::Split(m_source, path, script);
if (script.Equals("default.py"))
{
CStdString path2;
URIUtils::RemoveSlashAtEnd(path);
URIUtils::Split(path, path2, script);
}
desc.Format(g_localizeStrings.Get(2100), script);
pDlgToast->QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(257), desc);
}
}
Py_XDECREF(exc_type);
Py_XDECREF(exc_value); // caller owns all 3
Py_XDECREF(exc_traceback); // already NULL'd out
Py_XDECREF(pystring);
}
PyObject *m = PyImport_AddModule((char*)"xbmc");
if(!m || PyObject_SetAttrString(m, (char*)"abortRequested", PyBool_FromLong(1)))
CLog::Log(LOGERROR, "Scriptresult: failed to set abortRequested");
// make sure all sub threads have finished
for(PyThreadState* s = state->interp->tstate_head, *old = NULL; s;)
{
if(s == state)
{
s = s->next;
continue;
}
if(old != s)
{
CLog::Log(LOGINFO, "Scriptresult: Waiting on thread %"PRIu64, (uint64_t)s->thread_id);
old = s;
}
CPyThreadState pyState;
Sleep(100);
pyState.Restore();
s = state->interp->tstate_head;
}
// pending calls must be cleared out
PyXBMC_ClearPendingCalls(state);
PyThreadState_Swap(NULL);
PyEval_ReleaseLock();
{ CSingleLock lock(m_pExecuter->m_critSection);
m_threadState = NULL;
}
PyEval_AcquireLock();
PyThreadState_Swap(state);
m_pExecuter->DeInitializeInterpreter();
Py_EndInterpreter(state);
PyThreadState_Swap(NULL);
PyEval_ReleaseLock();
}
示例6: GetGuide
bool CMythDirectory::GetGuide(const CStdString& base, CFileItemList &items)
{
cmyth_database_t db = m_session->GetDatabase();
if (!db)
return false;
cmyth_chanlist_t list = m_dll->mysql_get_chanlist(db);
if (!list)
{
CLog::Log(LOGERROR, "%s - Unable to get list of channels: %s", __FUNCTION__, base.c_str());
return false;
}
CURL url(base);
int count = m_dll->chanlist_get_count(list);
for (int i = 0; i < count; i++)
{
cmyth_channel_t channel = m_dll->chanlist_get_item(list, i);
if (channel)
{
if (!m_dll->channel_visible(channel))
{
m_dll->ref_release(channel);
continue;
}
int channum = m_dll->channel_channum(channel); // e.g. 3
CStdString name = GetValue(m_dll->channel_name(channel)); // e.g. TV3
if (channum <= 0)
{
CLog::Log(LOGDEBUG, "%s - Skipping channel number %d as <= 0: %s", __FUNCTION__, channum, name.c_str());
m_dll->ref_release(channel);
continue;
}
CLog::Log(LOGDEBUG, "%s - Adding channel number %d: %s", __FUNCTION__, channum, name.c_str());
CStdString number;
number.Format("%d", channum); // CStdString easier for string manipulation than int.
url.SetFileName("guide/" + number);
CFileItemPtr item(new CFileItem(url.Get(), true));
item->m_strTitle = number;
if (!name.IsEmpty())
item->m_strTitle += " - " + name; // e.g. 3 - TV3
CStdString icon = GetValue(m_dll->channel_icon(channel));
if (!icon.IsEmpty())
{
url.SetFileName("files/channels/" + URIUtils::GetFileName(icon)); // e.g. files/channels/tv3.jpg
item->SetThumbnailImage(url.Get());
}
items.Add(item);
m_dll->ref_release(channel);
}
}
items.AddSortMethod(SORT_METHOD_LABEL, 551 /* Name */, LABEL_MASKS("", "", "%K", ""));
m_dll->ref_release(list);
return true;
}
示例7: GetRecordings
PVR_ERROR PVRClientMythTV::GetRecordings(ADDON_HANDLE handle)
{
if (g_bExtraDebug)
XBMC->Log(LOG_DEBUG, "%s", __FUNCTION__);
m_con.Lock();
m_recordings = m_con.GetRecordedPrograms();
m_con.Unlock();
for (ProgramInfoMap::iterator it = m_recordings.begin(); it != m_recordings.end(); ++it)
{
if (!it->second.IsNull() && IsRecordingVisible(it->second))
{
PVR_RECORDING tag;
memset(&tag, 0, sizeof(PVR_RECORDING));
tag.recordingTime = it->second.StartTime();
tag.iDuration = it->second.Duration();
tag.iPlayCount = it->second.IsWatched() ? 1 : 0;
CStdString id = it->second.StrUID();
CStdString path = it->second.Path();
CStdString title = it->second.Title(true);
PVR_STRCPY(tag.strRecordingId, id);
PVR_STRCPY(tag.strTitle, title);
PVR_STRCPY(tag.strPlot, it->second.Description());
PVR_STRCPY(tag.strChannelName, it->second.ChannelName());
int genre = m_categories.Category(it->second.Category());
tag.iGenreSubType = genre&0x0F;
tag.iGenreType = genre&0xF0;
// Add recording title to directory to group everything according to its name just like MythTV does
CStdString strDirectory;
strDirectory.Format("%s/%s", it->second.RecordingGroup(), it->second.Title(false));
PVR_STRCPY(tag.strDirectory, strDirectory);
// Images
CStdString strIconPath = GetArtWork(FileOps::FileTypeCoverart, title);
if (strIconPath.IsEmpty())
strIconPath = m_fileOps->GetPreviewIconPath(path + ".png");
CStdString strFanartPath = GetArtWork(FileOps::FileTypeFanart, title);
PVR_STRCPY(tag.strIconPath, strIconPath.c_str());
PVR_STRCPY(tag.strThumbnailPath, strIconPath.c_str());
PVR_STRCPY(tag.strFanartPath, strFanartPath.c_str());
// Unimplemented
tag.iLifetime = 0;
tag.iPriority = 0;
PVR_STRCPY(tag.strPlotOutline, "");
PVR_STRCPY(tag.strStreamURL, "");
PVR->TransferRecordingEntry(handle, &tag);
}
}
if (g_bExtraDebug)
XBMC->Log(LOG_DEBUG, "%s - Done", __FUNCTION__);
return PVR_ERROR_NO_ERROR;
}
示例8: Initialize
//.........这里部分代码省略.........
cfgAlloc = 1;
snprintf(cfgFilename, len, "%s/%s", cfgEnvPath, CONFIG_FILE_NAME);
}
}
}
if(!cfgFilename) {
FILE* file = ACE_OS::fopen(CONFIG_FILE_NAME, "r");
if(file)
{
// config.xml exists in the current directory
cfgFilename = (char*)CONFIG_FILE_NAME;
fclose(file);
}
else
{
// config.xml could not be found in the current
// directory, try to find it in system configuration directory
cfgFilename = (char*)ETC_CONFIG_FILE_NAME;
}
}
XMLPlatformUtils::Initialize();
// By default, the DOM document generated by the parser will be free() by the parser.
// If we ever need to free the parser and the document separately, we need to do this:
// DOMNode *doc = parser->getDocument();
// ...
// parser->adoptDocument();
// doc->release();
// ...
// delete parser;
XercesDOMParser *m_parser = new XercesDOMParser;
XmlErrorHandler errhandler;
m_parser->setErrorHandler(&errhandler);
m_parser->parse(cfgFilename);
DOMNode *doc = NULL;
doc = m_parser->getDocument();
// XXX is it okay to free here?
if(cfgAlloc) {
free(cfgFilename);
}
if (doc)
{
DOMNode *firstChild = doc->getFirstChild();
if (firstChild)
{
m_configTopNode = firstChild;
m_config.DeSerializeDom(firstChild);
/*
// Write out config to a file
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(XStr("Core").unicodeForm());
XERCES_CPP_NAMESPACE::DOMDocument* myDoc;
myDoc = impl->createDocument(
0, // root element namespace URI.
XStr("root").unicodeForm(), // root element name
0); // document type object (DTD).
m_config.SerializeDom(myDoc);
CStdString toto = DomSerializer::DomNodeToString(myDoc);
FILE* file = fopen("zzz.xml", "w");
fwrite((PCSTR)toto,1,toto.GetLength(),file);
fclose(file);
*/
}
else
{
LOG4CXX_ERROR(LOG.configLog, CStdString("Could not parse config file:") + CONFIG_FILE_NAME);
failed = true;
}
}
else
{
LOG4CXX_WARN(LOG.configLog, CStdString("Could not find config file:") + CONFIG_FILE_NAME);
}
}
catch (const CStdString& e)
{
LOG4CXX_ERROR(LOG.configLog, e);
failed = true;
}
catch(const XMLException& e)
{
LOG4CXX_ERROR(LOG.configLog, e.getMessage());
failed = true;
}
catch(const SAXParseException& e)
{
CStdString logMsg;
logMsg.Format("config.xml error at line:%d, column:%d. (Use xmllint or xml editor to check the configuration)", e.getLineNumber(), e.getColumnNumber());
LOG4CXX_ERROR(LOG.configLog, logMsg);
failed = true;
}
if (failed)
{
exit(0);
}
}
示例9: Update
void CGUIWindowMusicInfo::Update()
{
if (m_bArtistInfo)
{
SetLabel(CONTROL_ARTIST, m_artist.strArtist );
SetLabel(CONTROL_GENRE, m_artist.strGenre);
SetLabel(CONTROL_MOODS, m_artist.strMoods);
SetLabel(CONTROL_STYLES, m_artist.strStyles );
if (m_bViewReview)
{
SET_CONTROL_VISIBLE(CONTROL_TEXTAREA);
SET_CONTROL_HIDDEN(CONTROL_LIST);
SetLabel(CONTROL_TEXTAREA, m_artist.strBiography);
SET_CONTROL_LABEL(CONTROL_BTN_TRACKS, 21888);
}
else
{
SET_CONTROL_VISIBLE(CONTROL_LIST);
if (GetControl(CONTROL_LIST))
{
SET_CONTROL_HIDDEN(CONTROL_TEXTAREA);
CGUIMessage message(GUI_MSG_LABEL_BIND, GetID(), CONTROL_LIST, 0, 0, m_albumSongs);
OnMessage(message);
}
else
CLog::Log(LOGERROR, "Out of date skin - needs list with id %i", CONTROL_LIST);
SET_CONTROL_LABEL(CONTROL_BTN_TRACKS, 21887);
}
}
else
{
SetLabel(CONTROL_ALBUM, m_album.strAlbum );
SetLabel(CONTROL_ARTIST, m_album.strArtist );
CStdString date; date.Format("%d", m_album.iYear);
SetLabel(CONTROL_DATE, date );
CStdString strRating;
if (m_album.iRating > 0)
strRating.Format("%i/9", m_album.iRating);
SetLabel(CONTROL_RATING, strRating );
SetLabel(CONTROL_GENRE, m_album.strGenre);
SetLabel(CONTROL_MOODS, m_album.strMoods);
SetLabel(CONTROL_STYLES, m_album.strStyles );
if (m_bViewReview)
{
SET_CONTROL_VISIBLE(CONTROL_TEXTAREA);
SET_CONTROL_HIDDEN(CONTROL_LIST);
SetLabel(CONTROL_TEXTAREA, m_album.strReview);
SET_CONTROL_LABEL(CONTROL_BTN_TRACKS, 182);
}
else
{
SET_CONTROL_VISIBLE(CONTROL_LIST);
if (GetControl(CONTROL_LIST))
{
SET_CONTROL_HIDDEN(CONTROL_TEXTAREA);
CGUIMessage message(GUI_MSG_LABEL_BIND, GetID(), CONTROL_LIST, 0, 0, m_albumSongs);
OnMessage(message);
}
else
CLog::Log(LOGERROR, "Out of date skin - needs list with id %i", CONTROL_LIST);
SET_CONTROL_LABEL(CONTROL_BTN_TRACKS, 183);
}
}
// update the thumbnail
const CGUIControl* pControl = GetControl(CONTROL_IMAGE);
if (pControl)
{
CGUIImage* pImageControl = (CGUIImage*)pControl;
pImageControl->FreeResources();
pImageControl->SetFileName(m_albumItem->GetThumbnailImage());
}
// disable the GetThumb button if the user isn't allowed it
CONTROL_ENABLE_ON_CONDITION(CONTROL_BTN_GET_THUMB, g_settings.m_vecProfiles[g_settings.m_iLastLoadedProfileIndex].canWriteDatabases() || g_passwordManager.bMasterUser);
if (!m_album.strArtist.IsEmpty() && CLastFmManager::GetInstance()->IsLastFmEnabled())
{
SET_CONTROL_VISIBLE(CONTROL_BTN_LASTFM);
}
else
{
SET_CONTROL_HIDDEN(CONTROL_BTN_LASTFM);
}
}
示例10: ChangeStation
bool CLastFmManager::ChangeStation(const CURL& stationUrl)
{
unsigned int start = CTimeUtils::GetTimeMS();
InitProgressDialog(stationUrl.Get());
StopRadio(false);
if (!RadioHandShake())
{
CloseProgressDialog();
CGUIDialogOK::ShowAndGetInput(15200, 15206, 0, 0);
return false;
}
UpdateProgressDialog(15252); // Selecting station...
CFileCurl http;
CStdString url;
CStdString html;
url.Format("http://" + m_RadioBaseUrl + m_RadioBasePath + "/adjust.php?session=%s&url=%s&debug=%i", m_RadioSession, stationUrl.Get().c_str(), 0);
if (!http.Get(url, html))
{
CLog::Log(LOGERROR, "Connect to Last.fm to change station failed.");
CloseProgressDialog();
return false;
}
//CLog::DebugLog("ChangeStation: %s", html.c_str());
CStdString strErrorCode;
Parameter("error", html, strErrorCode);
if (strErrorCode != "")
{
CLog::Log(LOGERROR, "Last.fm returned an error (%s) response for change station request.", strErrorCode.c_str());
CloseProgressDialog();
return false;
}
UpdateProgressDialog(261); //Waiting for start....
g_playlistPlayer.ClearPlaylist(PLAYLIST_MUSIC);
RequestRadioTracks();
CacheTrackThumb(XBMC_LASTFM_MINTRACKS);
AddToPlaylist(XBMC_LASTFM_MINTRACKS);
Create(); //start thread
SetEvent(m_hWorkerEvent); //kickstart the thread
CSingleLock lock(m_lockPlaylist);
CPlayList& playlist = g_playlistPlayer.GetPlaylist(PLAYLIST_MUSIC);
if ((int)playlist.size())
{
g_application.m_strPlayListFile = stationUrl.Get(); //needed to highlight the playing item
g_playlistPlayer.SetCurrentPlaylist(PLAYLIST_MUSIC);
g_playlistPlayer.Play(0);
CLog::Log(LOGDEBUG, "%s: Done (time: %i ms)", __FUNCTION__, (int)(CTimeUtils::GetTimeMS() - start));
CloseProgressDialog();
return true;
}
CloseProgressDialog();
return false;
}
示例11: RequestRadioTracks
bool CLastFmManager::RequestRadioTracks()
{
unsigned int start = CTimeUtils::GetTimeMS();
CStdString url;
CStdString html;
url.Format("http://" + m_RadioBaseUrl + m_RadioBasePath + "/xspf.php?sk=%s&discovery=0&desktop=", m_RadioSession);
{
CFileCurl http;
if (!http.Get(url, html))
{
m_RadioSession.empty();
CLog::Log(LOGERROR, "LastFmManager: Connect to Last.fm to request tracks failed.");
return false;
}
}
//CLog::DebugLog("RequestRadioTracks: %s", html.c_str());
//parse playlist
TiXmlDocument xmlDoc;
xmlDoc.Parse(html);
if (xmlDoc.Error())
{
m_RadioSession.empty();
CLog::Log(LOGERROR, "LastFmManager: Unable to parse tracklist Error: %s", xmlDoc.ErrorDesc());
return false;
}
TiXmlElement* pRootElement = xmlDoc.RootElement();
if (!pRootElement )
{
CLog::Log(LOGWARNING, "LastFmManager: No more tracks received");
m_RadioSession.empty();
return false;
}
TiXmlElement* pBodyElement = pRootElement->FirstChildElement("trackList");
if (!pBodyElement )
{
CLog::Log(LOGWARNING, "LastFmManager: No more tracks received, no tracklist");
m_RadioSession.empty();
return false;
}
TiXmlElement* pTrackElement = pBodyElement->FirstChildElement("track");
if (!pTrackElement)
{
CLog::Log(LOGWARNING, "LastFmManager: No more tracks received, empty tracklist");
m_RadioSession.empty();
return false;
}
while (pTrackElement)
{
CFileItemPtr newItem(new CFileItem);
TiXmlElement* pElement = pTrackElement->FirstChildElement("location");
if (pElement)
{
TiXmlNode* child = pElement->FirstChild();
if (child)
{
CStdString url = child->Value();
url.Replace("http:", "lastfm:");
newItem->m_strPath = url;
}
}
pElement = pTrackElement->FirstChildElement("title");
if (pElement)
{
TiXmlNode* child = pElement->FirstChild();
if (child)
{
newItem->SetLabel(child->Value());
newItem->GetMusicInfoTag()->SetTitle(child->Value());
}
}
pElement = pTrackElement->FirstChildElement("creator");
if (pElement)
{
TiXmlNode* child = pElement->FirstChild();
if (child)
{
newItem->GetMusicInfoTag()->SetArtist(child->Value());
}
}
pElement = pTrackElement->FirstChildElement("album");
if (pElement)
{
TiXmlNode* child = pElement->FirstChild();
if (child)
{
newItem->GetMusicInfoTag()->SetAlbum(child->Value());
}
}
pElement = pTrackElement->FirstChildElement("duration");
if (pElement)
{
TiXmlNode* child = pElement->FirstChild();
//.........这里部分代码省略.........
示例12: SetHex
void XMLUtils::SetHex(TiXmlNode* pRootNode, const char *strTag, uint32_t value)
{
CStdString strValue;
strValue.Format("%x", value);
SetString(pRootNode, strTag, strValue);
}
示例13: FilterOpen
int CDVDVideoCodecFFmpeg::FilterOpen(const CStdString& filters, bool scale)
{
int result;
AVBufferSinkParams *buffersink_params;
if (m_pFilterGraph)
FilterClose();
if (filters.IsEmpty() && !scale)
return 0;
if (m_pHardware)
{
CLog::Log(LOGWARNING, "CDVDVideoCodecFFmpeg::FilterOpen - skipped opening filters on hardware decode");
return 0;
}
if (!(m_pFilterGraph = m_dllAvFilter.avfilter_graph_alloc()))
{
CLog::Log(LOGERROR, "CDVDVideoCodecFFmpeg::FilterOpen - unable to alloc filter graph");
return -1;
}
AVFilter* srcFilter = m_dllAvFilter.avfilter_get_by_name("buffer");
AVFilter* outFilter = m_dllAvFilter.avfilter_get_by_name("buffersink"); // should be last filter in the graph for now
CStdString args;
args.Format("%d:%d:%d:%d:%d:%d:%d",
m_pCodecContext->width,
m_pCodecContext->height,
m_pCodecContext->pix_fmt,
m_pCodecContext->time_base.num,
m_pCodecContext->time_base.den,
m_pCodecContext->sample_aspect_ratio.num,
m_pCodecContext->sample_aspect_ratio.den);
if ((result = m_dllAvFilter.avfilter_graph_create_filter(&m_pFilterIn, srcFilter, "src", args, NULL, m_pFilterGraph)) < 0)
{
CLog::Log(LOGERROR, "CDVDVideoCodecFFmpeg::FilterOpen - avfilter_graph_create_filter: src");
return result;
}
buffersink_params = m_dllAvFilter.av_buffersink_params_alloc();
buffersink_params->pixel_fmts = &m_formats[0];
#ifdef FF_API_OLD_VSINK_API
if ((result = m_dllAvFilter.avfilter_graph_create_filter(&m_pFilterOut, outFilter, "out", NULL, (void*)buffersink_params->pixel_fmts, m_pFilterGraph)) < 0)
#else
if ((result = m_dllAvFilter.avfilter_graph_create_filter(&m_pFilterOut, outFilter, "out", NULL, buffersink_params, m_pFilterGraph)) < 0)
#endif
{
m_dllAvUtil.av_freep(&buffersink_params);
CLog::Log(LOGERROR, "CDVDVideoCodecFFmpeg::FilterOpen - avfilter_graph_create_filter: out");
return result;
}
m_dllAvUtil.av_freep(&buffersink_params);
if (!filters.empty())
{
AVFilterInOut* outputs = m_dllAvFilter.avfilter_inout_alloc();
AVFilterInOut* inputs = m_dllAvFilter.avfilter_inout_alloc();
outputs->name = m_dllAvUtil.av_strdup("in");
outputs->filter_ctx = m_pFilterIn;
outputs->pad_idx = 0;
outputs->next = NULL;
inputs->name = m_dllAvUtil.av_strdup("out");
inputs->filter_ctx = m_pFilterOut;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((result = m_dllAvFilter.avfilter_graph_parse(m_pFilterGraph, (const char*)m_filters.c_str(), &inputs, &outputs, NULL)) < 0)
{
CLog::Log(LOGERROR, "CDVDVideoCodecFFmpeg::FilterOpen - avfilter_graph_parse");
return result;
}
m_dllAvFilter.avfilter_inout_free(&outputs);
m_dllAvFilter.avfilter_inout_free(&inputs);
}
else
{
if ((result = m_dllAvFilter.avfilter_link(m_pFilterIn, 0, m_pFilterOut, 0)) < 0)
{
CLog::Log(LOGERROR, "CDVDVideoCodecFFmpeg::FilterOpen - avfilter_link");
return result;
}
}
if ((result = m_dllAvFilter.avfilter_graph_config(m_pFilterGraph, NULL)) < 0)
{
CLog::Log(LOGERROR, "CDVDVideoCodecFFmpeg::FilterOpen - avfilter_graph_config");
return result;
}
return result;
}
示例14: AddAudioStreams
void CGUIDialogAudioSubtitleSettings::AddAudioStreams(unsigned int id)
{
SettingInfo setting;
setting.id = id;
setting.name = g_localizeStrings.Get(460);
setting.type = SettingInfo::SPIN;
setting.min = 0;
setting.data = &m_audioStream;
// get the number of audio strams for the current movie
setting.max = (float)g_application.m_pPlayer->GetAudioStreamCount() - 1;
m_audioStream = g_application.m_pPlayer->GetAudioStream();
if( m_audioStream < 0 ) m_audioStream = 0;
// check if we have a single, stereo stream, and if so, allow us to split into
// left, right or both
if (!setting.max)
{
CStdString strAudioInfo;
g_application.m_pPlayer->GetAudioInfo(strAudioInfo);
int iNumChannels = atoi(strAudioInfo.Right(strAudioInfo.size() - strAudioInfo.Find("chns:") - 5).c_str());
CStdString strAudioCodec = strAudioInfo.Mid(7, strAudioInfo.Find(") VBR") - 5);
bool bDTS = strstr(strAudioCodec.c_str(), "DTS") != 0;
bool bAC3 = strstr(strAudioCodec.c_str(), "AC3") != 0;
if (iNumChannels == 2 && !(bDTS || bAC3))
{ // ok, enable these options
/* if (g_stSettings.m_currentVideoSettings.m_AudioStream == -1)
{ // default to stereo stream
g_stSettings.m_currentVideoSettings.m_AudioStream = 0;
}*/
setting.max = 2;
for (int i = 0; i <= setting.max; i++)
setting.entry.push_back(g_localizeStrings.Get(13320 + i));
m_audioStream = -g_stSettings.m_currentVideoSettings.m_AudioStream - 1;
m_settings.push_back(setting);
return;
}
}
// cycle through each audio stream and add it to our list control
for (int i = 0; i <= setting.max; ++i)
{
CStdString strItem;
CStdString strName;
g_application.m_pPlayer->GetAudioStreamName(i, strName);
if (strName.length() == 0)
strName = "Unnamed";
strItem.Format("%s (%i/%i)", strName.c_str(), i + 1, (int)setting.max + 1);
setting.entry.push_back(strItem);
}
if( setting.max < 0 )
{
setting.max = 0;
setting.entry.push_back(g_localizeStrings.Get(231).c_str());
}
m_settings.push_back(setting);
}
示例15: GetLabel
bool CVideoDatabaseDirectory::GetLabel(const CStdString& strDirectory, CStdString& strLabel)
{
strLabel = "";
CStdString path = CLegacyPathTranslation::TranslateVideoDbPath(strDirectory);
auto_ptr<CDirectoryNode> pNode(CDirectoryNode::ParseURL(path));
if (!pNode.get() || path.IsEmpty())
return false;
// first see if there's any filter criteria
CQueryParams params;
CDirectoryNode::GetDatabaseInfo(path, params);
CVideoDatabase videodatabase;
if (!videodatabase.Open())
return false;
// get genre
if (params.GetGenreId() != -1)
strLabel += videodatabase.GetGenreById(params.GetGenreId());
// get country
if (params.GetCountryId() != -1)
strLabel += videodatabase.GetCountryById(params.GetCountryId());
// get set
if (params.GetSetId() != -1)
strLabel += videodatabase.GetSetById(params.GetSetId());
// get tag
if (params.GetTagId() != -1)
strLabel += videodatabase.GetTagById(params.GetTagId());
// get year
if (params.GetYear() != -1)
{
CStdString strTemp;
strTemp.Format("%i",params.GetYear());
if (!strLabel.IsEmpty())
strLabel += " / ";
strLabel += strTemp;
}
if (strLabel.IsEmpty())
{
switch (pNode->GetChildType())
{
case NODE_TYPE_TITLE_MOVIES:
case NODE_TYPE_TITLE_TVSHOWS:
case NODE_TYPE_TITLE_MUSICVIDEOS:
strLabel = g_localizeStrings.Get(369); break;
case NODE_TYPE_ACTOR: // Actor
strLabel = g_localizeStrings.Get(344); break;
case NODE_TYPE_GENRE: // Genres
strLabel = g_localizeStrings.Get(135); break;
case NODE_TYPE_COUNTRY: // Countries
strLabel = g_localizeStrings.Get(20451); break;
case NODE_TYPE_YEAR: // Year
strLabel = g_localizeStrings.Get(562); break;
case NODE_TYPE_DIRECTOR: // Director
strLabel = g_localizeStrings.Get(20348); break;
case NODE_TYPE_SETS: // Sets
strLabel = g_localizeStrings.Get(20434); break;
case NODE_TYPE_TAGS: // Tags
strLabel = g_localizeStrings.Get(20459); break;
case NODE_TYPE_MOVIES_OVERVIEW: // Movies
strLabel = g_localizeStrings.Get(342); break;
case NODE_TYPE_TVSHOWS_OVERVIEW: // TV Shows
strLabel = g_localizeStrings.Get(20343); break;
case NODE_TYPE_RECENTLY_ADDED_MOVIES: // Recently Added Movies
strLabel = g_localizeStrings.Get(20386); break;
case NODE_TYPE_RECENTLY_ADDED_EPISODES: // Recently Added Episodes
strLabel = g_localizeStrings.Get(20387); break;
case NODE_TYPE_STUDIO: // Studios
strLabel = g_localizeStrings.Get(20388); break;
case NODE_TYPE_MUSICVIDEOS_OVERVIEW: // Music Videos
strLabel = g_localizeStrings.Get(20389); break;
case NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS: // Recently Added Music Videos
strLabel = g_localizeStrings.Get(20390); break;
case NODE_TYPE_SEASONS: // Seasons
strLabel = g_localizeStrings.Get(33054); break;
case NODE_TYPE_EPISODES: // Episodes
strLabel = g_localizeStrings.Get(20360); break;
default:
CLog::Log(LOGWARNING, "%s - Unknown nodetype requested %d", __FUNCTION__, pNode->GetChildType());
return false;
}
}
return true;
}