Spaces:
Sleeping
Sleeping
Keldos
commited on
Commit
·
ee42d46
1
Parent(s):
6b4e8ea
feat: 点击按钮后在后台更新程序(git)
Browse files- assets/custom.css +3 -0
- assets/custom.js +60 -7
- assets/html/update.html +3 -3
- modules/utils.py +6 -4
assets/custom.css
CHANGED
@@ -112,6 +112,9 @@ footer {
|
|
112 |
.btn-update-group.hideK {
|
113 |
display: none;
|
114 |
}
|
|
|
|
|
|
|
115 |
/* user_info */
|
116 |
#user_info.block {
|
117 |
white-space: nowrap;
|
|
|
112 |
.btn-update-group.hideK {
|
113 |
display: none;
|
114 |
}
|
115 |
+
span.hideK {
|
116 |
+
display: none;
|
117 |
+
}
|
118 |
/* user_info */
|
119 |
#user_info.block {
|
120 |
white-space: nowrap;
|
assets/custom.js
CHANGED
@@ -23,6 +23,7 @@ var sendBtn = null;
|
|
23 |
var cancelBtn = null;
|
24 |
var sliders = null;
|
25 |
var updateChuanhuBtn = null;
|
|
|
26 |
|
27 |
var userLogged = false;
|
28 |
var usernameGotten = false;
|
@@ -37,7 +38,7 @@ var language = navigator.language.slice(0,2);
|
|
37 |
var currentTime = new Date().getTime();
|
38 |
|
39 |
// i18n
|
40 |
-
|
41 |
'zh': "仅供查看",
|
42 |
'en': "For viewing only",
|
43 |
'ja': "閲覧専用",
|
@@ -47,14 +48,14 @@ var forView_i18n = {
|
|
47 |
'sv': "Endast för visning",
|
48 |
};
|
49 |
|
50 |
-
|
51 |
'zh': "你真的要删除 ",
|
52 |
'en': "Are you sure you want to delete ",
|
53 |
'ja': "本当に ",
|
54 |
'ko': "정말로 ",
|
55 |
'sv': "Är du säker på att du vill ta bort "
|
56 |
};
|
57 |
-
|
58 |
'zh': " 吗?",
|
59 |
'en': " ?",
|
60 |
'ja': " を削除してもよろしいですか?",
|
@@ -64,7 +65,7 @@ var deleteConfirm_i18n_suff = {
|
|
64 |
var deleteConfirm_msg_pref = "Are you sure you want to delete ";
|
65 |
var deleteConfirm_msg_suff = " ?";
|
66 |
|
67 |
-
|
68 |
'zh': "您使用的就是最新版!",
|
69 |
'en': "You are using the latest version!",
|
70 |
'ja': "最新バージョンを使用しています!",
|
@@ -72,6 +73,21 @@ var usingLatest_i18n = {
|
|
72 |
'sv': "Du använder den senaste versionen!"
|
73 |
};
|
74 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
// gradio 页面加载好了么??? 我能动你的元素了么??
|
76 |
function gradioLoaded(mutations) {
|
77 |
for (var i = 0; i < mutations.length; i++) {
|
@@ -89,6 +105,7 @@ function gradioLoaded(mutations) {
|
|
89 |
cancelBtn = document.getElementById("cancel_btn");
|
90 |
sliders = document.querySelectorAll('input[type="range"]');
|
91 |
updateChuanhuBtn = document.getElementById("update_chuanhu_btn");
|
|
|
92 |
|
93 |
if (loginUserForm) {
|
94 |
localStorage.setItem("userLogged", true);
|
@@ -117,6 +134,9 @@ function gradioLoaded(mutations) {
|
|
117 |
setChatbotScroll();
|
118 |
mObserver.observe(chatbotWrap, { attributes: true, childList: true, subtree: true, characterData: true});
|
119 |
}
|
|
|
|
|
|
|
120 |
if (sliders) {
|
121 |
setSlider();
|
122 |
}
|
@@ -507,6 +527,22 @@ var submitObserver = new MutationObserver(function (mutationsList) {
|
|
507 |
saveHistoryHtml();
|
508 |
});
|
509 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
510 |
var loadhistorytime = 0; // for debugging
|
511 |
function saveHistoryHtml() {
|
512 |
var historyHtml = document.querySelector('#chuanhu_chatbot>.wrapper>.wrap');
|
@@ -570,7 +606,7 @@ async function getLatestRelease() {
|
|
570 |
console.log(`Error: ${response.status} - ${response.statusText}`);
|
571 |
updateInfoGotten = true;
|
572 |
return null;
|
573 |
-
|
574 |
const data = await response.json();
|
575 |
updateInfoGotten = true;
|
576 |
return data;
|
@@ -580,10 +616,12 @@ async function getLatestRelease() {
|
|
580 |
return null;
|
581 |
}
|
582 |
}
|
|
|
|
|
583 |
async function updateLatestVersion() {
|
584 |
const currentVersionElement = document.getElementById('current-version');
|
585 |
const latestVersionElement = document.getElementById('latest-version-title');
|
586 |
-
|
587 |
const currentVersion = currentVersionElement.textContent;
|
588 |
const versionTime = document.getElementById('version-time').innerText;
|
589 |
const localVersionTime = versionTime !== "unknown" ? (new Date(versionTime)).getTime() : 0;
|
@@ -611,10 +649,16 @@ async function updateLatestVersion() {
|
|
611 |
console.error(error);
|
612 |
}
|
613 |
}
|
614 |
-
function
|
615 |
window.open('https://github.com/gaizhenbiao/chuanhuchatgpt/releases/latest', '_blank');
|
616 |
closeUpdateToast();
|
617 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
618 |
function cancelUpdate() {
|
619 |
closeUpdateToast();
|
620 |
}
|
@@ -645,6 +689,15 @@ function noUpdate() {
|
|
645 |
gotoUpdateBtn.classList.add('hideK');
|
646 |
closeUpdateBtn.classList.remove('hideK');
|
647 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
648 |
function setUpdateWindowHeight() {
|
649 |
if (!showingUpdateInfo) {return;}
|
650 |
const scrollPosition = window.scrollY;
|
|
|
23 |
var cancelBtn = null;
|
24 |
var sliders = null;
|
25 |
var updateChuanhuBtn = null;
|
26 |
+
var statusDisplay = null;
|
27 |
|
28 |
var userLogged = false;
|
29 |
var usernameGotten = false;
|
|
|
38 |
var currentTime = new Date().getTime();
|
39 |
|
40 |
// i18n
|
41 |
+
const forView_i18n = {
|
42 |
'zh': "仅供查看",
|
43 |
'en': "For viewing only",
|
44 |
'ja': "閲覧専用",
|
|
|
48 |
'sv': "Endast för visning",
|
49 |
};
|
50 |
|
51 |
+
const deleteConfirm_i18n_pref = {
|
52 |
'zh': "你真的要删除 ",
|
53 |
'en': "Are you sure you want to delete ",
|
54 |
'ja': "本当に ",
|
55 |
'ko': "정말로 ",
|
56 |
'sv': "Är du säker på att du vill ta bort "
|
57 |
};
|
58 |
+
const deleteConfirm_i18n_suff = {
|
59 |
'zh': " 吗?",
|
60 |
'en': " ?",
|
61 |
'ja': " を削除してもよろしいですか?",
|
|
|
65 |
var deleteConfirm_msg_pref = "Are you sure you want to delete ";
|
66 |
var deleteConfirm_msg_suff = " ?";
|
67 |
|
68 |
+
const usingLatest_i18n = {
|
69 |
'zh': "您使用的就是最新版!",
|
70 |
'en': "You are using the latest version!",
|
71 |
'ja': "最新バージョンを使用しています!",
|
|
|
73 |
'sv': "Du använder den senaste versionen!"
|
74 |
};
|
75 |
|
76 |
+
const updateSuccess_i18n = {
|
77 |
+
'zh': "更新成功,请重启本程序。",
|
78 |
+
'en': "Updated successfully, please restart this program.",
|
79 |
+
'ja': "更新が成功しました、このプログラムを再起動してください。",
|
80 |
+
'ko': "업데이트 성공, 이 프로그램을 재시작 해주세요.",
|
81 |
+
'sv': "Uppdaterat framgångsrikt, starta om programmet."
|
82 |
+
}
|
83 |
+
const updateFailure_i18n = {
|
84 |
+
'zh': '更新失败,请尝试<a href="https://github.com/GaiZhenbiao/ChuanhuChatGPT/wiki/使用教程#手动更新" target="_blank">手动更新</a>。',
|
85 |
+
'en': 'Update failed, please try <a href="https://github.com/GaiZhenbiao/ChuanhuChatGPT/wiki/使用教程#手动更新" target="_blank">manually updating</a>.',
|
86 |
+
'ja': '更新に失敗しました、<a href="https://github.com/GaiZhenbiao/ChuanhuChatGPT/wiki/使用教程#手动更新" target="_blank">手動での更新</a>をお試しください。',
|
87 |
+
'ko': '업데이트 실패, <a href="https://github.com/GaiZhenbiao/ChuanhuChatGPT/wiki/使用教程#手动更新" target="_blank">수동 업데이트</a>를 시도하십시오.',
|
88 |
+
'sv': 'Uppdateringen misslyckades, prova att <a href="https://github.com/GaiZhenbiao/ChuanhuChatGPT/wiki/使用教程#手动更新" target="_blank">uppdatera manuellt</a>.'
|
89 |
+
}
|
90 |
+
|
91 |
// gradio 页面加载好了么??? 我能动你的元素了么??
|
92 |
function gradioLoaded(mutations) {
|
93 |
for (var i = 0; i < mutations.length; i++) {
|
|
|
105 |
cancelBtn = document.getElementById("cancel_btn");
|
106 |
sliders = document.querySelectorAll('input[type="range"]');
|
107 |
updateChuanhuBtn = document.getElementById("update_chuanhu_btn");
|
108 |
+
statusDisplay = document.querySelector('#status_display');
|
109 |
|
110 |
if (loginUserForm) {
|
111 |
localStorage.setItem("userLogged", true);
|
|
|
134 |
setChatbotScroll();
|
135 |
mObserver.observe(chatbotWrap, { attributes: true, childList: true, subtree: true, characterData: true});
|
136 |
}
|
137 |
+
if (statusDisplay) {
|
138 |
+
// statusObserver.observe(statusDisplay, { childList: true, subtree: true, characterData: true});
|
139 |
+
}
|
140 |
if (sliders) {
|
141 |
setSlider();
|
142 |
}
|
|
|
527 |
saveHistoryHtml();
|
528 |
});
|
529 |
|
530 |
+
var statusObserver = new MutationObserver(function (mutationsList) {
|
531 |
+
for (const mutation of mutationsList) {
|
532 |
+
if (mutation.type === 'attributes' || mutation.type === 'childList') {
|
533 |
+
if (statusDisplay.innerHTML.includes('<span id="update-status"')) {
|
534 |
+
if (getUpdateStatus() === "success") {
|
535 |
+
releaseNoteElement.innerHTML = updateSuccess_i18n.hasOwnProperty(language) ? updateSuccess_i18n[language] : updateSuccess_i18n['en'];
|
536 |
+
} else if (getUpdateStatus() === "failure") {
|
537 |
+
releaseNoteElement.innerHTML = updateFailure_i18n.hasOwnProperty(language) ? updateFailure_i18n[language] : updateFailure_i18n['en'];
|
538 |
+
} else {
|
539 |
+
releaseNoteElement.innerHTML = getUpdateStatus();
|
540 |
+
}
|
541 |
+
}
|
542 |
+
}
|
543 |
+
}
|
544 |
+
});
|
545 |
+
|
546 |
var loadhistorytime = 0; // for debugging
|
547 |
function saveHistoryHtml() {
|
548 |
var historyHtml = document.querySelector('#chuanhu_chatbot>.wrapper>.wrap');
|
|
|
606 |
console.log(`Error: ${response.status} - ${response.statusText}`);
|
607 |
updateInfoGotten = true;
|
608 |
return null;
|
609 |
+
}
|
610 |
const data = await response.json();
|
611 |
updateInfoGotten = true;
|
612 |
return data;
|
|
|
616 |
return null;
|
617 |
}
|
618 |
}
|
619 |
+
|
620 |
+
var releaseNoteElement = document.getElementById('release-note-content');
|
621 |
async function updateLatestVersion() {
|
622 |
const currentVersionElement = document.getElementById('current-version');
|
623 |
const latestVersionElement = document.getElementById('latest-version-title');
|
624 |
+
releaseNoteElement = document.getElementById('release-note-content');
|
625 |
const currentVersion = currentVersionElement.textContent;
|
626 |
const versionTime = document.getElementById('version-time').innerText;
|
627 |
const localVersionTime = versionTime !== "unknown" ? (new Date(versionTime)).getTime() : 0;
|
|
|
649 |
console.error(error);
|
650 |
}
|
651 |
}
|
652 |
+
function getUpdateInfo() {
|
653 |
window.open('https://github.com/gaizhenbiao/chuanhuchatgpt/releases/latest', '_blank');
|
654 |
closeUpdateToast();
|
655 |
}
|
656 |
+
function bgUpdateChuanhu() {
|
657 |
+
updateChuanhuBtn.click();
|
658 |
+
releaseNoteElement = document.getElementById('release-note-content');
|
659 |
+
releaseNoteElement.innerHTML = '<p>正在尝试更新...</p>';
|
660 |
+
statusObserver.observe(statusDisplay, { childList: true, subtree: true, characterData: true});
|
661 |
+
}
|
662 |
function cancelUpdate() {
|
663 |
closeUpdateToast();
|
664 |
}
|
|
|
689 |
gotoUpdateBtn.classList.add('hideK');
|
690 |
closeUpdateBtn.classList.remove('hideK');
|
691 |
}
|
692 |
+
function getUpdateStatus() {
|
693 |
+
const updateStatus = statusDisplay.querySelector("#update-status")
|
694 |
+
if (updateStatus) {
|
695 |
+
return updateStatus.innerText
|
696 |
+
} else {
|
697 |
+
return "unknown"
|
698 |
+
}
|
699 |
+
}
|
700 |
+
|
701 |
function setUpdateWindowHeight() {
|
702 |
if (!showingUpdateInfo) {return;}
|
703 |
const scrollPosition = window.scrollY;
|
assets/html/update.html
CHANGED
@@ -14,11 +14,11 @@
|
|
14 |
</div>
|
15 |
</div>
|
16 |
<div id="goto-update-btn" class="btn-update-group">
|
17 |
-
<button class="btn-update lg secondary svelte-
|
18 |
-
<button class="btn-update lg primary svelte-
|
19 |
</div>
|
20 |
<div id="close-update-btn" class="btn-update-group hideK">
|
21 |
-
<button class="btn-update lg secondary svelte-1jrzxu" id="update-button" onclick="
|
22 |
<button class="btn-update lg primary svelte-1jrzxu" id="cancel-button" onclick="cancelUpdate()">{ok_btn}</button>
|
23 |
</div>
|
24 |
</div>
|
|
|
14 |
</div>
|
15 |
</div>
|
16 |
<div id="goto-update-btn" class="btn-update-group">
|
17 |
+
<button class="btn-update lg secondary svelte-1jrzxu" id="cancel-button" onclick="cancelUpdate()">{cancel_btn}</button>
|
18 |
+
<button class="btn-update lg primary svelte-1jrzxu" id="update-button" onclick="bgUpdateChuanhu()">{update_btn}</button>
|
19 |
</div>
|
20 |
<div id="close-update-btn" class="btn-update-group hideK">
|
21 |
+
<button class="btn-update lg secondary svelte-1jrzxu" id="update-button" onclick="getUpdateInfo()">{seenew_btn}</button>
|
22 |
<button class="btn-update lg primary svelte-1jrzxu" id="cancel-button" onclick="cancelUpdate()">{ok_btn}</button>
|
23 |
</div>
|
24 |
</div>
|
modules/utils.py
CHANGED
@@ -594,11 +594,13 @@ def update_chuanhu():
|
|
594 |
git = os.environ.get('GIT', "git")
|
595 |
try:
|
596 |
run(f"{git} fetch --all && {git} stash && {git} pull https://github.com/GaiZhenbiao/ChuanhuChatGPT.git main -f && {git} stash pop")
|
597 |
-
logging.info("
|
598 |
-
|
|
|
599 |
except Exception:
|
600 |
-
logging.info("
|
601 |
-
|
|
|
602 |
|
603 |
def get_html(filename):
|
604 |
path = os.path.join(shared.chuanhu_path, "assets", "html", filename)
|
|
|
594 |
git = os.environ.get('GIT', "git")
|
595 |
try:
|
596 |
run(f"{git} fetch --all && {git} stash && {git} pull https://github.com/GaiZhenbiao/ChuanhuChatGPT.git main -f && {git} stash pop")
|
597 |
+
logging.info("Successfully updated")
|
598 |
+
status = '<span id="update-status" class="hideK">success</span>'
|
599 |
+
return gr.Markdown.update(value=i18n("更新成功,请重启本程序")+status)
|
600 |
except Exception:
|
601 |
+
logging.info("Failed to update")
|
602 |
+
status = '<span id="update-status" class="hideK">failure</span>'
|
603 |
+
return gr.Markdown.update(value=i18n("更新失败,请尝试[手动更新](https://github.com/GaiZhenbiao/ChuanhuChatGPT/wiki/使用教程#手动更新)")+status)
|
604 |
|
605 |
def get_html(filename):
|
606 |
path = os.path.join(shared.chuanhu_path, "assets", "html", filename)
|