std::string CURL::GetWithoutUserDetails(bool redact) const { std::string strURL; if (IsProtocol("stack")) { CFileItemList items; XFILE::CStackDirectory dir; dir.GetDirectory(*this,items); std::vector<std::string> newItems; for (int i=0;i<items.Size();++i) { CURL url(items[i]->GetPath()); items[i]->SetPath(url.GetWithoutUserDetails(redact)); 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; if (redact) sizeneed += sizeof("USERNAME:PASSWORD@"); strURL.reserve(sizeneed); if (m_strProtocol.empty()) return m_strFileName; strURL = m_strProtocol; strURL += "://"; if (redact && !m_strUserName.empty()) { strURL += "USERNAME"; if (!m_strPassword.empty()) { strURL += ":PASSWORD"; } strURL += "@"; } if (!m_strHostName.empty()) { std::string strHostName; if (URIUtils::HasParentInHostname(*this)) strHostName = CURL(m_strHostName).GetWithoutUserDetails(); else strHostName = m_strHostName; if (URIUtils::HasEncodedHostname(*this)) strHostName = Encode(strHostName); if ( HasPort() ) { protectIPv6(strHostName); strURL += strHostName + StringUtils::Format(":%i", m_iPort); } else strURL += strHostName; strURL += "/"; } strURL += m_strFileName; if( m_strOptions.length() > 0 ) strURL += m_strOptions; if( m_strProtocolOptions.length() > 0 ) strURL += "|"+m_strProtocolOptions; return strURL; }
bool CGUIWindowPVRBase::PlayRecording(CFileItem *item, bool bPlayMinimized /* = false */, bool bCheckResume /* = true */) { if (!item->HasPVRRecordingInfoTag()) return false; std::string stream = item->GetPVRRecordingInfoTag()->m_strStreamURL; if (stream.empty()) { if (bCheckResume) CheckResumeRecording(item); CApplicationMessenger::GetInstance().PostMsg(TMSG_MEDIA_PLAY, 0, 0, static_cast<void*>(new CFileItem(*item))); return true; } /* Isolate the folder from the filename */ size_t found = stream.find_last_of("/"); if (found == std::string::npos) found = stream.find_last_of("\\"); if (found != std::string::npos) { /* Check here for asterisk at the begin of the filename */ if (stream[found+1] == '*') { /* Create a "stack://" url with all files matching the extension */ std::string ext = URIUtils::GetExtension(stream); std::string dir = stream.substr(0, found); CFileItemList items; XFILE::CDirectory::GetDirectory(dir, items); items.Sort(SortByFile, SortOrderAscending); std::vector<int> stack; for (int i = 0; i < items.Size(); ++i) { if (URIUtils::HasExtension(items[i]->GetPath(), ext)) stack.push_back(i); } if (stack.empty()) { /* If we have a stack change the path of the item to it */ XFILE::CStackDirectory dir; std::string stackPath = dir.ConstructStackPath(items, stack); item->SetPath(stackPath); } } else { /* If no asterisk is present play only the given stream URL */ item->SetPath(stream); } } else { CLog::Log(LOGERROR, "CGUIWindowPVRCommon - %s - can't open recording: no valid filename", __FUNCTION__); CGUIDialogOK::ShowAndGetInput(CVariant{19033}, CVariant{19036}); return false; } if (bCheckResume) CheckResumeRecording(item); CApplicationMessenger::GetInstance().PostMsg(TMSG_MEDIA_PLAY, 0, 0, static_cast<void*>(new CFileItem(*item))); return true; }
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; }