This commit is contained in:
2026-07-06 09:12:38 +08:00
parent fd5337f163
commit de83f97c05
6 changed files with 381 additions and 61 deletions
+127
View File
@@ -0,0 +1,127 @@
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')