Skip to content

Commit 4d07fb5

Browse files
committed
implemented #1.
now scoreboardHelper stops cycling on last player logout and resumes on first player login.
1 parent 4b9d5b7 commit 4d07fb5

File tree

1 file changed

+50
-7
lines changed

1 file changed

+50
-7
lines changed

scoreboardHelper/scoreboardHelper.py

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,22 @@ def __init__(self, logger, core, config_file):
4242
self.cycle_enabled = self.configs.get('cycle_enabled', True)
4343
self.cycle_index = 0
4444
self.cycle_timer = QtCore.QTimer(self)
45-
self.cycle_timer.timeout.connect(self.cycle_timer_action) # type: ignore[attr-defined]
4645
self.std_cyc_interval_ms = self.configs.get('sec_between_cycle', self._default_cycle_interval) * 1000 # msec
47-
self.cycle_timer.start(self.std_cyc_interval_ms) # start cycle timer
4846
self._cycle_remaining_ms = 0 # msec
47+
self.cycle_timer.setInterval(self.std_cyc_interval_ms)
48+
self.cycle_timer.timeout.connect(self.cycle_timer_action) # type: ignore[attr-defined]
49+
if self.cycle_enabled:
50+
self.cycle_timer.start() # start cycle timer
51+
52+
# initialize view timer
53+
self.view_timer = QtCore.QTimer(self)
54+
self.view_timer.setSingleShot(True)
55+
self.view_timer.timeout.connect(self.view_timer_end) # type: ignore[attr-defined]
4956

5057
# connect signals and slots
5158
self.utils.sig_input.connect(self.on_player_input)
59+
self.utils.sig_login.connect(self.on_player_login)
60+
self.utils.sig_logout.connect(self.on_player_logout)
5261

5362
# available commands
5463
self.cmd_list = {
@@ -69,6 +78,7 @@ def unknown_command(self, player):
6978
self.utils.tell(player, f'Unknown command. Type "{self._cmd_prefix} help" for help.')
7079

7180

81+
## Slots for mcBasicLib signals
7282
@QtCore.pyqtSlot(tuple)
7383
def on_player_input(self, pair):
7484
self.logger.debug(f'{self.__class__.__name__}.on_player_input() called')
@@ -81,6 +91,42 @@ def on_player_input(self, pair):
8191
else:
8292
self.unknown_command(player)
8393

94+
@QtCore.pyqtSlot(object)
95+
def on_player_login(self, player):
96+
self.logger.debug(f'{self.__class__.__name__}.on_player_login() called for player {player.name}')
97+
# when a player logs in, check if cycle timer is paused,
98+
# if paused, resume the cycle timer.
99+
if len(self.utils.get_online_player_list()) == 1: # first player online
100+
self.logger.debug('First player logged in. Resuming cycle timer if paused.')
101+
if self.cycle_enabled and not self.cycle_timer.isActive():
102+
if self._cycle_remaining_ms > 0:
103+
self.cycle_timer.start(self._cycle_remaining_ms)
104+
self.logger.debug(f'Cycle timer resumed with {self._cycle_remaining_ms} ms remaining.')
105+
self._cycle_remaining_ms = 0
106+
else:
107+
self.cycle_timer.start()
108+
self.logger.debug('Cycle timer started normally.')
109+
else:
110+
self.logger.debug('Cycle disabled or is already running; no action taken.')
111+
112+
@QtCore.pyqtSlot(object)
113+
def on_player_logout(self, player):
114+
self.logger.debug(f'{self.__class__.__name__}.on_player_logout() called for player {player.name}')
115+
# when a player logs out, check online list,
116+
# if no players online, end the view timer and pause the cycle timer.
117+
if len(self.utils.get_online_player_list()) == 0:
118+
self.logger.debug('No players online. Ending view timer and pausing cycle timer.')
119+
if self.view_timer.isActive():
120+
self.view_timer.stop()
121+
self.view_timer_end()
122+
self.logger.debug('View timer ended.')
123+
if self.cycle_enabled:
124+
self._cycle_remaining_ms = self.cycle_timer.remainingTime()
125+
self.cycle_timer.stop()
126+
self.logger.debug(f'Cycle timer paused with {self._cycle_remaining_ms} ms remaining.')
127+
else:
128+
self.logger.debug('Cycle disabled; no action taken.')
129+
84130

85131
def update_config_json(self):
86132
json.dump(self.configs, open(self.config_file, 'w', encoding='utf-8'), indent=4)
@@ -110,7 +156,7 @@ def view_timer_end(self):
110156
if self.cycle_enabled:
111157
if self._cycle_remaining_ms > 0:
112158
self.cycle_timer.start(self._cycle_remaining_ms)
113-
self._cycle_remaining_ms = 0 # Reset instead of delete to avoid attribute error
159+
self._cycle_remaining_ms = 0
114160
else:
115161
self.cycle_timer.start()
116162

@@ -176,9 +222,6 @@ def view_sb(self, player, args: list):
176222
self.core.write_server(f'/scoreboard objectives setdisplay sidebar {sb_name}')
177223
view_interval = self.configs.get('sec_view_stay', self._default_view_stay) # sec
178224
self.utils.tell(player, f'Viewing \'{sb_name}\' for {view_interval} seconds.')
179-
self.view_timer = QtCore.QTimer(self)
180-
self.view_timer.timeout.connect(self.view_timer_end) # type: ignore[attr-defined]
181-
self.view_timer.setSingleShot(True)
182225
self.view_timer.start(view_interval * 1000)
183226

184227

@@ -187,7 +230,7 @@ def skip_sb(self, player, args: list):
187230
self.unknown_command(player)
188231
return
189232

190-
if hasattr(self, 'view_timer') and self.view_timer.isActive(): # player is viewing a selected scoreboard
233+
if self.view_timer.isActive(): # player is viewing a selected scoreboard
191234
self.logger.debug('skip_sb(): view timer is active.')
192235
self.view_timer.stop()
193236
self.view_timer_end()

0 commit comments

Comments
 (0)