def perform_ahead(self, timer: Timer) -> bool: found = -1 for i in range(2, TIMERS): label, path, start, days = Timer.get_quick_info(i) if (found == -1 and timer.days == days and timer.s_start == start and timer.s_path == path): found = i if found != -1: timer.i_timer = found timer.i_fade = FADE_OFF return True
def preview(addon: xbmcaddon.Addon, timerid: int, player: 'xbmc.Player') -> None: addon_dir = xbmcvfs.translatePath(addon.getAddonInfo('path')) timer = Timer.init_from_settings(timerid) if timer._is_playing_media_timer(): icon_file = os.path.join( addon_dir, "resources", "assets", "icon.png") xbmcgui.Dialog().notification(addon.getLocalizedString( 32027), addon.getLocalizedString(32110) % addon.getLocalizedString(32004 + timerid), icon=icon_file) if is_script(timer.s_path): run_addon(timer.s_path) elif timer.s_mediatype == PICTURE: play_slideshow(timer.s_path, shuffle=timer.b_shuffle) else: playlist = build_playlist(path=timer.s_path, label=timer.s_label) player.play(playlist) else: xbmcgui.Dialog().notification(addon.getLocalizedString( 32027), addon.getLocalizedString(32109))
def __init__(self) -> None: super().__init__() self._player = Player() _default_volume = xbmcaddon.Addon().getSettingInt("vol_default") self._player.setDefaultVolume(_default_volume) self._player.setVolume(_default_volume) self._timers = [Timer(i) for i in range(TIMERS)] self._update()
def _get_delay_for_seektime(_timer: Timer) -> timedelta: seektime = None if self._seek_delayed_timer and _timer.is_play_at_start_timer(): td_now = self._getNow() period = timer.get_matching_period(td_now) if period: seektime = datetime_utils.abs_time_diff( td_now, period.getStart()) seektime = None if seektime * 1000 <= self._RESPITE else seektime return seektime
def resumeFormerOrStop(self, timer: Timer) -> None: if not timer.is_resuming_timer() or not self._resumeFormer( type=timer.s_mediatype, keep=False): if timer.s_mediatype == PICTURE: self.stopPlayer(PICTURE) else: self.stop() self._reset(type=timer.s_mediatype) xbmc.sleep(self._RESPITE) self.resetResumeOfTimer(timer)
def _get_timer_preselection(self, timerid: int, label: str, path: str) -> 'tuple[Timer,bool]': timer = Timer.init_from_settings(timerid) timer.s_label = label timer.i_fade = FADE_OFF is_epg = False if pvr_utils.get_current_epg_view(): pvr_channel_path = pvr_utils.get_pvr_channel_path( pvr_utils.get_current_epg_view(), xbmc.getInfoLabel("ListItem.ChannelNumberLabel")) if pvr_channel_path: is_epg = True timer.s_label = "%s | %s" % ( xbmc.getInfoLabel("ListItem.ChannelName"), label) timer.s_path = pvr_channel_path startDate = datetime_utils.parse_xbmc_shortdate( xbmc.getInfoLabel("ListItem.Date").split(" ")[0]) timer.days = [startDate.weekday()] timer.s_start = xbmc.getInfoLabel("ListItem.StartTime") duration = xbmc.getInfoLabel("ListItem.Duration") timer.s_duration = "00:%s" % duration[:2] if len( duration) == 5 else duration[:5] if not is_epg: if TIMER_WEEKLY not in timer.days: dt_now, td_now = datetime_utils.get_now() timer.days = [dt_now.weekday()] if vfs_utils.is_favourites(path): timer.s_path = vfs_utils.get_favourites_target(path) else: timer.s_path = path timer.s_duration = timer.get_duration() timer.s_end = datetime_utils.format_from_seconds( (datetime_utils.parse_time(timer.s_start) + datetime_utils.parse_time(timer.s_duration)).seconds) if vfs_utils.is_script(timer.s_path): timer.s_mediatype = "script" else: timer.s_mediatype = vfs_utils.get_media_type(timer.s_path) return timer, is_epg
def ask_duration(self, label: str, path: str, is_epg: bool, timer: Timer) -> str: if is_epg: return DEFAULT_TIME _current = timer.get_duration() _current = "00:10" if DEFAULT_TIME else _current duration = xbmcgui.Dialog().numeric( 2, self.addon.getLocalizedString(32106), _current) if duration in ["", "0:00", "00:00"]: return None else: return ("0%s" % duration.strip())[-5:]
def ask_timer(self, timerid: int) -> int: options = [self.addon.getLocalizedString(32102)] for i in range(2, TIMERS): label, path, start, days = Timer.get_quick_info(i) options.append("%i: %s (%s%s)" % (i - 1, label, self.days_to_short(days) or self.addon.getLocalizedString(32034), ", %s" % start if days else "")) selection = xbmcgui.Dialog().select( self.addon.getLocalizedString(32103), options, preselect=0) if selection == -1: return None elif selection == 0: self.addon.openSettings() return None else: return selection + 1
def _save_resume(_timer: Timer) -> None: for _type in player_utils.get_types_replaced_by_type( timer.s_mediatype): _resume_status = self._getResumeStatus(_type) if _timer.is_resuming_timer(): _active_players = self.getActivePlayersWithPlaylist() if not _resume_status or _resume_status.isResuming(): self._resume_status[_type] = PlayerStatus( _timer, state=_active_players[_type] if _type in _active_players else None) else: _resume_status.setTimer(_timer) elif _resume_status: self.resetResumeStatus(_type)
def test_tc_5_1_1(self): """ TC 1.5.1 Single timer w/ resume and w/ former media Media 1 |---+---+---+---+---+---+---+---+---+---+----> (Picture) Timer 1 |-----+----+------R (Audio) t |----M1---|-------M1/T1-----|--------M1------> t0 t1 t2 t3 t4 Player play resume Fader 100 T1(50)-----------T1(100) """ # ------------ setup player ------------ player = MockPlayer() schedulderaction = SchedulerAction(player) playlist = player._buildPlaylist(["Pictures"], PICTURE) player.play(playlist) player.setVolume(100) # ------------ setup timers ------------ # Timer 1 (T1) timer1 = Timer(1) timer1.s_label = "Timer 1" timer1.i_end_type = END_TYPE_DURATION timer1.td_duration = timedelta(minutes=self._t3 - self._t1) timer1.i_media_action = MEDIA_ACTION_START_STOP timer1.s_path = "Audio T1" timer1.s_mediatype = AUDIO timer1.b_repeat = False timer1.b_resume = True timer1.i_fade = FADE_IN_FROM_MIN timer1.i_vol_min = 50 timer1.i_vol_max = 100 timer1.i_system_action = SYSTEM_ACTION_NONE timer1.b_active = False timer1.b_notify = False timer1.periods = [ Period(timedelta(minutes=self._t1), timedelta(minutes=self._t3)) ] timers = [timer1] # ------------ t0 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t0)) self.assertEqual(timers[0].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(PICTURE in apwpl, True) self.assertEqual(apwpl[PICTURE].playlist[0]["file"], "Pictures") self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(PICTURE), None) schedulderaction.reset() # ------------ t1 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t1)) self.assertEqual(timers[0].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer().s_label, timers[0].s_label) self.assertEqual( schedulderaction._getTimerToPlayAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 50) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() # Picture self.assertEqual(PICTURE in apwpl, True) self.assertEqual(apwpl[PICTURE].playlist[0]["file"], "Pictures") self.assertEqual(player._getResumeStatus(PICTURE), None) # Audio self.assertEqual(AUDIO in apwpl, True) self.assertEqual(apwpl[AUDIO].playlist[0]["file"], timers[0].s_path) self.assertEqual(player.getVolume(), 50) self.assertNotEqual(player._getResumeStatus(AUDIO), None) schedulderaction.reset() # ------------ t2 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t2)) self.assertEqual(timers[0].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer().s_label, timers[0].s_label) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 75) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() # Picture self.assertEqual(PICTURE in apwpl, True) self.assertEqual(apwpl[PICTURE].playlist[0]["file"], "Pictures") self.assertEqual(player._getResumeStatus(PICTURE), None) # Audio self.assertEqual(AUDIO in apwpl, True) self.assertEqual(apwpl[AUDIO].playlist[0]["file"], timers[0].s_path) self.assertEqual(player.getVolume(), 75) self.assertNotEqual(player._getResumeStatus(AUDIO), None) schedulderaction.reset() # ------------ t3 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t3)) self.assertEqual(timers[0].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 1) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual( schedulderaction._getTimerToStopAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 100) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() # Picture self.assertEqual(PICTURE in apwpl, True) self.assertEqual(apwpl[PICTURE].playlist[0]["file"], "Pictures") self.assertEqual(player._getResumeStatus(PICTURE), None) # Audio self.assertEqual(AUDIO in apwpl, False) self.assertEqual(player.getVolume(), 100) schedulderaction.reset() # ------------ t4 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t4)) self.assertEqual(timers[0].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() # Picture self.assertEqual(PICTURE in apwpl, True) self.assertEqual(apwpl[PICTURE].playlist[0]["file"], "Pictures") self.assertEqual(player._getResumeStatus(PICTURE), None) # Audio self.assertEqual(AUDIO in apwpl, False) self.assertEqual(player.getVolume(), 100) schedulderaction.reset()
def test_tc_2_3_3(self): """ Media 1 |---------| Timer 1 |------------------R Timer 2 |-----------------X t |----M1---|----T1----|-------T2--------|----------------> t0 t1 t2 t3 t4 t5 t6 t7 t8 Player play play stop """ # ------------ setup player ------------ player = MockPlayer() playlist = player._buildPlaylist(["Media M1"], VIDEO) player.play(playlist) schedulderaction = SchedulerAction(player) # ------------ setup timers ------------ # Timer 1 (T1) timer1 = Timer(1) timer1.s_label = "Timer 1" timer1.i_end_type = END_TYPE_DURATION timer1.td_duration = timedelta(minutes=self._t5 - self._t1) timer1.i_media_action = MEDIA_ACTION_START_STOP timer1.s_path = "Media T1" timer1.s_mediatype = VIDEO timer1.b_repeat = False timer1.b_resume = True timer1.i_fade = FADE_OFF timer1.i_vol_min = 0 timer1.i_vol_max = 100 timer1.i_system_action = SYSTEM_ACTION_NONE timer1.b_active = False timer1.b_notify = False timer1.periods = [ Period(timedelta(minutes=self._t1), timedelta(minutes=self._t5)) ] # Timer 2 (T2) timer2 = Timer(2) timer2.s_label = "Timer 2" timer2.i_end_type = END_TYPE_DURATION timer2.td_duration = timedelta(minutes=self._t7 - self._t3) timer2.i_media_action = MEDIA_ACTION_START_STOP timer2.s_path = "Media T2" timer2.s_mediatype = VIDEO timer2.b_repeat = False timer2.b_resume = False timer2.i_fade = FADE_OFF timer2.i_vol_min = 0 timer2.i_vol_max = 100 timer2.i_system_action = SYSTEM_ACTION_NONE timer2.b_active = False timer2.b_notify = False timer2.periods = [ Period(timedelta(minutes=self._t3), timedelta(minutes=self._t7)) ] timers = [timer1, timer2] # ------------ t0 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t0)) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], "Media M1") self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t1 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t1)) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual( schedulderaction._getTimerToPlayAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[0].s_path) self.assertEqual(player.getVolume(), 100) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[0].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") schedulderaction.reset() # ------------ t2 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t2)) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[0].s_path) self.assertEqual(player.getVolume(), 100) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[0].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") schedulderaction.reset() # ------------ t3 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t3)) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual( schedulderaction._getTimerToPlayAV().getTimer().i_timer, timers[1].i_timer) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[1].s_path) self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t4 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t4)) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 2) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[1].s_path) self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t5 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t5)) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 1) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[1].s_path) self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t6 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t6)) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[1].s_path) self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t7 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t7)) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 1) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual( schedulderaction._getTimerToStopAV().getTimer().i_timer, timers[1].i_timer) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(len(apwpl), 0) self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t8 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t8)) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(len(apwpl), 0) self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset()
def _apply(self, timer: Timer) -> None: timer.save_to_settings()
def test_tc_4_2(self): """ Media 1 |---------| |----------------> Timer 1 |-------------------------R Timer 2 |------R t |----M1---|--T1--|--T2--|---T1------|------M1--------> t0 t1 t2 t3 t4 t5 t6 t7 t8 Player play play resume resume """ # ------------ setup player ------------ player = MockPlayer() player.setSeekDelayedTimer(True) playlist = player._buildPlaylist(["Media M1"], VIDEO) player.play(playlist) player.setDefaultVolume(100) player.setShuffled(True) player.setRepeat(REPEAT_ALL) player.setVolume(80) schedulderaction = SchedulerAction(player) # ------------ setup timers ------------ # Timer 1 (T1) timer1 = Timer(1) timer1.s_label = "Timer 1" timer1.i_end_type = END_TYPE_DURATION timer1.td_duration = timedelta(minutes=self._t7 - self._t1) timer1.i_media_action = MEDIA_ACTION_START_STOP timer1.s_path = "Media T1.1 (0:45)|Media T1.2 (1:55)|Media T1.3 (0:55)|Media T1.4 (1:13)|Media T1.5 (2:39)" timer1.s_mediatype = VIDEO timer1.b_repeat = False timer1.b_shuffle = False timer1.b_resume = True timer1.i_fade = FADE_IN_FROM_MIN timer1.i_vol_min = 30 timer1.i_vol_max = 100 timer1.i_system_action = SYSTEM_ACTION_NONE timer1.b_active = False timer1.b_notify = False timer1.periods = [ Period(timedelta(minutes=self._t1), timedelta(minutes=self._t7)) ] # Timer 2 (T2) timer2 = Timer(2) timer2.s_label = "Timer 2" timer2.i_end_type = END_TYPE_DURATION timer2.td_duration = timedelta(minutes=self._t5 - self._t3) timer2.i_media_action = MEDIA_ACTION_START_STOP timer2.s_path = "Media T2" timer2.s_mediatype = VIDEO timer2.b_repeat = True timer2.b_shuffle = True timer2.b_resume = True timer2.i_fade = FADE_OUT_FROM_MAX timer2.i_vol_min = 0 timer2.i_vol_max = 100 timer2.i_system_action = SYSTEM_ACTION_NONE timer2.b_active = False timer2.b_notify = False timer2.periods = [ Period(timedelta(minutes=self._t3), timedelta(minutes=self._t5)) ] timers = [timer1, timer2] # ------------ t0 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t0)) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], "Media M1") self.assertEqual(player.getVolume(), 80) self.assertEqual(player._getResumeStatus(VIDEO), None) self.assertEqual(apwpl[VIDEO].shuffled, True) self.assertEqual(apwpl[VIDEO].repeat, REPEAT_ALL) schedulderaction.reset() # ------------ t1 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t1)) player._td_now = timedelta(minutes=self._t1) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer(), timer1) self.assertEqual( schedulderaction._getTimerToPlayAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 30) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[0].s_path.split("|")[0]) self.assertEqual(player.getVolume(), 30) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[0].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") self.assertEqual(apwpl[VIDEO].shuffled, False) self.assertEqual(apwpl[VIDEO].repeat, REPEAT_OFF) schedulderaction.reset() # ------------ t2 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t2)) player._td_now = timedelta(minutes=self._t2) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer(), timer1) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 41) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[0].s_path.split("|")[0]) self.assertEqual(player.getVolume(), 41) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[0].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") self.assertEqual(apwpl[VIDEO].shuffled, False) self.assertEqual(apwpl[VIDEO].repeat, REPEAT_OFF) schedulderaction.reset() # ------------ t3 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t3)) player._td_now = timedelta(minutes=self._t3) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer(), timer1) self.assertEqual( schedulderaction._getTimerToPlayAV().getTimer().i_timer, timers[1].i_timer) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 53) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[1].s_path) self.assertEqual(player.getVolume(), 53) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[1].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") self.assertEqual(apwpl[VIDEO].shuffled, True) self.assertEqual(apwpl[VIDEO].repeat, REPEAT_ALL) schedulderaction.reset() # ------------ t4 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t4)) player._td_now = timedelta(minutes=self._t4) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 2) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer(), timer1) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 65) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[1].s_path) self.assertEqual(player.getVolume(), 65) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[1].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") self.assertEqual(apwpl[VIDEO].shuffled, True) self.assertEqual(apwpl[VIDEO].repeat, REPEAT_ALL) schedulderaction.reset() # ------------ t5 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t5)) player._td_now = timedelta(minutes=self._t5) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 1) self.assertEqual(schedulderaction._getFader().getTimer(), timer1) self.assertEqual( schedulderaction._getTimerToPlayAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 76) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].position, 3) self.assertEqual(apwpl[VIDEO].time, 1500) self.assertEqual(apwpl[VIDEO].playlist[3]["file"], timers[0].s_path.split("|")[3]) self.assertEqual(player.getVolume(), 76) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[0].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") self.assertEqual(apwpl[VIDEO].shuffled, False) self.assertEqual(apwpl[VIDEO].repeat, REPEAT_OFF) schedulderaction.reset() # ------------ t6 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t6)) player._td_now = timedelta(minutes=self._t6) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer(), timer1) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 88) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[3]["file"], timers[0].s_path.split("|")[3]) self.assertEqual(player.getVolume(), 88) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[0].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") self.assertEqual(apwpl[VIDEO].shuffled, False) self.assertEqual(apwpl[VIDEO].repeat, REPEAT_OFF) schedulderaction.reset() # ------------ t7 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t7)) player._td_now = timedelta(minutes=self._t7) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 1) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual( schedulderaction._getTimerToStopAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 80) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], "Media M1") self.assertEqual(player.getVolume(), 80) self.assertEqual(player._getResumeStatus(VIDEO), None) self.assertEqual(apwpl[VIDEO].shuffled, True) self.assertEqual(apwpl[VIDEO].repeat, REPEAT_ALL) schedulderaction.reset() # ------------ t8 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t8)) player._td_now = timedelta(minutes=self._t8) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], "Media M1") self.assertEqual(player.getVolume(), 80) self.assertEqual(player._getResumeStatus(VIDEO), None) self.assertEqual(apwpl[VIDEO].shuffled, True) self.assertEqual(apwpl[VIDEO].repeat, REPEAT_ALL) schedulderaction.reset()
def test_tc_1_3(self): """ TC 1.3. Single timer w/o resume and w/ former media Media 1 |---------| (tested w/ PVR and Playlist) Timer 1 |-----------------X (tested w/ PVR and Playlist) t |----M1---|-------T1--------|----------------> t0 t1 t2 t3 t4 Player play stop Fader 80 T1(=)-----------T1(40) """ # ------------ setup player ------------ player = MockPlayer() playlist = player._buildPlaylist(["Media M1"], VIDEO) player.play(playlist) player.setVolume(80) schedulderaction = SchedulerAction(player) # ------------ setup timers ------------ # Timer 1 (T1) timer1 = Timer(1) timer1.s_label = "Timer 1" timer1.i_end_type = END_TYPE_DURATION timer1.td_duration = timedelta(minutes=self._t3 - self._t1) timer1.i_media_action = MEDIA_ACTION_START_STOP timer1.s_path = "Media T1" timer1.s_mediatype = VIDEO timer1.b_repeat = False timer1.b_resume = False timer1.i_fade = FADE_OUT_FROM_CURRENT timer1.i_vol_min = 40 timer1.i_vol_max = None timer1.i_system_action = SYSTEM_ACTION_NONE timer1.b_active = False timer1.b_notify = False timer1.periods = [ Period(timedelta(minutes=self._t1), timedelta(minutes=self._t3)) ] timers = [timer1] # ------------ t0 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t0)) self.assertEqual(timers[0].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(apwpl[VIDEO].playlist[0]["file"], "Media M1") self.assertEqual(player.getVolume(), 80) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t1 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t1)) self.assertEqual(timers[0].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer().s_label, timers[0].s_label) self.assertEqual( schedulderaction._getTimerToPlayAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 80) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[0].s_path) self.assertEqual(player.getVolume(), 80) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t2 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t2)) self.assertEqual(timers[0].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer().s_label, timers[0].s_label) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(player.getVolume(), 80) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[0].s_path) self.assertEqual(player.getVolume(), 60) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t3 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t3)) self.assertEqual(timers[0].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 1) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual( schedulderaction._getTimerToStopAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 80) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(len(apwpl), 0) self.assertEqual(player.getVolume(), 80) self.assertEqual(player._getResumeStatus(AUDIO), None) self.assertEqual(player._getResumeStatus(VIDEO), None) self.assertEqual(player._getResumeStatus(PICTURE), None) schedulderaction.reset() # ------------ t4 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t4)) self.assertEqual(timers[0].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(len(apwpl), 0) self.assertEqual(player.getVolume(), 80) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset()
def test_tc_6_1_1(self): """ Media 1 |---------| |----------------> Timer 1 |----------S (Systemaction) Timer 2 |-----------------R t |----M1---|----T1----|-----------------|-----------------> t0 t1 t2 t3 t4 t5 t6 Player play Shutdown """ # ------------ setup player ------------ player = MockPlayer() playlist = player._buildPlaylist(["Media M1"], VIDEO) player.play(playlist) player.setDefaultVolume(100) player.setVolume(80) schedulderaction = SchedulerAction(player) # ------------ setup timers ------------ # Timer 1 (T1) timer1 = Timer(1) timer1.s_label = "Timer 1" timer1.i_end_type = END_TYPE_DURATION timer1.td_duration = timedelta(minutes=self._t3 - self._t1) timer1.i_media_action = MEDIA_ACTION_START_STOP timer1.s_path = "Media T1" timer1.s_mediatype = VIDEO timer1.b_repeat = False timer1.b_resume = True timer1.i_fade = FADE_OUT_FROM_CURRENT timer1.i_vol_min = 50 timer1.i_vol_max = 100 timer1.i_system_action = SYSTEM_ACTION_SHUTDOWN_KODI timer1.b_active = False timer1.b_notify = False timer1.periods = [ Period(timedelta(minutes=self._t1), timedelta(minutes=self._t3)) ] # Timer 2 (T2) timer2 = Timer(2) timer2.s_label = "Timer 2" timer2.i_end_type = END_TYPE_DURATION timer2.td_duration = timedelta(minutes=self._t5 - self._t3) timer2.i_media_action = MEDIA_ACTION_START_STOP timer2.s_path = "Media T2" timer2.s_mediatype = VIDEO timer2.b_repeat = False timer2.b_resume = True timer2.i_fade = FADE_OFF timer2.i_vol_min = 0 timer2.i_vol_max = 100 timer2.i_system_action = SYSTEM_ACTION_NONE timer2.b_active = False timer2.b_notify = False timer2.periods = [ Period(timedelta(minutes=self._t3), timedelta(minutes=self._t5)) ] timers = [timer1, timer2] # ------------ t0 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t0)) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], "Media M1") self.assertEqual(player.getVolume(), 80) self.assertEqual(player._getResumeStatus(VIDEO), None) schedulderaction.reset() # ------------ t1 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t1)) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer().i_timer, timers[0].i_timer) self.assertEqual( schedulderaction._getTimerToPlayAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 80) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[0].s_path) self.assertEqual(player.getVolume(), 80) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[0].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") schedulderaction.reset() # ------------ t2 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t2)) self.assertEqual(timers[0].b_active, True) self.assertEqual(timers[1].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 65) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(VIDEO in apwpl, True) self.assertEqual(apwpl[VIDEO].playlist[0]["file"], timers[0].s_path) self.assertEqual(player.getVolume(), 65) self.assertNotEqual(player._getResumeStatus(VIDEO), None) self.assertEqual( player._getResumeStatus(VIDEO)._timer.i_timer, timers[0].i_timer) self.assertEqual( player._getResumeStatus(VIDEO)._state.playlist[0]["file"], "Media M1") schedulderaction.reset() # ------------ t3 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t3)) self.assertEqual(timers[0].b_active, False) self.assertEqual(timers[1].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 1) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual( schedulderaction._getTimerToStopAV().getTimer().i_timer, timers[0].i_timer) self.assertEqual( schedulderaction._getTimerToStopSlideshow().getTimer().i_timer, timers[0].i_timer) self.assertEqual( schedulderaction._getTimerWithSystemAction().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._volume, 100) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(len(apwpl), 0) self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(AUDIO), None) self.assertEqual(player._getResumeStatus(VIDEO), None) self.assertEqual(player._getResumeStatus(PICTURE), None) schedulderaction.reset()
def test_tc_1_4(self): """ TC 1.1. Single slideshow timer w/ resume but w/o former media Timer 1 |-----------------R (Slideshow) t |---------|-------T1--------|----------------> t0 t1 t2 t3 t4 Player play stop Fader 100 T1(100)-----------T1(50) """ # ------------ setup player ------------d player = MockPlayer() schedulderaction = SchedulerAction(player) player.setVolume(100) # ------------ setup timers ------------ # Timer 1 (T1) timer1 = Timer(1) timer1.s_label = "Timer 1" timer1.i_end_type = END_TYPE_DURATION timer1.td_duration = timedelta(minutes=self._t3 - self._t1) timer1.i_media_action = MEDIA_ACTION_START_STOP timer1.s_path = "Slideshow T1" timer1.s_mediatype = PICTURE timer1.b_repeat = False timer1.b_resume = True timer1.i_fade = FADE_OUT_FROM_CURRENT timer1.i_vol_min = 50 timer1.i_vol_max = 100 timer1.i_system_action = SYSTEM_ACTION_NONE timer1.b_active = False timer1.b_notify = False timer1.periods = [ Period(timedelta(minutes=self._t1), timedelta(minutes=self._t3)) ] timers = [timer1] # ------------ t0 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t0)) self.assertEqual(timers[0].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToPlaySlideshow(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerToStopSlideshow(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(len(apwpl), 0) self.assertEqual(player._getResumeStatus(PICTURE), None) self.assertEqual(player.getVolume(), 100) schedulderaction.reset() # ------------ t1 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t1)) self.assertEqual(timers[0].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 1) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer().s_label, timers[0].s_label) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual( schedulderaction._getTimerToPlaySlideshow().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 100) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(PICTURE in apwpl, True) self.assertEqual(apwpl[PICTURE].playlist[0]["file"], timers[0].s_path) self.assertNotEqual(player._getResumeStatus(PICTURE), None) self.assertEqual( player._getResumeStatus(PICTURE)._timer.i_timer, timers[0].i_timer) self.assertEqual(player._getResumeStatus(PICTURE)._state, None) self.assertEqual(player.getVolume(), 100) schedulderaction.reset() # ------------ t2 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t2)) self.assertEqual(timers[0].b_active, True) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 1) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader().getTimer().s_label, timers[0].s_label) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 75) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(PICTURE in apwpl, True) self.assertEqual(apwpl[PICTURE].playlist[0]["file"], timers[0].s_path) self.assertNotEqual(player._getResumeStatus(PICTURE), None) self.assertEqual( player._getResumeStatus(PICTURE)._timer.i_timer, timers[0].i_timer) self.assertEqual(player._getResumeStatus(PICTURE)._state, None) self.assertEqual(player.getVolume(), 75) schedulderaction.reset() # ------------ t3 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t3)) self.assertEqual(timers[0].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 1) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual( schedulderaction._getTimerToStopSlideshow().getTimer().i_timer, timers[0].i_timer) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, 100) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(len(apwpl), 0) self.assertEqual(player.getVolume(), 100) self.assertEqual(player._getResumeStatus(AUDIO), None) self.assertEqual(player._getResumeStatus(VIDEO), None) self.assertEqual(player._getResumeStatus(PICTURE), None) schedulderaction.reset() # ------------ t4 ------------ schedulderaction.initFromTimers(timers, timedelta(minutes=self._t4)) self.assertEqual(timers[0].b_active, False) self.assertEqual(len(schedulderaction._getBeginningTimers()), 0) self.assertEqual(len(schedulderaction._getRunningTimers()), 0) self.assertEqual(len(schedulderaction._getEndingTimers()), 0) self.assertEqual(schedulderaction._getFader(), None) self.assertEqual(schedulderaction._getTimerToPlayAV(), None) self.assertEqual(schedulderaction._getTimerToStopAV(), None) self.assertEqual(schedulderaction._getTimerWithSystemAction(), None) self.assertEqual(schedulderaction._volume, None) schedulderaction.perform() apwpl = player.getActivePlayersWithPlaylist() self.assertEqual(len(apwpl), 0) self.assertEqual(player._getResumeStatus(PICTURE), None) self.assertEqual(player.getVolume(), 100) schedulderaction.reset()