128 lines
5.6 KiB
Python
128 lines
5.6 KiB
Python
with open('core/ui/flet/app_v2.py', 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
|
|
# Patch 1: Add lock alongside _score_refreshing init
|
|
old_init = " self._score_refreshing = False # 刷新锁"
|
|
new_init = " self._score_refreshing = False\n self._score_lock = threading.Lock()"
|
|
content = content.replace(old_init, new_init, 1)
|
|
print('Patch 1 (init):', 'OK' if old_init not in content else 'NOT FOUND')
|
|
|
|
# Patch 2: _prev_day - use lock instead of flag guard
|
|
old_prev = ''' def _prev_day(_):
|
|
if self._score_refreshing:
|
|
return
|
|
self._score_cur_date -= timedelta(days=1)
|
|
self._score_date_label.value = str(self._score_cur_date)
|
|
self._score_refreshing = True
|
|
self._score_nav_btns[0].disabled = True
|
|
self._score_nav_btns[1].disabled = True
|
|
self._score_nav_btns[2].disabled = True
|
|
self._refresh_scoring()'''
|
|
new_prev = ''' def _prev_day(_):
|
|
if not self._score_lock.acquire(blocking=False):
|
|
return
|
|
self._score_cur_date -= timedelta(days=1)
|
|
self._score_date_label.value = str(self._score_cur_date)
|
|
self._score_date_label.update()
|
|
self._score_refreshing = True
|
|
for btn in self._score_nav_btns:
|
|
btn.disabled = True
|
|
for btn in self._score_nav_btns:
|
|
btn.update()
|
|
self._refresh_scoring()'''
|
|
content = content.replace(old_prev, new_prev, 1)
|
|
print('Patch 2 (_prev_day):', 'OK' if old_prev not in content else 'NOT FOUND')
|
|
|
|
# Patch 3: _next_day - use lock
|
|
old_next = ''' def _next_day(_):
|
|
if self._score_refreshing:
|
|
return
|
|
if self._score_cur_date >= self._score_max_date:
|
|
return
|
|
self._score_cur_date += timedelta(days=1)
|
|
self._score_date_label.value = str(self._score_cur_date)
|
|
self._score_refreshing = True
|
|
self._score_nav_btns[0].disabled = True
|
|
self._score_nav_btns[1].disabled = True
|
|
self._score_nav_btns[2].disabled = True
|
|
self._refresh_scoring()'''
|
|
new_next = ''' def _next_day(_):
|
|
if not self._score_lock.acquire(blocking=False):
|
|
return
|
|
if self._score_cur_date >= self._score_max_date:
|
|
self._score_lock.release()
|
|
return
|
|
self._score_cur_date += timedelta(days=1)
|
|
self._score_date_label.value = str(self._score_cur_date)
|
|
self._score_date_label.update()
|
|
self._score_refreshing = True
|
|
for btn in self._score_nav_btns:
|
|
btn.disabled = True
|
|
for btn in self._score_nav_btns:
|
|
btn.update()
|
|
self._refresh_scoring()'''
|
|
content = content.replace(old_next, new_next, 1)
|
|
print('Patch 3 (_next_day):', 'OK' if old_next not in content else 'NOT FOUND')
|
|
|
|
# Patch 4: _today - use lock
|
|
old_today = ''' def _today(_):
|
|
if self._score_refreshing:
|
|
return
|
|
if self._score_cur_date >= self._score_max_date:
|
|
return
|
|
self._score_cur_date = self._score_max_date
|
|
self._score_date_label.value = str(self._score_cur_date)
|
|
self._score_refreshing = True
|
|
self._score_nav_btns[0].disabled = True
|
|
self._score_nav_btns[1].disabled = True
|
|
self._score_nav_btns[2].disabled = True
|
|
self._refresh_scoring()'''
|
|
new_today = ''' def _today(_):
|
|
if not self._score_lock.acquire(blocking=False):
|
|
return
|
|
if self._score_cur_date >= self._score_max_date:
|
|
self._score_lock.release()
|
|
return
|
|
self._score_cur_date = self._score_max_date
|
|
self._score_date_label.value = str(self._score_cur_date)
|
|
self._score_date_label.update()
|
|
self._score_refreshing = True
|
|
for btn in self._score_nav_btns:
|
|
btn.disabled = True
|
|
for btn in self._score_nav_btns:
|
|
btn.update()
|
|
self._refresh_scoring()'''
|
|
content = content.replace(old_today, new_today, 1)
|
|
print('Patch 4 (_today):', 'OK' if old_today not in content else 'NOT FOUND')
|
|
|
|
# Patch 5: _revert_nav_btns - release lock at end
|
|
old_revert = ''' def _revert_nav_btns(self):
|
|
"""重新启用导航按钮并解除刷新锁;已达上限日期时禁用'明天'和'今天'按钮"""
|
|
self._score_refreshing = False
|
|
at_max = self._score_cur_date >= self._score_max_date
|
|
for btn in self._score_nav_btns:
|
|
btn.disabled = False
|
|
if at_max:
|
|
self._score_nav_btns[1].disabled = True # next
|
|
self._score_nav_btns[2].disabled = True # today
|
|
for btn in self._score_nav_btns:
|
|
btn.update()'''
|
|
new_revert = ''' def _revert_nav_btns(self):
|
|
"""重新启用导航按钮并解除刷新锁;已达上限日期时禁用'明天'和'今天'按钮"""
|
|
self._score_refreshing = False
|
|
at_max = self._score_cur_date >= self._score_max_date
|
|
for btn in self._score_nav_btns:
|
|
btn.disabled = False
|
|
if at_max:
|
|
self._score_nav_btns[1].disabled = True # next
|
|
self._score_nav_btns[2].disabled = True # today
|
|
for btn in self._score_nav_btns:
|
|
btn.update()
|
|
self._score_lock.release()'''
|
|
content = content.replace(old_revert, new_revert, 1)
|
|
print('Patch 5 (_revert_nav_btns):', 'OK' if old_revert not in content else 'NOT FOUND')
|
|
|
|
with open('core/ui/flet/app_v2.py', 'w', encoding='utf-8') as f:
|
|
f.write(content)
|
|
print('Done writing')
|