void ILCD::StringToLCDCharSet(CStdString& strText) { //0 = HD44780, 1=KS0073 unsigned int iLCDContr = 0; //the timeline is using blocks //a block is used at address 0xA0, smallBlocks at address 0xAC-0xAF unsigned char LCD[2][256] = { { //HD44780 charset ROM code A00 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0xa4, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0xb0, 0x20, 0x20, 0x20, 0x2c, 0x20, 0x22, 0x20, 0x20, 0x20, 0x5e, 0x20, 0x53, 0x3c, 0x20, 0x20, 0x5a, 0x20, 0x20, 0x27, 0x27, 0x22, 0x22, 0xa5, 0xb0, 0xb0, 0xb0, 0x20, 0x73, 0x3e, 0x20, 0x20, 0x7a, 0x59, 0xff, 0x21, 0x20, 0x20, 0x20, 0x5c, 0x7c, 0x20, 0x22, 0x20, 0x20, 0xff, 0x0E, 0x0A, 0x09, 0x08, // Custom characters 0xdf, 0x20, 0x20, 0x20, 0x27, 0xe4, 0x20, 0xa5, 0x20, 0x20, 0xdf, 0x3e, 0x20, 0x20, 0x20, 0x3f, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x20, 0x43, 0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x44, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x78, 0x30, 0x55, 0x55, 0x55, 0x55, 0x59, 0x20, 0xe2, 0x61, 0x61, 0x61, 0x61, 0xe1, 0x61, 0x20, 0x63, 0x65, 0x65, 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, 0x6f, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0xfd, 0x6f, 0x75, 0x75, 0xfb, 0xf5, 0x79, 0x20, 0x79 }, { //KS0073 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0xa2, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0xa0, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0xfa, 0xfb, 0xfc, 0x1d, 0xc4, 0x27, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0xfd, 0xfe, 0xff, 0xce, 0x20, 0x20, 0x20, 0x2c, 0xd5, 0x22, 0x20, 0x20, 0x20, 0x1d, 0x20, 0xf3, 0x3c, 0x20, 0x20, 0xf4, 0x20, 0x20, 0x27, 0x27, 0x22, 0x22, 0xdd, 0x2d, 0x2d, 0xce, 0x20, 0xf8, 0x3e, 0x20, 0x20, 0xf9, 0x59, 0x1f, 0x40, 0xb1, 0xa1, 0x24, 0xa3, 0xfe, 0x5f, 0x20, 0x20, 0x20, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, // Custom characters 0x80, 0x8c, 0x82, 0x83, 0x27, 0x8f, 0x20, 0xdd, 0x20, 0x81, 0x80, 0x15, 0x8b, 0x8a, 0xbe, 0x60, 0xae, 0xe2, 0xae, 0xae, 0x5b, 0xae, 0xbc, 0xa9, 0xc5, 0xbf, 0xc6, 0x45, 0xcc, 0xe3, 0xcc, 0x49, 0x44, 0x5d, 0x4f, 0xe0, 0xec, 0x4f, 0x5c, 0x78, 0xab, 0xee, 0xe5, 0xee, 0x5e, 0xe6, 0x20, 0xbe, 0x7f, 0xe7, 0xaf, 0xaf, 0x7b, 0xaf, 0xbd, 0xc8, 0xa4, 0xa5, 0xc7, 0x65, 0xa7, 0xe8, 0x69, 0x69, 0x6f, 0x7d, 0xa8, 0xe9, 0xed, 0x6f, 0x7c, 0x25, 0xac, 0xa6, 0xea, 0xef, 0x7e, 0xeb, 0x70, 0x79 } }; unsigned char cLCD; int iSize = (int)strText.size(); for (int i = 0; i < iSize; ++i) { cLCD = strText.at(i); cLCD = LCD[iLCDContr][cLCD]; strText.SetAt(i, cLCD); } }
std::string URIUtils::resolvePath(const std::string &path) { if (path.empty()) return path; size_t posSlash = path.find('/'); size_t posBackslash = path.find('\\'); string delim = posSlash < posBackslash ? "/" : "\\"; vector<string> parts = StringUtils::Split(path, delim); vector<string> realParts; for (vector<string>::const_iterator part = parts.begin(); part != parts.end(); ++part) { if (part->empty() || part->compare(".") == 0) continue; // go one level back up if (part->compare("..") == 0) { if (!realParts.empty()) realParts.pop_back(); continue; } realParts.push_back(*part); } CStdString realPath; // re-add any / or \ at the beginning for (std::string::const_iterator itPath = path.begin(); itPath != path.end(); ++itPath) { if (*itPath != delim.at(0)) break; realPath += delim; } // put together the path realPath += StringUtils::Join(realParts, delim); // re-add any / or \ at the end if (path.at(path.size() - 1) == delim.at(0) && realPath.at(realPath.size() - 1) != delim.at(0)) realPath += delim; return realPath; }
bool CMediaSourceSettings::GetSource(const std::string &category, const TiXmlNode *source, CMediaSource &share) { const TiXmlNode *pNodeName = source->FirstChild("name"); string strName; if (pNodeName && pNodeName->FirstChild()) strName = pNodeName->FirstChild()->ValueStr(); // get multiple paths vector<string> vecPaths; const TiXmlElement *pPathName = source->FirstChildElement("path"); while (pPathName != NULL) { if (pPathName->FirstChild()) { CStdString strPath = pPathName->FirstChild()->ValueStr(); // make sure there are no virtualpaths or stack paths defined in sources.xml if (!URIUtils::IsStack(strPath)) { // translate special tags if (!strPath.empty() && strPath.at(0) == '$') strPath = CUtil::TranslateSpecialSource(strPath); // need to check path validity again as CUtil::TranslateSpecialSource() may have failed if (!strPath.empty()) { URIUtils::AddSlashAtEnd(strPath); vecPaths.push_back(strPath); } } else CLog::Log(LOGERROR, "CMediaSourceSettings: invalid path type (%s) in source", strPath.c_str()); } pPathName = pPathName->NextSiblingElement("path"); } const TiXmlNode *pLockMode = source->FirstChild("lockmode"); const TiXmlNode *pLockCode = source->FirstChild("lockcode"); const TiXmlNode *pBadPwdCount = source->FirstChild("badpwdcount"); const TiXmlNode *pThumbnailNode = source->FirstChild("thumbnail"); if (strName.empty() || vecPaths.empty()) return false; vector<CStdString> verifiedPaths; // disallowed for files, or theres only a single path in the vector if (StringUtils::EqualsNoCase(category, "files") || vecPaths.size() == 1) verifiedPaths.push_back(vecPaths[0]); // multiple paths? else { // validate the paths for (vector<string>::const_iterator path = vecPaths.begin(); path != vecPaths.end(); ++path) { CURL url(*path); string protocol = url.GetProtocol(); bool bIsInvalid = false; // for my programs if (StringUtils::EqualsNoCase(category, "programs") || StringUtils::EqualsNoCase(category, "myprograms")) { // only allow HD and plugins if (url.IsLocal() || StringUtils::EqualsNoCase(protocol, "plugin")) verifiedPaths.push_back(*path); else bIsInvalid = true; } // for others allow everything (if the user does something silly, we can't stop them) else verifiedPaths.push_back(*path); // error message if (bIsInvalid) CLog::Log(LOGERROR,"CMediaSourceSettings: invalid path type (%s) for multipath source", path->c_str()); } // no valid paths? skip to next source if (verifiedPaths.empty()) { CLog::Log(LOGERROR,"CMediaSourceSettings: missing or invalid <name> and/or <path> in source"); return false; } } share.FromNameAndPaths(category, strName, verifiedPaths); share.m_iBadPwdCount = 0; if (pLockMode) { share.m_iLockMode = (LockType)strtol(pLockMode->FirstChild()->Value(), NULL, 10); share.m_iHasLock = 2; } if (pLockCode && pLockCode->FirstChild()) share.m_strLockCode = pLockCode->FirstChild()->Value(); if (pBadPwdCount && pBadPwdCount->FirstChild()) share.m_iBadPwdCount = (int)strtol(pBadPwdCount->FirstChild()->Value(), NULL, 10); if (pThumbnailNode && pThumbnailNode->FirstChild()) share.m_strThumbnailImage = pThumbnailNode->FirstChild()->Value(); XMLUtils::GetBoolean(source, "allowsharing", share.m_allowSharing); return true; }
bool GetDirectoryFromTxtRecords(CZeroconfBrowser::ZeroconfService zeroconf_service, CURL& url, CFileItemList &items) { bool ret = false; //get the txt-records from this service CZeroconfBrowser::ZeroconfService::tTxtRecordMap txtRecords=zeroconf_service.GetTxtRecords(); //if we have some records if(!txtRecords.empty()) { CStdString path; CStdString username; CStdString password; //search for a path key entry CZeroconfBrowser::ZeroconfService::tTxtRecordMap::iterator it = txtRecords.find(TXT_RECORD_PATH_KEY); //if we found the key - be sure there is a value there if( it != txtRecords.end() && !it->second.empty() ) { //from now on we treat the value as a path - everything else would mean //a missconfigured zeroconf server. path=it->second; } //search for a username key entry it = txtRecords.find(TXT_RECORD_USERNAME_KEY); //if we found the key - be sure there is a value there if( it != txtRecords.end() && !it->second.empty() ) { username=it->second; url.SetUserName(username); } //search for a password key entry it = txtRecords.find(TXT_RECORD_PASSWORD_KEY); //if we found the key - be sure there is a value there if( it != txtRecords.end() && !it->second.empty() ) { password=it->second; url.SetPassword(password); } //if we got a path - add a item - else at least we maybe have set username and password to theurl if( !path.empty()) { CFileItemPtr item(new CFileItem("", true)); CStdString urlStr(url.Get()); //if path has a leading slash (sure it should have one) if( path.at(0) == '/' ) { URIUtils::RemoveSlashAtEnd(urlStr);//we don't need the slash at and of url then } else//path doesn't start with slash - {//this is some kind of missconfiguration - we fix it by adding a slash to the url URIUtils::AddSlashAtEnd(urlStr); } //add slash at end of path since it has to be a folder URIUtils::AddSlashAtEnd(path); //this is the full path includeing remote stuff (e.x. nfs://ip/path item->SetPath(urlStr + path); //remove the slash at the end of the path or GetFileName will not give the last dir URIUtils::RemoveSlashAtEnd(path); //set the label to the last directory in path if( !URIUtils::GetFileName(path).empty() ) item->SetLabel(URIUtils::GetFileName(path)); else item->SetLabel("/"); item->SetLabelPreformated(true); //just set the default folder icon item->FillInDefaultIcon(); item->m_bIsShareOrDrive=true; items.Add(item); ret = true; } } return ret; }