hmtxj commited on
Commit ·
e944f59
1
Parent(s): e50dee8
i18n: UI全中文化
Browse files
app.py
CHANGED
|
@@ -1013,7 +1013,7 @@ def toggle_pause():
|
|
| 1013 |
|
| 1014 |
def get_pause_btn_text():
|
| 1015 |
"""获取暂停按钮文字"""
|
| 1016 |
-
return "▶️
|
| 1017 |
|
| 1018 |
def stop_task():
|
| 1019 |
"""彻底停止任务,保存数据并刷新状态"""
|
|
@@ -1077,7 +1077,7 @@ def get_status_html():
|
|
| 1077 |
return '''
|
| 1078 |
<div class="running-indicator">
|
| 1079 |
<div class="spinner" style="border-color: #e74c3c; border-top-color: transparent;"></div>
|
| 1080 |
-
<span style="color: #e74c3c; font-weight: 600;">🛑
|
| 1081 |
</div>
|
| 1082 |
'''
|
| 1083 |
if is_refreshing:
|
|
@@ -1096,14 +1096,13 @@ def get_status_html():
|
|
| 1096 |
progress_pct = min(100, int((current_account_idx / total_accounts) * 100))
|
| 1097 |
progress_text = f"{current_account_idx}/{total_accounts}"
|
| 1098 |
|
| 1099 |
-
if is_paused:
|
| 1100 |
return f'''
|
| 1101 |
<div style="text-align: center;">
|
| 1102 |
<div class="status-badge" style="background: rgba(241, 196, 15, 0.1); color: #f1c40f; border-color: #f1c40f;">
|
| 1103 |
-
⛸️
|
| 1104 |
</div>
|
| 1105 |
<div class="runtime-display" style="margin-top: 8px; color: #f1c40f;">
|
| 1106 |
-
⏱️ {runtime_str} | {progress_text}
|
| 1107 |
</div>
|
| 1108 |
</div>
|
| 1109 |
'''
|
|
@@ -1112,7 +1111,7 @@ def get_status_html():
|
|
| 1112 |
<div style="text-align: center;">
|
| 1113 |
<div class="running-indicator">
|
| 1114 |
<div class="spinner"></div>
|
| 1115 |
-
<span style="color: var(--term-blue); font-weight: 600;">🔄
|
| 1116 |
</div>
|
| 1117 |
<div class="runtime-display" style="margin-top: 8px;">
|
| 1118 |
⏱️ {runtime_str} | 📊 {progress_text}
|
|
@@ -1124,12 +1123,12 @@ def get_status_html():
|
|
| 1124 |
'''
|
| 1125 |
|
| 1126 |
if is_paused:
|
| 1127 |
-
return '<div class="status-badge" style="background: rgba(241, 196, 15, 0.1); color: #f1c40f; border-color: #f1c40f;">⛸️
|
| 1128 |
|
| 1129 |
-
return '<div class="status-badge status-idle">💤
|
| 1130 |
|
| 1131 |
def get_time_str():
|
| 1132 |
-
return f"
|
| 1133 |
|
| 1134 |
def check_auth(password):
|
| 1135 |
"""验证管理密码"""
|
|
@@ -1226,7 +1225,7 @@ with gr.Blocks() as app:
|
|
| 1226 |
with gr.Column(visible=bool(ADMIN_PASSWORD)) as login_page:
|
| 1227 |
gr.HTML('''
|
| 1228 |
<div class="login-container">
|
| 1229 |
-
<div class="login-title">🔐 Gemini
|
| 1230 |
<div class="login-subtitle">请输入管理密码</div>
|
| 1231 |
</div>
|
| 1232 |
''')
|
|
@@ -1251,10 +1250,10 @@ with gr.Blocks() as app:
|
|
| 1251 |
<div class="dot red"></div>
|
| 1252 |
<div class="dot yellow"></div>
|
| 1253 |
<div class="dot green"></div>
|
| 1254 |
-
<div style="margin-left: 10px; color: var(--text-secondary); font-size: 13px; font-weight: 600;">Gemini
|
| 1255 |
</div>
|
| 1256 |
<div style="display: flex; gap: 8px; align-items: center;">
|
| 1257 |
-
<button id="theme-toggle">🌘
|
| 1258 |
</div>
|
| 1259 |
</div>
|
| 1260 |
<script>
|
|
@@ -1264,7 +1263,7 @@ with gr.Blocks() as app:
|
|
| 1264 |
var isDark = document.body.classList.contains('dark-theme');
|
| 1265 |
localStorage.setItem('theme', isDark ? 'dark' : 'light');
|
| 1266 |
var btn = document.getElementById('theme-toggle');
|
| 1267 |
-
if(btn) btn.innerText = isDark ? '☀️
|
| 1268 |
}
|
| 1269 |
|
| 1270 |
// 初始化主题 - 默认浅色(CSS 已默认浅色)
|
|
@@ -1281,7 +1280,7 @@ with gr.Blocks() as app:
|
|
| 1281 |
btn.onclick = toggleTheme;
|
| 1282 |
// 更新按钮文字
|
| 1283 |
var isDark = document.body.classList.contains('dark-theme');
|
| 1284 |
-
btn.innerText = isDark ? '☀️
|
| 1285 |
}
|
| 1286 |
|
| 1287 |
// 延迟再检查一次(防止 Gradio 动态加载覆盖)
|
|
@@ -1291,7 +1290,7 @@ with gr.Blocks() as app:
|
|
| 1291 |
btn2.onclick = toggleTheme;
|
| 1292 |
}
|
| 1293 |
var isDark2 = document.body.classList.contains('dark-theme');
|
| 1294 |
-
if (btn2) btn2.innerText = isDark2 ? '☀️
|
| 1295 |
}, 500);
|
| 1296 |
})();
|
| 1297 |
</script>
|
|
@@ -1300,7 +1299,7 @@ with gr.Blocks() as app:
|
|
| 1300 |
# 控制台区域
|
| 1301 |
with gr.Row(elem_classes=["p-4"]):
|
| 1302 |
with gr.Column(scale=3):
|
| 1303 |
-
gr.Markdown("### 💎 Gemini
|
| 1304 |
|
| 1305 |
with gr.Column(scale=2):
|
| 1306 |
# 状态显示 - 每秒刷新
|
|
@@ -1310,9 +1309,9 @@ with gr.Blocks() as app:
|
|
| 1310 |
with gr.Column(scale=1):
|
| 1311 |
# 操作按钮
|
| 1312 |
with gr.Row():
|
| 1313 |
-
refresh_btn = gr.Button("🚀
|
| 1314 |
pause_btn = gr.Button(get_pause_btn_text(), variant="secondary", elem_classes=["action-btn"])
|
| 1315 |
-
stop_btn = gr.Button("🛑
|
| 1316 |
# 登出按钮
|
| 1317 |
logout_btn = gr.Button("🚪 登出", size="sm", visible=bool(ADMIN_PASSWORD))
|
| 1318 |
|
|
@@ -1359,4 +1358,4 @@ if __name__ == "__main__":
|
|
| 1359 |
css=CUSTOM_CSS,
|
| 1360 |
js=JS_CODE
|
| 1361 |
)
|
| 1362 |
-
# Force Update 01/20/2026 20:
|
|
|
|
| 1013 |
|
| 1014 |
def get_pause_btn_text():
|
| 1015 |
"""获取暂停按钮文字"""
|
| 1016 |
+
return "▶️ 继续" if is_paused else "⛸️ 暂停"
|
| 1017 |
|
| 1018 |
def stop_task():
|
| 1019 |
"""彻底停止任务,保存数据并刷新状态"""
|
|
|
|
| 1077 |
return '''
|
| 1078 |
<div class="running-indicator">
|
| 1079 |
<div class="spinner" style="border-color: #e74c3c; border-top-color: transparent;"></div>
|
| 1080 |
+
<span style="color: #e74c3c; font-weight: 600;">🛑 正在停止...</span>
|
| 1081 |
</div>
|
| 1082 |
'''
|
| 1083 |
if is_refreshing:
|
|
|
|
| 1096 |
progress_pct = min(100, int((current_account_idx / total_accounts) * 100))
|
| 1097 |
progress_text = f"{current_account_idx}/{total_accounts}"
|
| 1098 |
|
|
|
|
| 1099 |
return f'''
|
| 1100 |
<div style="text-align: center;">
|
| 1101 |
<div class="status-badge" style="background: rgba(241, 196, 15, 0.1); color: #f1c40f; border-color: #f1c40f;">
|
| 1102 |
+
⛸️ 已暂停
|
| 1103 |
</div>
|
| 1104 |
<div class="runtime-display" style="margin-top: 8px; color: #f1c40f;">
|
| 1105 |
+
⏱️ {runtime_str} | 📊 {progress_text}
|
| 1106 |
</div>
|
| 1107 |
</div>
|
| 1108 |
'''
|
|
|
|
| 1111 |
<div style="text-align: center;">
|
| 1112 |
<div class="running-indicator">
|
| 1113 |
<div class="spinner"></div>
|
| 1114 |
+
<span style="color: var(--term-blue); font-weight: 600;">🔄 运行中</span>
|
| 1115 |
</div>
|
| 1116 |
<div class="runtime-display" style="margin-top: 8px;">
|
| 1117 |
⏱️ {runtime_str} | 📊 {progress_text}
|
|
|
|
| 1123 |
'''
|
| 1124 |
|
| 1125 |
if is_paused:
|
| 1126 |
+
return '<div class="status-badge" style="background: rgba(241, 196, 15, 0.1); color: #f1c40f; border-color: #f1c40f;">⛸️ 已暂停</div>'
|
| 1127 |
|
| 1128 |
+
return '<div class="status-badge status-idle">💤 空闲</div>'
|
| 1129 |
|
| 1130 |
def get_time_str():
|
| 1131 |
+
return f"上次运行: {last_refresh_time or '从未运行'}"
|
| 1132 |
|
| 1133 |
def check_auth(password):
|
| 1134 |
"""验证管理密码"""
|
|
|
|
| 1225 |
with gr.Column(visible=bool(ADMIN_PASSWORD)) as login_page:
|
| 1226 |
gr.HTML('''
|
| 1227 |
<div class="login-container">
|
| 1228 |
+
<div class="login-title">🔐 Gemini 账号刷新器</div>
|
| 1229 |
<div class="login-subtitle">请输入管理密码</div>
|
| 1230 |
</div>
|
| 1231 |
''')
|
|
|
|
| 1250 |
<div class="dot red"></div>
|
| 1251 |
<div class="dot yellow"></div>
|
| 1252 |
<div class="dot green"></div>
|
| 1253 |
+
<div style="margin-left: 10px; color: var(--text-secondary); font-size: 13px; font-weight: 600;">Gemini 刷新器</div>
|
| 1254 |
</div>
|
| 1255 |
<div style="display: flex; gap: 8px; align-items: center;">
|
| 1256 |
+
<button id="theme-toggle">🌘 深色</button>
|
| 1257 |
</div>
|
| 1258 |
</div>
|
| 1259 |
<script>
|
|
|
|
| 1263 |
var isDark = document.body.classList.contains('dark-theme');
|
| 1264 |
localStorage.setItem('theme', isDark ? 'dark' : 'light');
|
| 1265 |
var btn = document.getElementById('theme-toggle');
|
| 1266 |
+
if(btn) btn.innerText = isDark ? '☀️ 浅色' : '🌘 深色';
|
| 1267 |
}
|
| 1268 |
|
| 1269 |
// 初始化主题 - 默认浅色(CSS 已默认浅色)
|
|
|
|
| 1280 |
btn.onclick = toggleTheme;
|
| 1281 |
// 更新按钮文字
|
| 1282 |
var isDark = document.body.classList.contains('dark-theme');
|
| 1283 |
+
btn.innerText = isDark ? '☀️ 浅色' : '🌘 深色';
|
| 1284 |
}
|
| 1285 |
|
| 1286 |
// 延迟再检查一次(防止 Gradio 动态加载覆盖)
|
|
|
|
| 1290 |
btn2.onclick = toggleTheme;
|
| 1291 |
}
|
| 1292 |
var isDark2 = document.body.classList.contains('dark-theme');
|
| 1293 |
+
if (btn2) btn2.innerText = isDark2 ? '☀️ 浅色' : '🌘 深色';
|
| 1294 |
}, 500);
|
| 1295 |
})();
|
| 1296 |
</script>
|
|
|
|
| 1299 |
# 控制台区域
|
| 1300 |
with gr.Row(elem_classes=["p-4"]):
|
| 1301 |
with gr.Column(scale=3):
|
| 1302 |
+
gr.Markdown("### 💎 Gemini 账号刷新器\n自动化 Cookie 刷新 & 数据库同步系统")
|
| 1303 |
|
| 1304 |
with gr.Column(scale=2):
|
| 1305 |
# 状态显示 - 每秒刷新
|
|
|
|
| 1309 |
with gr.Column(scale=1):
|
| 1310 |
# 操作按钮
|
| 1311 |
with gr.Row():
|
| 1312 |
+
refresh_btn = gr.Button("🚀 执行刷新", variant="primary", elem_classes=["action-btn"])
|
| 1313 |
pause_btn = gr.Button(get_pause_btn_text(), variant="secondary", elem_classes=["action-btn"])
|
| 1314 |
+
stop_btn = gr.Button("🛑 停止", variant="stop", elem_classes=["action-btn"])
|
| 1315 |
# 登出按钮
|
| 1316 |
logout_btn = gr.Button("🚪 登出", size="sm", visible=bool(ADMIN_PASSWORD))
|
| 1317 |
|
|
|
|
| 1358 |
css=CUSTOM_CSS,
|
| 1359 |
js=JS_CODE
|
| 1360 |
)
|
| 1361 |
+
# Force Update 01/20/2026 20:40:00 - UI全中文化
|