m_StopTime = m_StartTime;
m_state = PVR_TIMER_STATE_SCHEDULED;
m_FirstDay.SetValid(false);
+ m_iTimerId = 0;
}
CPVRTimerInfoTag::CPVRTimerInfoTag(const PVR_TIMER &timer, CPVRChannelPtr channel, unsigned int iClientId)
m_bIsRadio = channel && channel->IsRadio();
m_state = timer.state;
m_strFileNameAndPath = StringUtils::Format("pvr://client%i/timers/%i", m_iClientId, m_iClientIndex);
+ m_iTimerId = 0;
UpdateSummary();
}
m_iClientId == right.m_iClientId &&
m_iMarginStart == right.m_iMarginStart &&
m_iMarginEnd == right.m_iMarginEnd &&
- m_state == right.m_state);
+ m_state == right.m_state &&
+ m_iTimerId == right.m_iTimerId);
}
CPVRTimerInfoTag &CPVRTimerInfoTag::operator=(const CPVRTimerInfoTag &orig)
m_iMarginEnd = orig.m_iMarginEnd;
m_state = orig.m_state;
m_iChannelNumber = orig.m_iChannelNumber;
+ m_iTimerId = orig.m_iTimerId;
return *this;
}
CStdString m_strFileNameAndPath; /*!< @brief filename is only for reference */
int m_iChannelNumber; /*!< @brief integer value of the channel number */
bool m_bIsRadio; /*!< @brief is radio channel if set */
+ unsigned int m_iTimerId; /*!< @brief id that won't change as long as XBMC is running */
CPVRChannelPtr m_channel;
unsigned int m_iMarginStart; /*!< @brief (optional) if set, the backend starts the recording iMarginStart minutes before startTime. */
CPVRTimers::CPVRTimers(void)
{
m_bIsUpdating = false;
+ m_iLastId = 0;
}
CPVRTimers::~CPVRTimers(void)
addEntry = itr->second;
}
+ newTimer->m_iTimerId = ++m_iLastId;
addEntry->push_back(newTimer);
UpdateEpgEvent(newTimer);
bChanged = true;
{
addEntry = itr->second;
}
+ tag->m_iTimerId = ++m_iLastId;
addEntry->push_back(tag);
}
(*timerIt)->UpdateChannel();
}
}
+
+void CPVRTimers::GetAll(CFileItemList& items) const
+{
+ CFileItemPtr item;
+ CSingleLock lock(m_critSection);
+ for (map<CDateTime, vector<CPVRTimerInfoTagPtr>* >::const_iterator it = m_tags.begin(); it != m_tags.end(); it++)
+ {
+ for (vector<CPVRTimerInfoTagPtr>::const_iterator timerIt = it->second->begin(); timerIt != it->second->end(); timerIt++)
+ {
+ item.reset(new CFileItem(**timerIt));
+ items.Add(item);
+ }
+ }
+}
+
+CPVRTimerInfoTagPtr CPVRTimers::GetById(unsigned int iTimerId) const
+{
+ CPVRTimerInfoTagPtr item;
+ CSingleLock lock(m_critSection);
+ for (map<CDateTime, vector<CPVRTimerInfoTagPtr>* >::const_iterator it = m_tags.begin(); !item && it != m_tags.end(); it++)
+ {
+ for (vector<CPVRTimerInfoTagPtr>::const_iterator timerIt = it->second->begin(); !item && timerIt != it->second->end(); timerIt++)
+ {
+ if ((*timerIt)->m_iTimerId == iTimerId)
+ item = *timerIt;
+ }
+ }
+ return item;
+}
std::vector<CFileItemPtr> GetActiveTimers(void) const;
/*!
+ * Get all timers
+ * @param items The list to add the timers to
+ */
+ void GetAll(CFileItemList& items) const;
+
+ /*!
* @return True when there is at least one timer that is active (states scheduled or recording), false otherwise.
*/
bool HasActiveTimers(void) const;
void Notify(const Observable &obs, const ObservableMessage msg);
+ /*!
+ * Get a timer tag given it's unique ID
+ * @param iTimerId The ID to find
+ * @return The tag, or an empty one when not found
+ */
+ CPVRTimerInfoTagPtr GetById(unsigned int iTimerId) const;
+
private:
void Unload(void);
void UpdateEpgEvent(CPVRTimerInfoTagPtr timer);
CCriticalSection m_critSection;
bool m_bIsUpdating;
std::map<CDateTime, std::vector<CPVRTimerInfoTagPtr>* > m_tags;
+ unsigned int m_iLastId;
};
}