本文整理汇总了C++中CStdString::TrimLeft方法的典型用法代码示例。如果您正苦于以下问题:C++ CStdString::TrimLeft方法的具体用法?C++ CStdString::TrimLeft怎么用?C++ CStdString::TrimLeft使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CStdString
的用法示例。
在下文中一共展示了CStdString::TrimLeft方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ParseIPFilter
bool ParseIPFilter(CStdString in, std::list<CStdString>* output /*=0*/)
{
bool valid = true;
in.Replace(_T("\n"), _T(" "));
in.Replace(_T("\r"), _T(" "));
in.Replace(_T("\t"), _T(" "));
while (in.Replace(_T(" "), _T(" ")));
in.TrimLeft(_T(" "));
in.TrimRight(_T(" "));
in += _T(" ");
int pos;
while ((pos = in.Find(_T(" "))) != -1)
{
CStdString ip = in.Left(pos);
if (ip == _T(""))
break;
in = in.Mid(pos + 1);
if (ip == _T("*") || IsValidAddressFilter(ip))
{
if (output)
output->push_back(ip);
}
else
valid = false;
}
return valid;
}
示例2: RemoveFromPath
void PathHelper::RemoveFromPath(CStdString sPath)
{
CStdString sFullPath = GetProcessPath();
sFullPath.ToLower();
sPath.ToLower();
if ( sPath.Right(1) == _T("\\") )
{
sPath = sPath.Left(sPath.length() - 1);
}
int nStart = (x64_int_cast)sFullPath.find(sPath);
while (nStart >= 0) // there may be multiple copies
{
int nEnd = nStart + (x64_int_cast)sPath.length() + 1;
sFullPath = sFullPath.Left(nStart) + sFullPath.Right(sFullPath.length() - nEnd );
sFullPath.TrimRight();
sFullPath.TrimLeft();
if (sFullPath.Left(1) == _T(";"))
sFullPath = sFullPath.Mid(1);
sFullPath.Replace(_T(";;"),_T(";"));
nStart = (x64_int_cast)sFullPath.find(sPath);
}
SetProcessPath(sFullPath);
}
示例3: ExtractTimeFromIndex
////////////////////////////////////////////////////////////////////////////////////
// Function: ExtractTimeFromIndex()
// Extracts the time information from the index string index, returning it as a value in
// milliseconds.
// Assumed format is:
// MM:SS:FF where MM is minutes, SS seconds, and FF frames (75 frames in a second)
////////////////////////////////////////////////////////////////////////////////////
int CCueDocument::ExtractTimeFromIndex(const CStdString &index)
{
// Get rid of the index number and any whitespace
CStdString numberTime = index.Mid(5);
numberTime.TrimLeft();
while (!numberTime.IsEmpty())
{
if (!isdigit(numberTime[0]))
break;
numberTime.erase(0, 1);
}
numberTime.TrimLeft();
// split the resulting string
CStdStringArray time;
StringUtils::SplitString(numberTime, ":", time);
if (time.size() != 3)
return -1;
int mins = atoi(time[0].c_str());
int secs = atoi(time[1].c_str());
int frames = atoi(time[2].c_str());
return (mins*60 + secs)*75 + frames;
}
示例4: TranslateSingleString
bool CGUIDialogPluginSettings::TranslateSingleString(const CStdString &strCondition, vector<CStdString> &condVec)
{
CStdString strTest = strCondition;
strTest.ToLower();
strTest.TrimLeft(" ");
strTest.TrimRight(" ");
int pos1 = strTest.Find("(");
int pos2 = strTest.Find(",");
int pos3 = strTest.Find(")");
if (pos1 >= 0 && pos2 > pos1 && pos3 > pos2)
{
condVec.push_back(strTest.Left(pos1));
condVec.push_back(strTest.Mid(pos1 + 1, pos2 - pos1 - 1));
condVec.push_back(strTest.Mid(pos2 + 1, pos3 - pos2 - 1));
return true;
}
return false;
}
示例5: CreateArchivePath
void URIUtils::CreateArchivePath(CStdString& strUrlPath,
const CStdString& strType,
const CStdString& strArchivePath,
const CStdString& strFilePathInArchive,
const CStdString& strPwd)
{
CStdString strBuffer;
strUrlPath = strType+"://";
if( !strPwd.IsEmpty() )
{
strBuffer = strPwd;
CURL::Encode(strBuffer);
strUrlPath += strBuffer;
strUrlPath += "@";
}
strBuffer = strArchivePath;
CURL::Encode(strBuffer);
strUrlPath += strBuffer;
strBuffer = strFilePathInArchive;
strBuffer.Replace('\\', '/');
strBuffer.TrimLeft('/');
strUrlPath += "/";
strUrlPath += strBuffer;
#if 0 // options are not used
strBuffer = strCachePath;
CURL::Encode(strBuffer);
strUrlPath += "?cache=";
strUrlPath += strBuffer;
strBuffer.Format("%i", wOptions);
strUrlPath += "&flags=";
strUrlPath += strBuffer;
#endif
}
示例6: CreateLoader
IMusicInfoTagLoader* CMusicInfoTagLoaderFactory::CreateLoader(const CStdString& strFileName)
{
// dont try to read the tags for streams & shoutcast
CFileItem item(strFileName, false);
if (item.IsInternetStream())
return NULL;
if (item.IsMusicDb())
return new CMusicInfoTagLoaderDatabase();
CStdString strExtension;
URIUtils::GetExtension( strFileName, strExtension);
strExtension.ToLower();
strExtension.TrimLeft('.');
if (strExtension.IsEmpty())
return NULL;
if (strExtension == "aac" ||
strExtension == "ape" || strExtension == "mac" ||
strExtension == "mp3" ||
strExtension == "wma" ||
strExtension == "flac" ||
strExtension == "m4a" || strExtension == "mp4" ||
strExtension == "mpc" || strExtension == "mpp" || strExtension == "mp+" ||
strExtension == "ogg" || strExtension == "oga" || strExtension == "oggstream" ||
#ifdef HAS_MOD_PLAYER
ModPlayer::IsSupportedFormat(strExtension) ||
strExtension == "mod" || strExtension == "nsf" || strExtension == "nsfstream" ||
strExtension == "s3m" || strExtension == "it" || strExtension == "xm" ||
#endif
strExtension == "wv")
{
CTagLoaderTagLib *pTagLoader = new CTagLoaderTagLib();
return (IMusicInfoTagLoader*)pTagLoader;
}
#ifdef HAS_DVD_DRIVE
else if (strExtension == "cdda")
{
CMusicInfoTagLoaderCDDA *pTagLoader = new CMusicInfoTagLoaderCDDA();
return (IMusicInfoTagLoader*)pTagLoader;
}
#endif
else if (strExtension == "shn")
{
CMusicInfoTagLoaderSHN *pTagLoader = new CMusicInfoTagLoaderSHN();
return (IMusicInfoTagLoader*)pTagLoader;
}
else if (strExtension == "wav")
{
CMusicInfoTagLoaderWAV *pTagLoader = new CMusicInfoTagLoaderWAV();
return (IMusicInfoTagLoader*)pTagLoader;
}
else if (strExtension == "spc")
{
CMusicInfoTagLoaderSPC *pTagLoader = new CMusicInfoTagLoaderSPC();
return (IMusicInfoTagLoader*)pTagLoader;
}
else if (strExtension == "ym")
{
CMusicInfoTagLoaderYM *pTagLoader = new CMusicInfoTagLoaderYM();
return (IMusicInfoTagLoader*)pTagLoader;
}
#ifdef HAS_ASAP_CODEC
else if (ASAPCodec::IsSupportedFormat(strExtension) || strExtension == "asapstream")
{
CMusicInfoTagLoaderASAP *pTagLoader = new CMusicInfoTagLoaderASAP();
return (IMusicInfoTagLoader*)pTagLoader;
}
#endif
else if ( TimidityCodec::IsSupportedFormat( strExtension ) )
{
CMusicInfoTagLoaderMidi * pTagLoader = new CMusicInfoTagLoaderMidi();
return (IMusicInfoTagLoader*)pTagLoader;
}
return NULL;
}
示例7: SetOption
void COptions::SetOption(int nOptionID, LPCTSTR value, bool save /*=true*/)
{
CStdString str = value;
Init();
switch (nOptionID)
{
case OPTION_SERVERPORT:
case OPTION_TLSPORTS:
{
std::set<int> portSet;
str.TrimLeft(_T(" ,"));
int pos = str.FindOneOf(_T(" ,"));
while (pos != -1)
{
int port = _ttoi(str.Left(pos));
if (port >= 1 && port <= 65535)
portSet.insert(port);
str = str.Mid(pos + 1);
str.TrimLeft(_T(" ,"));
pos = str.FindOneOf(_T(" ,"));
}
if (str != _T(""))
{
int port = _ttoi(str);
if (port >= 1 && port <= 65535)
portSet.insert(port);
}
str = _T("");
for (std::set<int>::const_iterator iter = portSet.begin(); iter != portSet.end(); iter++)
{
CStdString tmp;
tmp.Format(_T("%d "), *iter);
str += tmp;
}
str.TrimRight(' ');
}
break;
case OPTION_WELCOMEMESSAGE:
{
std::vector<CStdString> msgLines;
int oldpos = 0;
str.Replace(_T("\r\n"), _T("\n"));
int pos = str.Find(_T("\n"));
CStdString line;
while (pos != -1)
{
if (pos)
{
line = str.Mid(oldpos, pos - oldpos);
line = line.Left(CONST_WELCOMEMESSAGE_LINESIZE);
line.TrimRight(_T(" "));
if (msgLines.size() || line != _T(""))
msgLines.push_back(line);
}
oldpos = pos + 1;
pos = str.Find(_T("\n"), oldpos);
}
line = str.Mid(oldpos);
if (line != _T(""))
{
line = line.Left(CONST_WELCOMEMESSAGE_LINESIZE);
msgLines.push_back(line);
}
str = _T("");
for (unsigned int i = 0; i < msgLines.size(); i++)
str += msgLines[i] + _T("\r\n");
str.TrimRight(_T("\r\n"));
if (str == _T(""))
{
str = _T("%v");
str += _T("\r\nwritten by Tim Kosse ([email protected])");
str += _T("\r\nPlease visit https://filezilla-project.org/");
}
}
break;
case OPTION_ADMINIPBINDINGS:
{
CStdString sub;
std::list<CStdString> ipBindList;
for (unsigned int i = 0; i<_tcslen(value); i++)
{
TCHAR cur = value[i];
if ((cur < '0' || cur > '9') && cur != '.' && cur != ':')
{
if (sub == _T("") && cur == '*')
{
ipBindList.clear();
ipBindList.push_back(_T("*"));
break;
}
if (sub != _T(""))
{
if (IsIpAddress(sub))
ipBindList.push_back(sub);
sub = _T("");
//.........这里部分代码省略.........
示例8: parseData
//-------------------------------------------------------------------------------------------------------------------
void Xcddb::parseData(const char *buffer)
{
//writeLog("parseData Start");
char *line;
const char trenner[3] = {'\n', '\r', '\0'};
line = strtok((char*)buffer, trenner);
int line_cnt = 0;
while ((line = strtok(0, trenner)))
{
if (line[0] != '#')
{
if (0 == strncmp(line, "DTITLE", 6))
{
// DTITLE=Modern Talking / Album: Victory (The 11th Album)
unsigned int len = (unsigned int)strlen(line) - 6;
bool found = false;
unsigned int i = 5;
for (;i < len;i++)
{
if ((i + 2) <= len && line[i] == ' ' && line[i + 1] == '/' && line[i + 2] == ' ')
{
// Jep found
found = true;
break;
}
}
if (found)
{
CStdString strLine = (char*)(line + 7);
CStdString strDisk_artist = strLine.Left(i - 7);
CStdString strDisk_title = (char*)(line + i + 3);
// You never know if you really get UTF-8 strings from cddb
if (!g_charsetConverter.isValidUtf8(strDisk_artist))
g_charsetConverter.stringCharsetToUtf8(strDisk_artist, m_strDisk_artist);
else
m_strDisk_artist=strDisk_artist;
// You never know if you really get UTF-8 strings from cddb
if (!g_charsetConverter.isValidUtf8(strDisk_title))
g_charsetConverter.stringCharsetToUtf8(strDisk_title, m_strDisk_title);
else
m_strDisk_title=strDisk_title;
}
else
{
CStdString strDisk_title = (char*)(line + 7);
// You never know if you really get UTF-8 strings from cddb
if (!g_charsetConverter.isValidUtf8(strDisk_title))
g_charsetConverter.stringCharsetToUtf8(strDisk_title, m_strDisk_title);
else
m_strDisk_title=strDisk_title;
}
}
else if (0 == strncmp(line, "DYEAR", 5))
{
CStdString strYear = (char*)(line + 5);
strYear.TrimLeft("= ");
// You never know if you really get UTF-8 strings from cddb
if (!g_charsetConverter.isValidUtf8(strYear))
g_charsetConverter.stringCharsetToUtf8(strYear, m_strYear);
else
m_strYear=strYear;
}
else if (0 == strncmp(line, "DGENRE", 6))
{
CStdString strGenre = (char*)(line + 6);
strGenre.TrimLeft("= ");
// You never know if you really get UTF-8 strings from cddb
if (!g_charsetConverter.isValidUtf8(strGenre))
g_charsetConverter.stringCharsetToUtf8(strGenre, m_strGenre);
else
m_strGenre=strGenre;
}
else if (0 == strncmp(line, "TTITLE", 6))
{
addTitle(line);
}
else if (0 == strncmp(line, "EXTD", 4))
{
CStdString strExtd((char*)(line + 4));
if (m_strYear.IsEmpty())
{
// Extract Year from extended info
// as a fallback
int iPos = strExtd.Find("YEAR:");
if (iPos > -1)
{
CStdString strYear;
strYear = strExtd.Mid(iPos + 6, 4);
// You never know if you really get UTF-8 strings from cddb
if (!g_charsetConverter.isValidUtf8(strYear))
g_charsetConverter.stringCharsetToUtf8(strYear, m_strYear);
else
m_strYear=strYear;
//.........这里部分代码省略.........
示例9: Parse
////////////////////////////////////////////////////////////////////////////////////
// Function: Parse()
// Opens the .cue file for reading, and constructs the track database information
////////////////////////////////////////////////////////////////////////////////////
bool CCueDocument::Parse(const CStdString &strFile)
{
if (!m_file.Open(strFile))
return false;
CStdString strLine;
m_iTotalTracks = -1;
CStdString strCurrentFile = "";
bool bCurrentFileChanged = false;
int time;
// Run through the .CUE file and extract the tracks...
while (true)
{
if (!ReadNextLine(strLine))
break;
if (StringUtils::StartsWith(strLine,"INDEX 01"))
{
if (bCurrentFileChanged)
{
OutputDebugString("Track split over multiple files, unsupported ('" + strFile + "')\n");
return false;
}
// find the end of the number section
time = ExtractTimeFromIndex(strLine);
if (time == -1)
{ // Error!
OutputDebugString("Mangled Time in INDEX 0x tag in CUE file!\n");
return false;
}
if (m_iTotalTracks > 0) // Set the end time of the last track
m_Track[m_iTotalTracks - 1].iEndTime = time;
if (m_iTotalTracks >= 0)
m_Track[m_iTotalTracks].iStartTime = time; // start time of the next track
}
else if (StringUtils::StartsWith(strLine,"TITLE"))
{
if (m_iTotalTracks == -1) // No tracks yet
ExtractQuoteInfo(strLine, m_strAlbum);
else if (!ExtractQuoteInfo(strLine, m_Track[m_iTotalTracks].strTitle))
{
// lets manage tracks titles without quotes
CStdString titleNoQuote = strLine.Mid(5);
titleNoQuote.TrimLeft();
if (!titleNoQuote.IsEmpty())
{
g_charsetConverter.unknownToUTF8(titleNoQuote);
m_Track[m_iTotalTracks].strTitle = titleNoQuote;
}
}
}
else if (StringUtils::StartsWith(strLine,"PERFORMER"))
{
if (m_iTotalTracks == -1) // No tracks yet
ExtractQuoteInfo(strLine, m_strArtist);
else // New Artist for this track
ExtractQuoteInfo(strLine, m_Track[m_iTotalTracks].strArtist);
}
else if (StringUtils::StartsWith(strLine,"TRACK"))
{
int iTrackNumber = ExtractNumericInfo(strLine.Mid(5));
m_iTotalTracks++;
CCueTrack track;
m_Track.push_back(track);
m_Track[m_iTotalTracks].strFile = strCurrentFile;
if (iTrackNumber > 0)
m_Track[m_iTotalTracks].iTrackNumber = iTrackNumber;
else
m_Track[m_iTotalTracks].iTrackNumber = m_iTotalTracks + 1;
bCurrentFileChanged = false;
}
else if (StringUtils::StartsWith(strLine,"REM DISCNUMBER"))
{
int iDiscNumber = ExtractNumericInfo(strLine.Mid(14));
if (iDiscNumber > 0)
m_iDiscNumber = iDiscNumber;
}
else if (StringUtils::StartsWith(strLine,"FILE"))
{
// already a file name? then the time computation will be changed
if(strCurrentFile.size() > 0)
bCurrentFileChanged = true;
ExtractQuoteInfo(strLine, strCurrentFile);
// Resolve absolute paths (if needed).
if (strCurrentFile.length() > 0)
ResolvePath(strCurrentFile, strFile);
}
else if (StringUtils::StartsWith(strLine,"REM DATE"))
//.........这里部分代码省略.........
示例10: fopen
CLinuxTimezone::CLinuxTimezone() : m_IsDST(0)
{
char* line = NULL;
size_t linelen = 0;
int nameonfourthfield = 0;
CStdString s;
vector<CStdString> tokens;
// Load timezones
FILE* fp = fopen("/usr/share/zoneinfo/zone.tab", "r");
if (fp)
{
CStdString countryCode;
CStdString timezoneName;
while (getdelim(&line, &linelen, '\n', fp) > 0)
{
tokens.clear();
s = line;
s.TrimLeft(" \t").TrimRight(" \n");
if (s.length() == 0)
continue;
if (s[0] == '#')
continue;
CUtil::Tokenize(s, tokens, " \t");
if (tokens.size() < 3)
continue;
countryCode = tokens[0];
timezoneName = tokens[2];
if (m_timezonesByCountryCode.count(countryCode) == 0)
{
vector<CStdString> timezones;
timezones.push_back(timezoneName);
m_timezonesByCountryCode[countryCode] = timezones;
}
else
{
vector<CStdString>& timezones = m_timezonesByCountryCode[countryCode];
timezones.push_back(timezoneName);
}
m_countriesByTimezoneName[timezoneName] = countryCode;
}
fclose(fp);
}
if (line)
{
free(line);
line = NULL;
linelen = 0;
}
// Load countries
fp = fopen("/usr/share/zoneinfo/iso3166.tab", "r");
if (!fp)
{
fp = fopen("/usr/share/misc/iso3166", "r");
nameonfourthfield = 1;
}
if (fp)
{
CStdString countryCode;
CStdString countryName;
while (getdelim(&line, &linelen, '\n', fp) > 0)
{
s = line;
s.TrimLeft(" \t").TrimRight(" \n");
if (s.length() == 0)
continue;
if (s[0] == '#')
continue;
// Search for the first non space from the 2nd character and on
int i = 2;
while (s[i] == ' ' || s[i] == '\t') i++;
if (nameonfourthfield)
{
// skip three letter
while (s[i] != ' ' && s[i] != '\t') i++;
while (s[i] == ' ' || s[i] == '\t') i++;
// skip number
while (s[i] != ' ' && s[i] != '\t') i++;
while (s[i] == ' ' || s[i] == '\t') i++;
}
countryCode = s.Left(2);
countryName = s.Mid(i);
m_counties.push_back(countryName);
m_countryByCode[countryCode] = countryName;
//.........这里部分代码省略.........
示例11: LoadPlayList
bool PVRIptvData::LoadPlayList(void)
{
if (m_strM3uUrl.IsEmpty())
{
XBMC->Log(LOG_NOTICE, "Playlist file path is not configured. Channels not loaded.");
return false;
}
CStdString strPlaylistContent;
if (!GetCachedFileContents(M3U_FILE_NAME, m_strM3uUrl, strPlaylistContent))
{
XBMC->Log(LOG_ERROR, "Unable to load playlist file '%s': file is missing or empty.", m_strM3uUrl.c_str());
return false;
}
std::stringstream stream(strPlaylistContent);
/* load channels */
bool bFirst = true;
int iUniqueChannelId = 0;
int iUniqueGroupId = 0;
int iCurrentGroupId = 0;
int iChannelNum = 0;
int iEPGTimeShift = 0;
PVRIptvChannel tmpChannel;
tmpChannel.strTvgId = "";
tmpChannel.strChannelName = "";
tmpChannel.strTvgName = "";
tmpChannel.strTvgLogo = "";
tmpChannel.iTvgShift = 0;
char szLine[1024];
while(stream.getline(szLine, 1024))
{
CStdString strLine = "";
strLine.append(szLine);
strLine.TrimRight(" \t\r\n");
strLine.TrimLeft(" \t");
if (strLine.IsEmpty())
{
continue;
}
if (bFirst)
{
bFirst = false;
if (strLine.Left(3) == "\xEF\xBB\xBF")
{
strLine.Delete(0, 3);
}
if (strLine.Left((int)strlen(M3U_START_MARKER)) == M3U_START_MARKER)
{
double fTvgShift = atof(ReadMarkerValue(strLine, TVG_INFO_SHIFT_MARKER));
iEPGTimeShift = (int) (fTvgShift * 3600.0);
continue;
}
else
{
break;
}
}
if (strLine.Left((int)strlen(M3U_INFO_MARKER)) == M3U_INFO_MARKER)
{
bool bRadio = false;
double fTvgShift = 0;
CStdString strChnlName = "";
CStdString strTvgId = "";
CStdString strTvgName = "";
CStdString strTvgLogo = "";
CStdString strGroupName = "";
CStdString strRadio = "";
// parse line
int iColon = (int)strLine.Find(':');
int iComma = (int)strLine.ReverseFind(',');
if (iColon >= 0 && iComma >= 0 && iComma > iColon)
{
// parse name
iComma++;
strChnlName = strLine.Right((int)strLine.size() - iComma).Trim();
tmpChannel.strChannelName = XBMC->UnknownToUTF8(strChnlName);
// parse info
CStdString strInfoLine = strLine.Mid(++iColon, --iComma - iColon);
strTvgId = ReadMarkerValue(strInfoLine, TVG_INFO_ID_MARKER);
strTvgName = ReadMarkerValue(strInfoLine, TVG_INFO_NAME_MARKER);
strTvgLogo = ReadMarkerValue(strInfoLine, TVG_INFO_LOGO_MARKER);
strGroupName = ReadMarkerValue(strInfoLine, GROUP_NAME_MARKER);
strRadio = ReadMarkerValue(strInfoLine, RADIO_MARKER);
fTvgShift = atof(ReadMarkerValue(strInfoLine, TVG_INFO_SHIFT_MARKER));
if (strTvgId.IsEmpty())
{
char buff[255];
//.........这里部分代码省略.........
示例12: if
CStdString CID3Tag::ParseMP3Genre(const CStdString& str) const
{
m_dll.Load();
CStdString strTemp = str;
set<CStdString> setGenres;
while (!strTemp.IsEmpty())
{
// remove any leading spaces
strTemp.TrimLeft();
if (strTemp.IsEmpty())
break;
// start off looking for (something)
if (strTemp[0] == '(')
{
strTemp.erase(0, 1);
if (strTemp.empty())
break;
// now look for ((something))
if (strTemp[0] == '(')
{
// remove ((something))
int i = strTemp.find_first_of(')');
strTemp.erase(0, i + 2);
}
}
// no parens, so we have a start of a string
// push chars into temp string until valid terminator found
// valid terminators are ) or , or ;
else
{
CStdString t;
size_t i = strTemp.find_first_of("),;");
if (i != std::string::npos)
{
t = strTemp.Left(i);
strTemp.erase(0, i + 1);
} else {
t = strTemp;
strTemp.clear();
}
// remove any leading or trailing white space
// from temp string
t.Trim();
if (!t.length()) continue;
// if the temp string is natural number try to convert it to a genre string
if (StringUtils::IsNaturalNumber(t))
{
id3_ucs4_t* ucs4=m_dll.id3_latin1_ucs4duplicate((id3_latin1_t*)t.c_str());
const id3_ucs4_t* genre=m_dll.id3_genre_name(ucs4);
m_dll.id3_ucs4_free(ucs4);
t=ToStringCharset(genre, ID3_FIELD_TEXTENCODING_ISO_8859_1);
}
// convert RX to Remix as per ID3 V2.3 spec
else if ((t == "RX") || (t == "Rx") || (t == "rX") || (t == "rx"))
{
t = "Remix";
}
// convert CR to Cover as per ID3 V2.3 spec
else if ((t == "CR") || (t == "Cr") || (t == "cR") || (t == "cr"))
{
t = "Cover";
}
// insert genre name in set
setGenres.insert(t);
}
}
// return a " / " seperated string
CStdString strGenre;
set<CStdString>::iterator it;
for (it = setGenres.begin(); it != setGenres.end(); it++)
{
CStdString strTemp = *it;
if (!strGenre.IsEmpty())
strGenre += g_advancedSettings.m_musicItemSeparator;
strGenre += strTemp;
}
return strGenre;
}
示例13: Load
bool CPlayListPLS::Load(const CStdString &strFile)
{
//read it from the file
CStdString strFileName(strFile);
m_strPlayListName = URIUtils::GetFileName(strFileName);
Clear();
bool bShoutCast = false;
if( strFileName.Left(8).Equals("shout://") )
{
strFileName.Delete(0, 8);
strFileName.Insert(0, "http://");
m_strBasePath = "";
bShoutCast = true;
}
else
URIUtils::GetParentPath(strFileName, m_strBasePath);
CFile file;
if (!file.Open(strFileName) )
{
file.Close();
return false;
}
if (file.GetLength() > 1024*1024)
{
CLog::Log(LOGWARNING, "%s - File is larger than 1 MB, most likely not a playlist",__FUNCTION__);
return false;
}
char szLine[4096];
CStdString strLine;
// run through looking for the [playlist] marker.
// if we find another http stream, then load it.
while (1)
{
if ( !file.ReadString(szLine, sizeof(szLine) ) )
{
file.Close();
return size() > 0;
}
strLine = szLine;
strLine.TrimLeft(" \t");
strLine.TrimRight(" \n\r");
if(strLine.Equals(START_PLAYLIST_MARKER))
break;
// if there is something else before playlist marker, this isn't a pls file
if(!strLine.IsEmpty())
return false;
}
bool bFailed = false;
while (file.ReadString(szLine, sizeof(szLine) ) )
{
strLine = szLine;
StringUtils::RemoveCRLF(strLine);
int iPosEqual = strLine.Find("=");
if (iPosEqual > 0)
{
CStdString strLeft = strLine.Left(iPosEqual);
iPosEqual++;
CStdString strValue = strLine.Right(strLine.size() - iPosEqual);
strLeft.ToLower();
while (strLeft[0] == ' ' || strLeft[0] == '\t')
strLeft.erase(0,1);
if (strLeft == "numberofentries")
{
m_vecItems.reserve(atoi(strValue.c_str()));
}
else if (strLeft.Left(4) == "file")
{
vector <int>::size_type idx = atoi(strLeft.c_str() + 4);
if (!Resize(idx))
{
bFailed = true;
break;
}
// Skip self - do not load playlist recursively
if (URIUtils::GetFileName(strValue).Equals(URIUtils::GetFileName(strFileName)))
continue;
if (m_vecItems[idx - 1]->GetLabel().empty())
m_vecItems[idx - 1]->SetLabel(URIUtils::GetFileName(strValue));
CFileItem item(strValue, false);
if (bShoutCast && !item.IsAudio())
strValue.Replace("http:", "shout:");
strValue = URIUtils::SubstitutePath(strValue);
CUtil::GetQualifiedFilename(m_strBasePath, strValue);
g_charsetConverter.unknownToUTF8(strValue);
m_vecItems[idx - 1]->SetPath(strValue);
}
else if (strLeft.Left(5) == "title")
{
//.........这里部分代码省略.........
示例14: GetSettings
void CNetworkInterfaceLinux::GetSettings(NetworkAssignment& assignment, CStdString& ipAddress, CStdString& networkMask, CStdString& defaultGateway, CStdString& essId, CStdString& key, EncMode& encryptionMode)
{
ipAddress = "0.0.0.0";
networkMask = "0.0.0.0";
defaultGateway = "0.0.0.0";
essId = "";
key = "";
encryptionMode = ENC_NONE;
assignment = NETWORK_DISABLED;
#if defined(TARGET_LINUX)
FILE* fp = fopen("/etc/network/interfaces", "r");
if (!fp)
{
// TODO
return;
}
char* line = NULL;
size_t linel = 0;
CStdString s;
bool foundInterface = false;
while (getdelim(&line, &linel, '\n', fp) > 0)
{
vector<CStdString> tokens;
s = line;
s.TrimLeft(" \t").TrimRight(" \n");
// skip comments
if (s.length() == 0 || s.GetAt(0) == '#')
continue;
// look for "iface <interface name> inet"
CUtil::Tokenize(s, tokens, " ");
if (!foundInterface &&
tokens.size() >=3 &&
tokens[0].Equals("iface") &&
tokens[1].Equals(GetName()) &&
tokens[2].Equals("inet"))
{
if (tokens[3].Equals("dhcp"))
{
assignment = NETWORK_DHCP;
foundInterface = true;
}
if (tokens[3].Equals("static"))
{
assignment = NETWORK_STATIC;
foundInterface = true;
}
}
if (foundInterface && tokens.size() == 2)
{
if (tokens[0].Equals("address")) ipAddress = tokens[1];
else if (tokens[0].Equals("netmask")) networkMask = tokens[1];
else if (tokens[0].Equals("gateway")) defaultGateway = tokens[1];
else if (tokens[0].Equals("wireless-essid")) essId = tokens[1];
else if (tokens[0].Equals("wireless-key"))
{
key = tokens[1];
if (key.length() > 2 && key[0] == 's' && key[1] == ':')
key.erase(0, 2);
encryptionMode = ENC_WEP;
}
else if (tokens[0].Equals("wpa-ssid")) essId = tokens[1];
else if (tokens[0].Equals("wpa-proto") && tokens[1].Equals("WPA")) encryptionMode = ENC_WPA;
else if (tokens[0].Equals("wpa-proto") && tokens[1].Equals("WPA2")) encryptionMode = ENC_WPA2;
else if (tokens[0].Equals("wpa-psk")) key = tokens[1];
else if (tokens[0].Equals("auto") || tokens[0].Equals("iface") || tokens[0].Equals("mapping")) break;
}
}
free(line);
// Fallback in case wpa-proto is not set
if (key != "" && encryptionMode == ENC_NONE)
encryptionMode = ENC_WPA;
fclose(fp);
#endif
}
示例15: ParseStations
bool CShoutcastDirectory::ParseStations(TiXmlElement *root, CFileItemList &items, CURL &url)
{
TiXmlElement *element = NULL;
CStdString path;
items.m_idepth = 2; /* station list */
element = root->FirstChildElement("tunein");
if(element == NULL)
{
CLog::Log(LOGWARNING, "%s - No tunein base found", __FUNCTION__);
return false;
}
path = element->Attribute("base");
path.TrimLeft("/");
url.SetFileName(path);
element = root->FirstChildElement("station");
if(element == NULL)
{
CLog::Log(LOGWARNING, "%s - No stations found", __FUNCTION__);
return false;
}
int stations = 0;
while(element != NULL && stations < 1000)
{
CStdString name = element->Attribute("name");
CStdString id = element->Attribute("id");
CStdString bitrate = element->Attribute("br");
CStdString genre = element->Attribute("genre");
CStdString listeners = element->Attribute("lc");
CStdString content = element->Attribute("mt");
CStdString label = name;
url.SetOptions("?id=" + id);
url.GetURL(path);
//printf("%s: %s\n", name.c_str(), path.c_str());
CFileItem* pItem = new CFileItem;
pItem->m_bIsFolder = false;
/* we highjack the music tag for this stuff, they will be used by */
/* viewstates to sort and display proper information */
pItem->GetMusicInfoTag()->SetArtist(listeners);
pItem->GetMusicInfoTag()->SetAlbum(bitrate);
pItem->GetMusicInfoTag()->SetGenre(genre);
/* this is what will be sorted upon */
pItem->GetVideoInfoTag()->m_fRating = (float)atoi(listeners.c_str());
pItem->m_dwSize = atoi(bitrate.c_str());
pItem->SetLabel(label);
/* content type is known before hand, should save later lookup */
/* wonder if we could combine the contentype of the playlist and of the real stream */
pItem->SetContentType("audio/x-scpls");
pItem->m_strPath = path;
items.Add(pItem);
stations++;
element = element->NextSiblingElement("station");
}
return true;
}