From e1f3fafd58f8210fe3107a9c62e0d3e278ef9a5b Mon Sep 17 00:00:00 2001
From: hole-thu
Date: Wed, 24 Aug 2022 00:10:52 +0800
Subject: [PATCH] check service work update on reload & init room
---
src/App.js | 2 ++
src/Common.js | 23 +++++++++++++++++++++++
src/Config.js | 14 +++++++-------
src/Flows.js | 4 ++--
src/Title.js | 2 +-
src/UserAction.js | 24 +++---------------------
src/flows_api.js | 4 ++--
7 files changed, 40 insertions(+), 33 deletions(-)
diff --git a/src/App.js b/src/App.js
index a117befb..2274dc8e 100644
--- a/src/App.js
+++ b/src/App.js
@@ -5,6 +5,7 @@ import { Sidebar } from './Sidebar';
import { PressureHelper } from './PressureHelper';
import { TokenCtx } from './UserAction';
import { load_config, bgimg_style } from './Config';
+import { check_service_work_update } from './Common';
import { load_attentions } from './Attention.js';
import { listen_darkmode } from './infrastructure/functions';
import { LoginPopup, TitleLine } from './infrastructure/widgets';
@@ -40,6 +41,7 @@ class App extends Component {
window.BACKEND =
localStorage['BACKEND'] || process.env.REACT_APP_BACKEND || '/';
+ check_service_work_update(false);
if (process.env.NODE_ENV === 'production') {
setTimeout(() => {
fetch('https://api.github.com/users/hole-thu')
diff --git a/src/Common.js b/src/Common.js
index 8304e7bc..07cb9a36 100644
--- a/src/Common.js
+++ b/src/Common.js
@@ -11,6 +11,7 @@ import {
split_text,
} from './text_splitter';
import renderMd from './Markdown';
+import { cache } from './cache';
export { format_time, Time, TitleLine };
@@ -488,3 +489,25 @@ export class ClickHandler extends PureComponent {
);
}
}
+
+export function check_service_work_update(update_now = false) {
+ if ('serviceWorker' in navigator) {
+ navigator.serviceWorker.ready.then((serviceWorker) => {
+ const waitingServiceWorker = serviceWorker.waiting;
+ if (
+ waitingServiceWorker &&
+ (update_now || window.confirm('发现新版本,是否立即使用并刷新?'))
+ ) {
+ cache().clear();
+ waitingServiceWorker.addEventListener('statechange', (event) => {
+ if (event.target.state === 'activated') {
+ window.location.reload();
+ }
+ });
+ waitingServiceWorker.postMessage({ type: 'SKIP_WAITING' });
+ } else {
+ if (update_now) alert('没有已下载的更新');
+ }
+ });
+ }
+}
diff --git a/src/Config.js b/src/Config.js
index 48945f79..93d06a41 100644
--- a/src/Config.js
+++ b/src/Config.js
@@ -32,7 +32,7 @@ const DEFAULT_CONFIG = {
block_cw: ['xxg', 'zzxg'],
block_words_v4: ['🕷️', '[系统自动代发]'],
whitelist_cw: [],
- room_id: process.env.REACT_APP_ROOM_ID,
+ room: process.env.REACT_APP_ROOM_ID,
};
export function load_config() {
@@ -222,13 +222,13 @@ class ConfigRoomId extends PureComponent {
constructor(props) {
super(props);
this.state = {
- room_id: window.config.room_id,
+ room: window.config.room,
};
}
save_changes() {
this.props.callback({
- room_id: this.state.room_id,
+ room: this.state.room,
});
}
@@ -236,7 +236,7 @@ class ConfigRoomId extends PureComponent {
let value = e.target.value;
this.setState(
{
- room_id: value,
+ room: value,
},
this.save_changes.bind(this),
);
@@ -249,7 +249,7 @@ class ConfigRoomId extends PureComponent {
分区编号:
- #room_id
+ #room
选择分区编号,会作为发言时的分区和影响查看到的内容
@@ -416,7 +416,7 @@ export class ConfigUI extends PureComponent {
callback={this.save_changes_bound}
/>
-
+
#{info.pid}
- {info.room_id !== parseInt(window.config.room_id) && (
- <> @{info.room_id}>
+ {info.room_id !== parseInt(window.config.room) && (
+ <> @{info.room}>
)}
diff --git a/src/Title.js b/src/Title.js
index 906e028c..4464dd2b 100644
--- a/src/Title.js
+++ b/src/Title.js
@@ -206,7 +206,7 @@ export function Title(props) {
}
>
新T树洞
- {window.config.room_id || '?'}
+ {window.config.room || '?'}
diff --git a/src/UserAction.js b/src/UserAction.js
index 791de578..24a20bea 100644
--- a/src/UserAction.js
+++ b/src/UserAction.js
@@ -6,13 +6,13 @@ import {
SafeTextarea,
PromotionBar,
HighlightedMarkdown,
+ check_service_work_update,
} from './Common';
import { MessageViewer } from './Message';
import { LoginPopup } from './infrastructure/widgets';
import { ColorPicker } from './color_picker';
import { ConfigUI } from './Config';
import copy from 'copy-to-clipboard';
-import { cache } from './cache';
import { get_json } from './flows_api';
import { save_attentions } from './Attention';
@@ -60,25 +60,7 @@ export function InfoSidebar(props) {
{
- if ('serviceWorker' in navigator) {
- navigator.serviceWorker.ready.then((serviceWorker) => {
- const waitingServiceWorker = serviceWorker.waiting;
- if (waitingServiceWorker) {
- cache().clear();
- waitingServiceWorker.addEventListener(
- 'statechange',
- (event) => {
- if (event.target.state === 'activated') {
- window.location.reload();
- }
- },
- );
- waitingServiceWorker.postMessage({ type: 'SKIP_WAITING' });
- } else {
- alert('没有已下载的更新');
- }
- });
- }
+ check_service_work_update(true);
}}
>
立即更新
@@ -588,7 +570,7 @@ export class PostForm extends Component {
text: text,
allow_search: allow_search ? '1' : '',
use_title: use_title ? '1' : '',
- room_id: window.config.room_id,
+ room_id: window.config.room,
});
if (has_poll) {
poll_options.forEach((opt) => {
diff --git a/src/flows_api.js b/src/flows_api.js
index 359213ae..05943bbe 100644
--- a/src/flows_api.js
+++ b/src/flows_api.js
@@ -169,7 +169,7 @@ export const API = {
get_list: async (page, token, submode) => {
let response = await fetch(
`${get_api_base()}/getlist?p=${page}&order_mode=${submode}&room_id=${
- window.config.show_all_rooms ? '' : window.config.room_id
+ window.config.show_all_rooms ? '' : window.config.room
}`,
{
headers: { 'User-Token': token },
@@ -181,7 +181,7 @@ export const API = {
get_search: async (page, keyword, token, submode) => {
let response = await fetch(
`${get_api_base()}/search?search_mode=${submode}&page=${page}&room_id=${
- window.config.show_all_rooms ? '' : window.config.room_id
+ window.config.show_all_rooms ? '' : window.config.room
}&keywords=${encodeURIComponent(keyword)}&pagesize=${SEARCH_PAGESIZE}`,
{
headers: { 'User-Token': token },