void CPVREpgInfoTag::Update(const CPVREpgInfoTag &tag) { SetBroadcastId(tag.BroadcastId()); SetTitle(tag.Title()); SetPlotOutline(tag.PlotOutline()); SetPlot(tag.Plot()); SetStart(tag.Start()); SetEnd(tag.End()); SetGenre(tag.GenreType(), tag.GenreSubType(), tag.Genre()); SetFirstAired(tag.FirstAired()); SetParentalRating(tag.ParentalRating()); SetStarRating(tag.StarRating()); SetNotify(tag.Notify()); SetEpisodeNum(tag.EpisodeNum()); SetEpisodePart(tag.EpisodePart()); SetEpisodeName(tag.EpisodeName()); }
bool CGUIWindowPVRCommon::ActionRecord(CFileItem *item) { bool bReturn = false; CPVREpgInfoTag *epgTag = (CPVREpgInfoTag *) item->GetEPGInfoTag(); if (!epgTag) return bReturn; const CPVRChannel *channel = epgTag->ChannelTag(); if (!channel || channel->ChannelNumber() > 0) return bReturn; if (epgTag->Timer() == NULL) { /* create a confirmation dialog */ CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*) g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); if (!pDialog) return bReturn; pDialog->SetHeading(264); pDialog->SetLine(0, ""); pDialog->SetLine(1, epgTag->Title()); pDialog->SetLine(2, ""); pDialog->DoModal(); /* prompt for the user's confirmation */ if (!pDialog->IsConfirmed()) return bReturn; CPVRTimerInfoTag *newtimer = CPVRTimerInfoTag::CreateFromEpg(*epgTag); CFileItem *item = new CFileItem(*newtimer); if (CPVRManager::GetTimers()->AddTimer(*item)) CPVRManager::GetTimers()->Update(); bReturn = true; } else { CGUIDialogOK::ShowAndGetInput(19033,19034,0,0); bReturn = true; } return bReturn; }
bool CGUIWindowPVRCommon::StartRecordFile(CFileItem *item) { bool bReturn = false; if (!item->HasEPGInfoTag()) return bReturn; CPVREpgInfoTag *tag = (CPVREpgInfoTag *) item->GetEPGInfoTag(); if (!tag || !tag->ChannelTag() || tag->ChannelTag()->ChannelNumber() <= 0) return bReturn; CPVRTimerInfoTag *timer = CPVRManager::GetTimers()->GetMatch(item); if (timer) { CGUIDialogOK::ShowAndGetInput(19033,19034,0,0); return bReturn; } CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); if (!pDialog) return bReturn; pDialog->SetHeading(264); pDialog->SetLine(0, tag->ChannelTag()->ChannelName()); pDialog->SetLine(1, ""); pDialog->SetLine(2, tag->Title()); pDialog->DoModal(); if (!pDialog->IsConfirmed()) return bReturn; CPVRTimerInfoTag *newtimer = CPVRTimerInfoTag::CreateFromEpg(*tag); CFileItem *newTimerItem = new CFileItem(*newtimer); if (CPVRManager::GetTimers()->AddTimer(*newTimerItem)) { CPVRManager::GetTimers()->Update(); bReturn = true; } return bReturn; }
bool CPVRDatabase::UpdateEpgEntry(const CPVREpgInfoTag &tag, bool bSingleUpdate /* = true */, bool bLastUpdate /* = false */) { int bReturn = false; /* invalid tag */ if (tag.UniqueBroadcastID() <= 0) { CLog::Log(LOGERROR, "PVRDB - %s - invalid EPG tag", __FUNCTION__); return bReturn; } int iBroadcastId = tag.BroadcastId(); if (iBroadcastId) { CStdString strWhereClause = FormatSQL("(BroadcastUid = '%u' OR StartTime = '%s') AND ChannelId = '%u'", tag.UniqueBroadcastID(), tag.Start().GetAsDBDateTime().c_str(), tag.ChannelTag()->ChannelID()); CStdString strValue = GetSingleValue("EpgData", "BroadcastId", strWhereClause); if (!strValue.IsEmpty()) iBroadcastId = atoi(strValue); } CStdString strQuery; if (iBroadcastId < 0) { strQuery = FormatSQL("INSERT INTO EpgData (ChannelId, StartTime, " "EndTime, Title, PlotOutline, Plot, GenreType, GenreSubType, Genre, " "FirstAired, ParentalRating, StarRating, Notify, SeriesId, " "EpisodeId, EpisodePart, EpisodeName, BroadcastUid) " "VALUES (%i, '%s', '%s', '%s', '%s', '%s', %i, %i, '%s', '%s', %i, %i, %i, '%s', '%s', '%s', '%s', %i)\n", tag.ChannelTag()->ChannelID(), tag.Start().GetAsDBDateTime().c_str(), tag.End().GetAsDBDateTime().c_str(), tag.Title().c_str(), tag.PlotOutline().c_str(), tag.Plot().c_str(), tag.GenreType(), tag.GenreSubType(), tag.Genre(), tag.FirstAired().GetAsDBDateTime().c_str(), tag.ParentalRating(), tag.StarRating(), tag.Notify(), tag.SeriesNum().c_str(), tag.EpisodeNum().c_str(), tag.EpisodePart().c_str(), tag.EpisodeName().c_str(), tag.UniqueBroadcastID()); } else { strQuery = FormatSQL("REPLACE INTO EpgData (ChannelId, StartTime, " "EndTime, Title, PlotOutline, Plot, GenreType, GenreSubType, Genre, " "FirstAired, ParentalRating, StarRating, Notify, SeriesId, " "EpisodeId, EpisodePart, EpisodeName, BroadcastUid, BroadcastId) " "VALUES (%i, '%s', '%s', '%s', '%s', '%s', %i, %i, '%s', '%s', %i, %i, %i, '%s', '%s', '%s', '%s', %i, %i)\n", tag.ChannelTag()->ChannelID(), tag.Start().GetAsDBDateTime().c_str(), tag.End().GetAsDBDateTime().c_str(), tag.Title().c_str(), tag.PlotOutline().c_str(), tag.Plot().c_str(), tag.GenreType(), tag.GenreSubType(), tag.Genre(), tag.FirstAired().GetAsDBDateTime().c_str(), tag.ParentalRating(), tag.StarRating(), tag.Notify(), tag.SeriesNum().c_str(), tag.EpisodeNum().c_str(), tag.EpisodePart().c_str(), tag.EpisodeName().c_str(), tag.UniqueBroadcastID(), iBroadcastId); } if (bSingleUpdate) { bReturn = ExecuteQuery(strQuery); } else { bReturn = QueueInsertQuery(strQuery); if (bLastUpdate) CommitInsertQueries(); } if ((bSingleUpdate || bLastUpdate) && GetEpgDataEnd(tag.ChannelTag()->ChannelID()) > tag.End()) EraseEpgForChannel(*tag.ChannelTag(), NULL, tag.End()); return bReturn; }
int CPVREpgDatabase::Persist(const CPVREpgInfoTag &tag, bool bSingleUpdate /* = true */) { int iReturn(-1); if (tag.EpgID() <= 0) { CLog::Log(LOGERROR, "%s - tag '%s' does not have a valid table", __FUNCTION__, tag.Title(true).c_str()); return iReturn; } time_t iStartTime, iEndTime, iFirstAired; tag.StartAsUTC().GetAsTime(iStartTime); tag.EndAsUTC().GetAsTime(iEndTime); tag.FirstAiredAsUTC().GetAsTime(iFirstAired); int iBroadcastId = tag.BroadcastId(); std::string strQuery; /* Only store the genre string when needed */ std::string strGenre = (tag.GenreType() == EPG_GENRE_USE_STRING) ? StringUtils::Join(tag.Genre(), g_advancedSettings.m_videoItemSeparator) : ""; if (iBroadcastId < 0) { strQuery = PrepareSQL("REPLACE INTO epgtags (idEpg, iStartTime, " "iEndTime, sTitle, sPlotOutline, sPlot, sOriginalTitle, sCast, sDirector, sWriter, iYear, sIMDBNumber, " "sIconPath, iGenreType, iGenreSubType, sGenre, iFirstAired, iParentalRating, iStarRating, bNotify, iSeriesId, " "iEpisodeId, iEpisodePart, sEpisodeName, iFlags, iBroadcastUid) " "VALUES (%u, %u, %u, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %i, '%s', '%s', %i, %i, '%s', %u, %i, %i, %i, %i, %i, %i, '%s', %i, %i);", tag.EpgID(), static_cast<unsigned int>(iStartTime), static_cast<unsigned int>(iEndTime), tag.Title(true).c_str(), tag.PlotOutline(true).c_str(), tag.Plot(true).c_str(), tag.OriginalTitle(true).c_str(), tag.Cast().c_str(), tag.Director().c_str(), tag.Writer().c_str(), tag.Year(), tag.IMDBNumber().c_str(), tag.Icon().c_str(), tag.GenreType(), tag.GenreSubType(), strGenre.c_str(), static_cast<unsigned int>(iFirstAired), tag.ParentalRating(), tag.StarRating(), tag.Notify(), tag.SeriesNumber(), tag.EpisodeNumber(), tag.EpisodePart(), tag.EpisodeName().c_str(), tag.Flags(), tag.UniqueBroadcastID()); } else { strQuery = PrepareSQL("REPLACE INTO epgtags (idEpg, iStartTime, " "iEndTime, sTitle, sPlotOutline, sPlot, sOriginalTitle, sCast, sDirector, sWriter, iYear, sIMDBNumber, " "sIconPath, iGenreType, iGenreSubType, sGenre, iFirstAired, iParentalRating, iStarRating, bNotify, iSeriesId, " "iEpisodeId, iEpisodePart, sEpisodeName, iFlags, iBroadcastUid, idBroadcast) " "VALUES (%u, %u, %u, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %i, '%s', '%s', %i, %i, '%s', %u, %i, %i, %i, %i, %i, %i, '%s', %i, %i, %i);", tag.EpgID(), static_cast<unsigned int>(iStartTime), static_cast<unsigned int>(iEndTime), tag.Title(true).c_str(), tag.PlotOutline(true).c_str(), tag.Plot(true).c_str(), tag.OriginalTitle(true).c_str(), tag.Cast().c_str(), tag.Director().c_str(), tag.Writer().c_str(), tag.Year(), tag.IMDBNumber().c_str(), tag.Icon().c_str(), tag.GenreType(), tag.GenreSubType(), strGenre.c_str(), static_cast<unsigned int>(iFirstAired), tag.ParentalRating(), tag.StarRating(), tag.Notify(), tag.SeriesNumber(), tag.EpisodeNumber(), tag.EpisodePart(), tag.EpisodeName().c_str(), tag.Flags(), tag.UniqueBroadcastID(), iBroadcastId); } if (bSingleUpdate) { if (ExecuteQuery(strQuery)) iReturn = (int) m_pDS->lastinsertid(); } else { QueueInsertQuery(strQuery); iReturn = 0; } return iReturn; }