bool CEpg::Update(const time_t start, const time_t end, int iUpdateTime) { bool bGrabSuccess(true); bool bUpdate(false); /* load the entries from the db first */ if (!m_bLoaded && !g_EpgContainer.IgnoreDB()) Load(); /* clean up if needed */ if (m_bLoaded) Cleanup(); /* get the last update time from the database */ CDateTime lastScanTime = GetLastScanTime(); /* check if we have to update */ time_t iNow = 0; time_t iLastUpdate = 0; CDateTime::GetCurrentDateTime().GetAsUTCDateTime().GetAsTime(iNow); lastScanTime.GetAsTime(iLastUpdate); bUpdate = (iNow > iLastUpdate + iUpdateTime); if (bUpdate) bGrabSuccess = LoadFromClients(start, end); if (bGrabSuccess) { g_PVRManager.ResetPlayingTag(); m_bLoaded = true; } else CLog::Log(LOGERROR, "EPG - %s - failed to update table '%s'", __FUNCTION__, Name().c_str()); return bGrabSuccess; }
int CEpg::Get(CFileItemList &results, const EpgSearchFilter &filter) const { int iInitialSize = results.Size(); if (!HasValidEntries()) return -1; CSingleLock lock(m_critSection); for (map<CDateTime, CEpgInfoTag *>::const_iterator it = m_tags.begin(); it != m_tags.end(); it++) { if (filter.FilterEntry(*it->second)) { CDateTime localStartTime; localStartTime.SetFromUTCDateTime(it->first); CFileItemPtr entry(new CFileItem(*it->second)); entry->SetLabel2(localStartTime.GetAsLocalizedDateTime(false, false)); results.Add(entry); } } return results.Size() - iInitialSize; }
void CGUIDialogPVRTimerSettings::OnSettingAction(const CSetting *setting) { if (setting == NULL) return; CGUIDialogSettingsManualBase::OnSettingAction(setting); CPVRTimerInfoTag* tag = m_timerItem->GetPVRTimerInfoTag(); if (tag == NULL) return; const std::string &settingId = setting->GetId(); if (settingId == SETTING_TMR_BEGIN) { if (CGUIDialogNumeric::ShowAndGetTime(m_timerStartTime, g_localizeStrings.Get(14066))) { CDateTime timestart = m_timerStartTime; int start_day = tag->StartAsLocalTime().GetDay(); int start_month = tag->StartAsLocalTime().GetMonth(); int start_year = tag->StartAsLocalTime().GetYear(); int start_hour = timestart.GetHour(); int start_minute = timestart.GetMinute(); CDateTime newStart(start_year, start_month, start_day, start_hour, start_minute, 0); tag->SetStartFromLocalTime(newStart); m_timerStartTimeStr = tag->StartAsLocalTime().GetAsLocalizedTime("", false); setButtonLabels(); } } else if (settingId == SETTING_TMR_END) { if (CGUIDialogNumeric::ShowAndGetTime(m_timerEndTime, g_localizeStrings.Get(14066))) { CDateTime timestop = m_timerEndTime; // TODO: add separate end date control to schedule a show with more then 24 hours int start_day = tag->StartAsLocalTime().GetDay(); int start_month = tag->StartAsLocalTime().GetMonth(); int start_year = tag->StartAsLocalTime().GetYear(); int start_hour = timestop.GetHour(); int start_minute = timestop.GetMinute(); CDateTime newEnd(start_year, start_month, start_day, start_hour, start_minute, 0); // add a day to end time if end time is before start time // TODO: this should be removed after separate end date control was added if (newEnd < tag->StartAsLocalTime()) newEnd += CDateTimeSpan(1, 0, 0, 0); tag->SetEndFromLocalTime(newEnd); m_timerEndTimeStr = tag->EndAsLocalTime().GetAsLocalizedTime("", false); setButtonLabels(); } } tag->UpdateSummary(); }
bool CWebServer::IsRequestRanged(const HTTPRequest& request, const CDateTime &lastModified) const { // parse the Range header and store it in the request object CHttpRanges ranges; bool ranged = ranges.Parse(HTTPRequestHandlerUtils::GetRequestHeaderValue(request.connection, MHD_HEADER_KIND, MHD_HTTP_HEADER_RANGE)); // handle If-Range header but only if the Range header is present if (ranged && lastModified.IsValid()) { std::string ifRange = HTTPRequestHandlerUtils::GetRequestHeaderValue(request.connection, MHD_HEADER_KIND, MHD_HTTP_HEADER_IF_RANGE); if (!ifRange.empty() && lastModified.IsValid()) { CDateTime ifRangeDate; ifRangeDate.SetFromRFC1123DateTime(ifRange); // check if the last modification is newer than the If-Range date // if so we have to server the whole file instead if (lastModified.GetAsUTCDateTime() > ifRangeDate) ranges.Clear(); } } return !ranges.IsEmpty(); }
bool CPVRManager::SetWakeupCommand(void) { if (!g_guiSettings.GetBool("pvrpowermanagement.enabled")) return false; const CStdString strWakeupCommand = g_guiSettings.GetString("pvrpowermanagement.setwakeupcmd", false); if (!strWakeupCommand.IsEmpty() && m_timers) { time_t iWakeupTime; const CDateTime nextEvent = m_timers->GetNextEventTime(); nextEvent.GetAsTime(iWakeupTime); CStdString strExecCommand; strExecCommand.Format("%s %d", strWakeupCommand, iWakeupTime); const int iReturn = system(strExecCommand.c_str()); if (iReturn != 0) CLog::Log(LOGERROR, "%s - failed to execute wakeup command '%s': %s (%d)", __FUNCTION__, strExecCommand.c_str(), strerror(iReturn), iReturn); return iReturn == 0; } return false; }
// Write instance of the CDateTime class into the given writer. static void show(IWriter& writer, const CDateTime& a_crDateTime) { CALL writer << fill_0 << width(2) << a_crDateTime.getDate().getDay() << STR('.'); writer << fill_0 << width(2) << a_crDateTime.getDate().getMonth() << STR('.'); writer << fill_0 << width(4) << a_crDateTime.getDate().getYear() << STR(' '); writer << fill_0 << width(2) << a_crDateTime.getTime().getHour() << STR(':'); writer << fill_0 << width(2) << a_crDateTime.getTime().getMinute() << STR(':'); writer << fill_0 << width(2) << a_crDateTime.getTime().getSecond() << STR('-'); writer << fill_0 << width(4) << a_crDateTime.getTime().getMillisecond() << ln; }
/* Exist() */ BOOL CUrlDatabaseService::Exist(LPCSTR lpcszUrl,LPSTR lpszDate,UINT nDateSize,CUrlStatus::URL_STATUS& nStat,UINT& nID) { BOOL bExist = FALSE; nStat = CUrlStatus::URL_STATUS_UNKNOWN; nID = 0; if(m_bIsValid) { // sincronizza gli accessi if(m_pUrlDatabaseTable->Lock(SYNC_5_SECS_TIMEOUT)) { strcpyn(m_szUrl,lpcszUrl,sizeof(m_szUrl)); m_Url.DecodeUrl(m_szUrl); // controlla se il valore specificato esiste if(m_pUrlDatabaseTable->Seek(m_szUrl,URLDATABASE_IDX_URL)) { m_pUrlDatabaseTable->ScatterMemvars(); CDateTime* pDate = m_pUrlDatabaseTable->GetField_Date(); CDateTime* pTime = m_pUrlDatabaseTable->GetField_StartTime(); m_DateTime.SetYear(pDate->GetYear()); m_DateTime.SetMonth(pDate->GetMonth()); m_DateTime.SetDay(pDate->GetDay()); m_DateTime.SetHour(pTime->GetHour()); m_DateTime.SetMin(pTime->GetMin()); m_DateTime.SetSec(pTime->GetSec()); m_DateTime.SetDateFormat(GMT); strcpyn(lpszDate,m_DateTime.GetFormattedDate(FALSE),nDateSize); nStat = (CUrlStatus::URL_STATUS)m_pUrlDatabaseTable->GetField_Status(); nID = m_pUrlDatabaseTable->GetField_Id(); bExist = TRUE; } else { memset(lpszDate,'\0',nDateSize); } m_pUrlDatabaseTable->Unlock(); } } return(bExist); }
bool CAddonDatabase::SetLastUpdated(const std::string& addonId, const CDateTime& dateTime) { try { if (NULL == m_pDB.get()) return false; if (NULL == m_pDS.get()) return false; m_pDS->exec(PrepareSQL("UPDATE installed SET lastUpdated='%s' WHERE addonID='%s'", dateTime.GetAsDBDateTime().c_str(), addonId.c_str())); return true; } catch (...) { CLog::Log(LOGERROR, "%s failed on addon '%s'", __FUNCTION__, addonId.c_str()); } return false; }
CPVRRecordingsPath::CPVRRecordingsPath(bool bDeleted, bool bRadio, const std::string &strDirectory, const std::string &strTitle, int iSeason, int iEpisode, int iYear, const std::string &strSubtitle, const std::string &strChannelName, const CDateTime &recordingTime, const std::string &strId) : m_bValid(true), m_bRoot(false), m_bActive(!bDeleted), m_bRadio(bRadio) { std::string strDirectoryN(TrimSlashes(strDirectory)); if (!strDirectoryN.empty()) strDirectoryN = StringUtils::Format("%s/", strDirectoryN.c_str()); std::string strTitleN(strTitle); StringUtils::Replace(strTitleN, '/', ' '); std::string strSeasonEpisodeN; if ((iSeason > -1 && iEpisode > -1 && (iSeason > 0 || iEpisode > 0))) strSeasonEpisodeN = StringUtils::Format("s%02de%02d", iSeason, iEpisode); if (!strSeasonEpisodeN.empty()) strSeasonEpisodeN = StringUtils::Format(" %s", strSeasonEpisodeN.c_str()); std::string strYearN(iYear > 0 ? StringUtils::Format(" (%i)", iYear) : ""); std::string strSubtitleN; if (!strSubtitle.empty()) { strSubtitleN = StringUtils::Format(" %s", strSubtitle.c_str()); StringUtils::Replace(strSubtitleN, '/', ' '); } std::string strChannelNameN; if (!strChannelName.empty()) { strChannelNameN = StringUtils::Format(" (%s)", strChannelName.c_str()); StringUtils::Replace(strChannelNameN, '/', ' '); } m_directoryPath = StringUtils::Format("%s%s%s%s%s", strDirectoryN.c_str(), strTitleN.c_str(), strSeasonEpisodeN.c_str(), strYearN.c_str(), strSubtitleN.c_str()); m_params = StringUtils::Format(", TV%s, %s, %s.pvr", strChannelNameN.c_str(), recordingTime.GetAsSaveString().c_str(), strId.c_str()); m_path = StringUtils::Format("pvr://recordings/%s/%s/%s%s", bRadio ? "radio" : "tv", bDeleted ? "deleted" : "active", m_directoryPath.c_str(), m_params.c_str()); }
CDateTimeSpan CDateTime::operator -(const CDateTime& right) const { CDateTimeSpan left; ULARGE_INTEGER timeLeft; left.ToULargeInt(timeLeft); ULARGE_INTEGER timeThis; ToULargeInt(timeThis); ULARGE_INTEGER timeRight; right.ToULargeInt(timeRight); timeLeft.QuadPart=timeThis.QuadPart-timeRight.QuadPart; left.FromULargeInt(timeLeft); return left; }
void PVR::CPVREpg::Cleanup(const CDateTime &Time) { CSingleLock lock(m_critSection); CDateTime firstDate = Time.GetAsUTCDateTime() - CDateTimeSpan(0, g_advancedSettings.m_iEpgLingerTime / 60, g_advancedSettings.m_iEpgLingerTime % 60, 0); unsigned int iSize = size(); for (unsigned int iTagPtr = 0; iTagPtr < iSize; iTagPtr++) { CPVREpgInfoTag *tag = (CPVREpgInfoTag *) at(iTagPtr); if ( tag && /* valid tag */ !tag->HasTimer() && /* no timer set */ tag->EndAsLocalTime() < firstDate) { DeleteInfoTag(tag); iTagPtr--; iSize--; } } }
bool CAddonDatabase::SetLastUsed(const std::string& addonId, const CDateTime& dateTime) { try { if (NULL == m_pDB.get()) return false; if (NULL == m_pDS.get()) return false; auto start = XbmcThreads::SystemClockMillis(); m_pDS->exec(PrepareSQL("UPDATE installed SET lastUsed='%s' WHERE addonID='%s'", dateTime.GetAsDBDateTime().c_str(), addonId.c_str())); CLog::Log(LOGDEBUG, "CAddonDatabase::SetLastUsed[%s] took %i ms", addonId.c_str(), XbmcThreads::SystemClockMillis() - start); return true; } catch (...) { CLog::Log(LOGERROR, "%s failed on addon '%s'", __FUNCTION__, addonId.c_str()); } return false; }
bool CLocalFileSystem::ConvertFileTimeToCDateTime(CDateTime& time, const FILETIME &ft) { if (!ft.dwHighDateTime && !ft.dwLowDateTime) return false; // See http://trac.wxwidgets.org/changeset/74423 and http://trac.wxwidgets.org/ticket/13098 // Directly converting to time_t wxLongLong t(ft.dwHighDateTime, ft.dwLowDateTime); t /= 10000; // Convert hundreds of nanoseconds to milliseconds. t -= EPOCH_OFFSET_IN_MSEC; if (t < 0) { return false; } // Interestingly wxDateTime has this constructor which // even more interestingly isn't even marked explicit. time = CDateTime(wxDateTime(t), CDateTime::milliseconds); return time.IsValid(); }
void CFileExistsDlg::DisplayFile(bool left, wxString name, wxLongLong const& size, CDateTime const& time, wxString const& iconFile) { name = GetPathEllipsis(name, FindWindow(left ? XRCID("ID_FILE1_NAME") : XRCID("ID_FILE2_NAME"))); name.Replace(_T("&"), _T("&&")); wxString sizeStr = _("Size unknown"); if (size != -1) { bool const thousands_separator = COptions::Get()->GetOptionVal(OPTION_SIZE_USETHOUSANDSEP) != 0; sizeStr = CSizeFormat::Format(size, true, CSizeFormat::bytes, thousands_separator, 0); } wxString timeStr = _("Date/time unknown"); if (time.IsValid()) timeStr = CTimeFormat::Format(time); xrc_call(*this, left ? "ID_FILE1_NAME" : "ID_FILE2_NAME", &wxStaticText::SetLabel, name); xrc_call(*this, left ? "ID_FILE1_SIZE" : "ID_FILE2_SIZE", &wxStaticText::SetLabel, sizeStr); xrc_call(*this, left ? "ID_FILE1_TIME" : "ID_FILE2_TIME", &wxStaticText::SetLabel, timeStr); LoadIcon(left ? XRCID("ID_FILE1_ICON") : XRCID("ID_FILE2_ICON"), iconFile); }
bool GetLastModifiedOfTestFile(const std::string& testFile, CDateTime& lastModified) { CFile file; if (!file.Open(URIUtils::AddFileToFolder(sourcePath, testFile), READ_NO_CACHE)) return false; struct __stat64 statBuffer; if (file.Stat(&statBuffer) != 0) return false; struct tm *time; #ifdef HAVE_LOCALTIME_R struct tm result = {}; time = localtime_r((time_t*)&statBuffer.st_mtime, &result); #else time = localtime((time_t *)&statBuffer.st_mtime); #endif if (time == NULL) return false; lastModified = *time; return lastModified.IsValid(); }
void CGUIDialogPVRTimerSettings::DaysFiller( const CSetting *setting, std::vector< std::pair<std::string, int> > &list, int ¤t, void *data) { CGUIDialogPVRTimerSettings *pThis = static_cast<CGUIDialogPVRTimerSettings*>(data); if (pThis) { list.clear(); current = 0; // Data range: "today" until "yesterday next year" const CDateTime now(CDateTime::GetCurrentDateTime()); CDateTime time(now.GetYear(), now.GetMonth(), now.GetDay(), 0, 0, 0); const CDateTime yesterdayPlusOneYear( time.GetYear() + 1, time.GetMonth(), time.GetDay() - 1, time.GetHour(), time.GetMinute(), time.GetSecond()); CDateTime oldCDateTime; if (setting->GetId() == SETTING_TMR_FIRST_DAY) oldCDateTime = pThis->m_timerInfoTag->FirstDayAsLocalTime(); else if (setting->GetId() == SETTING_TMR_START_DAY) oldCDateTime = pThis->m_timerInfoTag->StartAsLocalTime(); else oldCDateTime = pThis->m_timerInfoTag->EndAsLocalTime(); const CDateTime oldCDate(oldCDateTime.GetYear(), oldCDateTime.GetMonth(), oldCDateTime.GetDay(), 0, 0, 0); if ((oldCDate < time) || (oldCDate > yesterdayPlusOneYear)) list.push_back(std::make_pair(oldCDate.GetAsLocalizedDate(true /*long date*/), GetDateAsIndex(oldCDate))); while (time <= yesterdayPlusOneYear) { list.push_back(std::make_pair(time.GetAsLocalizedDate(true /*long date*/), GetDateAsIndex(time))); time += CDateTimeSpan(1, 0, 0, 0); } if (setting->GetId() == SETTING_TMR_FIRST_DAY) current = GetDateAsIndex(pThis->m_firstDayLocalTime); else if (setting->GetId() == SETTING_TMR_START_DAY) current = GetDateAsIndex(pThis->m_startLocalTime); else current = GetDateAsIndex(pThis->m_endLocalTime); } else CLog::Log(LOGERROR, "CGUIDialogPVRTimerSettings::DaysFiller - No dialog"); }
/* GetFileTime() Ricava la data/ora UTC del file (assolute, in formato GMT). Se il secondo parametro e' TRUE, converte da GMT a local time, aggiungendo o sottraendo la differenza oraria rispetto a GMT: - data/ora assolute del file (UTC=GMT): Sun, 06 Nov 1994 08:49:37 GMT (0000) - zona oraria locale: GMT +1 (+0100) bConvertToLocalTime = FALSE -> Sun, 06 Nov 1994 08:49:37 GMT bConvertToLocalTime = TRUE -> Sun, 06 Nov 1994 09:49:37 +0100 */ BOOL CBinFile::GetFileTime(CDateTime& datetime,BOOL bConvertToLocalTime/* = FALSE*/) { BOOL bGet = FALSE; if(m_hHandle!=INVALID_HANDLE_VALUE) { FILETIME gmtfiletime = {0}; FILETIME filetime = {0}; SYSTEMTIME systemtime = {0}; // ricava la data/ora UTC del file (ossia assolute, GMT) if(::GetFileTime(m_hHandle,NULL,NULL,&gmtfiletime)) { if(bConvertToLocalTime) ::FileTimeToLocalFileTime(&gmtfiletime,&filetime); // converte in locale (aggiunge o sottrae la differenza rispetto a GMT) else memcpy(&filetime,&gmtfiletime,sizeof(FILETIME)); // nessuna conversione, data/ora assolute (UTC) // converte in formato di sistema ::FileTimeToSystemTime(&filetime,&systemtime); // formatta la data/ora del file (Day, dd Mon yyyy hh:mm:ss [GMT]) datetime.SetDateFormat(bConvertToLocalTime ? GMT : GMT_SHORT); datetime.SetYear(systemtime.wYear); datetime.SetMonth(systemtime.wMonth); datetime.SetDay(systemtime.wDay); datetime.SetHour(systemtime.wHour); datetime.SetMin(systemtime.wMinute); datetime.SetSec(systemtime.wSecond); bGet = TRUE; } } return(bGet); }
bool CEpg::PersistTags(void) const { bool bReturn = false; CEpgDatabase *database = g_EpgContainer.GetDatabase(); if (!database || !database->IsOpen()) { CLog::Log(LOGERROR, "EPG - %s - could not load the database", __FUNCTION__); return bReturn; } CDateTime first = GetFirstDate(); CDateTime last = GetLastDate(); time_t iStart(0), iEnd(0); if (first.IsValid()) first.GetAsTime(iStart); if (last.IsValid()) last.GetAsTime(iEnd); database->Delete(*this, iStart, iEnd); if (m_tags.size() > 0) { for (map<CDateTime, CEpgInfoTag *>::const_iterator it = m_tags.begin(); it != m_tags.end(); it++) { if (!it->second->Persist()) { CLog::Log(LOGERROR, "failed to persist epg tag %d", it->second->UniqueBroadcastID()); bReturn = false; } } } else { /* Return true if we have no tags, so that no error is logged */ bReturn = true; } return bReturn; }
void CVideoInfoTag::SetPremieredFromDBDate(std::string premieredString) { CDateTime premiered; premiered.SetFromDBDate(premieredString); SetPremiered(premiered); }
void CVideoInfoTag::SetPremiered(CDateTime premiered) { m_premiered = premiered; m_bHasPremiered = premiered.IsValid(); }
const char* CWSESPControlEx::readSessionTimeStamp(int t, StringBuffer& str) { CDateTime time; time.set(t); return time.getString(str).str(); }
bool CMythDirectory::GetGuideForChannel(const CStdString& base, CFileItemList &items, int channelNumber) { cmyth_database_t database = m_session->GetDatabase(); if (!database) { CLog::Log(LOGERROR, "%s - Could not get database", __FUNCTION__); return false; } time_t now; time(&now); time_t end = now + (24 * 60 * 60); // How many seconds of EPG from now we should grab, 24 hours in seconds cmyth_program_t *program = NULL; // TODO: See if there is a way to just get the entries for the chosen channel rather than ALL int count = m_dll->mysql_get_guide(database, &program, now, end); CLog::Log(LOGDEBUG, "%s - %i entries in guide data", __FUNCTION__, count); if (count <= 0) return false; for (int i = 0; i < count; i++) { if (program[i].channum == channelNumber) { CFileItemPtr item(new CFileItem("", false)); // No path for guide entries /* * Set the FileItem meta data. */ CStdString title = program[i].title; // e.g. Mythbusters CStdString subtitle = program[i].subtitle; // e.g. The Pirate Special CDateTime localstart; if (program[i].starttime) localstart = CTimeUtils::GetLocalTime(program[i].starttime); item->m_strTitle = StringUtils::Format("%s - %s", localstart.GetAsLocalizedTime("HH:mm", false).c_str(), title.c_str()); // e.g. 20:30 - Mythbusters if (!subtitle.empty()) item->m_strTitle += " - \"" + subtitle + "\""; // e.g. 20:30 - Mythbusters - "The Pirate Special" item->m_dateTime = localstart; /* * Set the VideoInfoTag meta data so it matches the FileItem meta data where possible. */ CVideoInfoTag* tag = item->GetVideoInfoTag(); tag->m_strTitle = title; if (!subtitle.empty()) tag->m_strTitle += " - \"" + subtitle + "\""; // e.g. Mythbusters - "The Pirate Special" tag->m_strShowTitle = title; tag->m_strOriginalTitle = title; tag->m_strPlotOutline = subtitle; tag->m_strPlot = program[i].description; // TODO: Strip out the subtitle from the description if it is present at the start? // TODO: Do we need to add the subtitle to the start of the plot if not already as it used to? Seems strange, should be handled by skin? tag->m_genre = StringUtils::Split(program[i].category, g_advancedSettings.m_videoItemSeparator); // e.g. Sports tag->m_strAlbum = program[i].callsign; // e.g. TV3 CDateTime start(program[i].starttime); CDateTime end(program[i].endtime); CDateTimeSpan runtime = end - start; tag->m_duration = runtime.GetSeconds() + runtime.GetMinutes() * 60 + runtime.GetHours() * 3600; tag->m_iSeason = 0; // So XBMC treats the content as an episode and displays tag information. tag->m_iEpisode = 0; items.Add(item); } } /* * Items are sorted as added to the list (in ascending date order). Specifying sorting by date can * result in the guide being shown in the wrong order for skins that sort by date in descending * order by default with no option to change to ascending, e.g. Confluence. */ items.AddSortMethod(SortByNone, 552 /* Date */, LABEL_MASKS("%K", "%J")); // Still leave the date label m_dll->ref_release(program); return true; }
void CEpgInfoTag::SetFirstAiredFromLocalTime(const CDateTime &firstAired) { CDateTime tmp = firstAired.GetAsUTCDateTime(); SetStartFromUTC(tmp); }
void CEpgInfoTag::SetStartFromLocalTime(const CDateTime &start) { CDateTime tmp = start.GetAsUTCDateTime(); SetStartFromUTC(tmp); }
bool DatabaseUtils::GetDatabaseResults(const MediaType &mediaType, const FieldList &fields, const std::unique_ptr<dbiplus::Dataset> &dataset, DatabaseResults &results) { if (dataset->num_rows() == 0) return true; const dbiplus::result_set &resultSet = dataset->get_result_set(); unsigned int offset = results.size(); if (fields.empty()) { DatabaseResult result; for (unsigned int index = 0; index < resultSet.records.size(); index++) { result[FieldRow] = index + offset; results.push_back(result); } return true; } if (resultSet.record_header.size() < fields.size()) return false; std::vector<int> fieldIndexLookup; fieldIndexLookup.reserve(fields.size()); for (FieldList::const_iterator it = fields.begin(); it != fields.end(); ++it) fieldIndexLookup.push_back(GetFieldIndex(*it, mediaType)); results.reserve(resultSet.records.size() + offset); for (unsigned int index = 0; index < resultSet.records.size(); index++) { DatabaseResult result; result[FieldRow] = index + offset; unsigned int lookupIndex = 0; for (FieldList::const_iterator it = fields.begin(); it != fields.end(); ++it) { int fieldIndex = fieldIndexLookup[lookupIndex++]; if (fieldIndex < 0) return false; std::pair<Field, CVariant> value; value.first = *it; if (!GetFieldValue(resultSet.records[index]->at(fieldIndex), value.second)) CLog::Log(LOGWARNING, "GetDatabaseResults: unable to retrieve value of field %s", resultSet.record_header[fieldIndex].name.c_str()); if (value.first == FieldYear && (mediaType == MediaTypeTvShow || mediaType == MediaTypeEpisode)) { CDateTime dateTime; dateTime.SetFromDBDate(value.second.asString()); if (dateTime.IsValid()) { value.second.clear(); value.second = dateTime.GetYear(); } } result.insert(value); } result[FieldMediaType] = mediaType; if (mediaType == MediaTypeMovie || mediaType == MediaTypeVideoCollection || mediaType == MediaTypeTvShow || mediaType == MediaTypeMusicVideo) result[FieldLabel] = result.at(FieldTitle).asString(); else if (mediaType == MediaTypeEpisode) { std::ostringstream label; label << (int)(result.at(FieldSeason).asInteger() * 100 + result.at(FieldEpisodeNumber).asInteger()); label << ". "; label << result.at(FieldTitle).asString(); result[FieldLabel] = label.str(); } else if (mediaType == MediaTypeAlbum) result[FieldLabel] = result.at(FieldAlbum).asString(); else if (mediaType == MediaTypeSong) { std::ostringstream label; label << (int)result.at(FieldTrackNumber).asInteger(); label << ". "; label << result.at(FieldTitle).asString(); result[FieldLabel] = label.str(); } else if (mediaType == MediaTypeArtist) result[FieldLabel] = result.at(FieldArtist).asString(); results.push_back(result); } return true; }
CDateTime CPVRTimerInfoTag::FirstDayAsLocalTime(void) const { CDateTime retVal; retVal.SetFromUTCDateTime(m_FirstDay); return retVal; }
CDateTime CPVRTimerInfoTag::EndAsLocalTime(void) const { CDateTime retVal; retVal.SetFromUTCDateTime(m_StopTime); return retVal; }
void CGUIWindowPVRGuide::UpdateData(void) { CPVRChannel CurrentChannel; CPVRManager::Get()->GetCurrentChannel(&CurrentChannel); m_bUpdateRequired = false; m_parent->m_vecItems->Clear(); if (m_iGuideView == GUIDE_VIEW_CHANNEL) { m_parent->m_guideGrid = NULL; m_parent->m_viewControl.SetCurrentView(CONTROL_LIST_GUIDE_CHANNEL); m_parent->SetLabel(m_iControlButton, g_localizeStrings.Get(19029)); m_parent->SetLabel(CONTROL_LABELGROUP, CurrentChannel.ChannelName().c_str()); if (CurrentChannel.GetEPG(m_parent->m_vecItems) == 0) { CFileItemPtr item; item.reset(new CFileItem("pvr://guide/" + CurrentChannel.ChannelName() + "/empty.epg", false)); item->SetLabel(g_localizeStrings.Get(19028)); item->SetLabelPreformated(true); m_parent->m_vecItems->Add(item); } m_parent->m_viewControl.SetItems(*m_parent->m_vecItems); } else if (m_iGuideView == GUIDE_VIEW_NOW) { m_parent->m_guideGrid = NULL; m_parent->m_viewControl.SetCurrentView(CONTROL_LIST_GUIDE_NOW_NEXT); m_parent->SetLabel(m_iControlButton, g_localizeStrings.Get(19029) + ": " + g_localizeStrings.Get(19030)); m_parent->SetLabel(CONTROL_LABELGROUP, g_localizeStrings.Get(19030)); if (CPVRManager::GetEpg()->GetEPGNow(m_parent->m_vecItems, CurrentChannel.IsRadio()) == 0) { CFileItemPtr item; item.reset(new CFileItem("pvr://guide/now/empty.epg", false)); item->SetLabel(g_localizeStrings.Get(19028)); item->SetLabelPreformated(true); m_parent->m_vecItems->Add(item); } m_parent->m_viewControl.SetItems(*m_parent->m_vecItems); } else if (m_iGuideView == GUIDE_VIEW_NEXT) { m_parent->m_guideGrid = NULL; m_parent->m_viewControl.SetCurrentView(CONTROL_LIST_GUIDE_NOW_NEXT); m_parent->SetLabel(m_iControlButton, g_localizeStrings.Get(19029) + ": " + g_localizeStrings.Get(19031)); m_parent->SetLabel(CONTROL_LABELGROUP, g_localizeStrings.Get(19031)); if (CPVRManager::GetEpg()->GetEPGNext(m_parent->m_vecItems, CurrentChannel.IsRadio()) == 0) { CFileItemPtr item; item.reset(new CFileItem("pvr://guide/next/empty.epg", false)); item->SetLabel(g_localizeStrings.Get(19028)); item->SetLabelPreformated(true); m_parent->m_vecItems->Add(item); } m_parent->m_viewControl.SetItems(*m_parent->m_vecItems); } else if (m_iGuideView == GUIDE_VIEW_TIMELINE) { m_parent->SetLabel(m_iControlButton, g_localizeStrings.Get(19029) + ": " + g_localizeStrings.Get(19032)); m_parent->SetLabel(CONTROL_LABELGROUP, g_localizeStrings.Get(19032)); if (CPVRManager::GetEpg()->GetEPGAll(m_parent->m_vecItems, CurrentChannel.IsRadio()) > 0) { CDateTime now = CDateTime::GetCurrentDateTime(); CDateTime m_gridStart = now - CDateTimeSpan(0, 0, 0, (now.GetMinute() % 30) * 60 + now.GetSecond()) - CDateTimeSpan(0, g_guiSettings.GetInt("epg.lingertime") / 60, g_guiSettings.GetInt("epg.lingertime") % 60, 0); CDateTime m_gridEnd = m_gridStart + CDateTimeSpan(g_guiSettings.GetInt("epg.daystodisplay"), 0, 0, 0); m_parent->m_guideGrid = (CGUIEPGGridContainer*) m_parent->GetControl(CONTROL_LIST_TIMELINE); if (m_parent->m_guideGrid) { m_parent->m_guideGrid->SetStartEnd(m_gridStart, m_gridEnd); m_parent->m_viewControl.SetCurrentView(CONTROL_LIST_TIMELINE); } // m_viewControl.SetSelectedItem(m_iSelected_GUIDE); } } m_parent->SetLabel(CONTROL_LABELHEADER, g_localizeStrings.Get(19029)); UpdateButtons(); }
CDateTime CPVRTimers::GetNextEventTime(void) const { const bool dailywakup = CSettings::GetInstance().GetBool(CSettings::SETTING_PVRPOWERMANAGEMENT_DAILYWAKEUP); const CDateTime now = CDateTime::GetUTCDateTime(); const CDateTimeSpan prewakeup(0, 0, CSettings::GetInstance().GetInt(CSettings::SETTING_PVRPOWERMANAGEMENT_PREWAKEUP), 0); const CDateTimeSpan idle(0, 0, CSettings::GetInstance().GetInt(CSettings::SETTING_PVRPOWERMANAGEMENT_BACKENDIDLETIME), 0); CDateTime wakeuptime; /* Check next active time */ CFileItemPtr item = GetNextActiveTimer(); if (item && item->HasPVRTimerInfoTag()) { const CDateTimeSpan prestart(0, 0, item->GetPVRTimerInfoTag()->MarginStart(), 0); const CDateTime start = item->GetPVRTimerInfoTag()->StartAsUTC(); wakeuptime = ((start - prestart - prewakeup - idle) > now) ? start - prestart - prewakeup : now + idle; } /* check daily wake up */ if (dailywakup) { CDateTime dailywakeuptime; dailywakeuptime.SetFromDBTime(CSettings::GetInstance().GetString(CSettings::SETTING_PVRPOWERMANAGEMENT_DAILYWAKEUPTIME)); dailywakeuptime = dailywakeuptime.GetAsUTCDateTime(); dailywakeuptime.SetDateTime( now.GetYear(), now.GetMonth(), now.GetDay(), dailywakeuptime.GetHour(), dailywakeuptime.GetMinute(), dailywakeuptime.GetSecond() ); if ((dailywakeuptime - idle) < now) { const CDateTimeSpan oneDay(1,0,0,0); dailywakeuptime += oneDay; } if (!wakeuptime.IsValid() || dailywakeuptime < wakeuptime) wakeuptime = dailywakeuptime; } const CDateTime retVal(wakeuptime); return retVal; }
void CEpgInfoTag::SetEndFromLocalTime(const CDateTime &end) { CDateTime tmp = end.GetAsUTCDateTime(); SetEndFromUTC(tmp); }