check service work update on reload & init room
This commit is contained in:
@@ -5,6 +5,7 @@ import { Sidebar } from './Sidebar';
|
|||||||
import { PressureHelper } from './PressureHelper';
|
import { PressureHelper } from './PressureHelper';
|
||||||
import { TokenCtx } from './UserAction';
|
import { TokenCtx } from './UserAction';
|
||||||
import { load_config, bgimg_style } from './Config';
|
import { load_config, bgimg_style } from './Config';
|
||||||
|
import { check_service_work_update } from './Common';
|
||||||
import { load_attentions } from './Attention.js';
|
import { load_attentions } from './Attention.js';
|
||||||
import { listen_darkmode } from './infrastructure/functions';
|
import { listen_darkmode } from './infrastructure/functions';
|
||||||
import { LoginPopup, TitleLine } from './infrastructure/widgets';
|
import { LoginPopup, TitleLine } from './infrastructure/widgets';
|
||||||
@@ -40,6 +41,7 @@ class App extends Component {
|
|||||||
window.BACKEND =
|
window.BACKEND =
|
||||||
localStorage['BACKEND'] || process.env.REACT_APP_BACKEND || '/';
|
localStorage['BACKEND'] || process.env.REACT_APP_BACKEND || '/';
|
||||||
|
|
||||||
|
check_service_work_update(false);
|
||||||
if (process.env.NODE_ENV === 'production') {
|
if (process.env.NODE_ENV === 'production') {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
fetch('https://api.github.com/users/hole-thu')
|
fetch('https://api.github.com/users/hole-thu')
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import {
|
|||||||
split_text,
|
split_text,
|
||||||
} from './text_splitter';
|
} from './text_splitter';
|
||||||
import renderMd from './Markdown';
|
import renderMd from './Markdown';
|
||||||
|
import { cache } from './cache';
|
||||||
|
|
||||||
export { format_time, Time, TitleLine };
|
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('没有已下载的更新');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ const DEFAULT_CONFIG = {
|
|||||||
block_cw: ['xxg', 'zzxg'],
|
block_cw: ['xxg', 'zzxg'],
|
||||||
block_words_v4: ['🕷️', '[系统自动代发]'],
|
block_words_v4: ['🕷️', '[系统自动代发]'],
|
||||||
whitelist_cw: [],
|
whitelist_cw: [],
|
||||||
room_id: process.env.REACT_APP_ROOM_ID,
|
room: process.env.REACT_APP_ROOM_ID,
|
||||||
};
|
};
|
||||||
|
|
||||||
export function load_config() {
|
export function load_config() {
|
||||||
@@ -222,13 +222,13 @@ class ConfigRoomId extends PureComponent {
|
|||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
room_id: window.config.room_id,
|
room: window.config.room,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
save_changes() {
|
save_changes() {
|
||||||
this.props.callback({
|
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;
|
let value = e.target.value;
|
||||||
this.setState(
|
this.setState(
|
||||||
{
|
{
|
||||||
room_id: value,
|
room: value,
|
||||||
},
|
},
|
||||||
this.save_changes.bind(this),
|
this.save_changes.bind(this),
|
||||||
);
|
);
|
||||||
@@ -249,7 +249,7 @@ class ConfigRoomId extends PureComponent {
|
|||||||
<b>分区编号:</b>
|
<b>分区编号:</b>
|
||||||
<select
|
<select
|
||||||
className="config-select"
|
className="config-select"
|
||||||
value={this.state.room_id}
|
value={this.state.room}
|
||||||
onChange={this.on_select.bind(this)}
|
onChange={this.on_select.bind(this)}
|
||||||
>
|
>
|
||||||
<option value="0">0区(默认分区)</option>
|
<option value="0">0区(默认分区)</option>
|
||||||
@@ -259,7 +259,7 @@ class ConfigRoomId extends PureComponent {
|
|||||||
<option value="4">4区</option>
|
<option value="4">4区</option>
|
||||||
<option value="5">5区</option>
|
<option value="5">5区</option>
|
||||||
</select>
|
</select>
|
||||||
<small>#room_id</small>
|
<small>#room</small>
|
||||||
</p>
|
</p>
|
||||||
<p className="config-description">
|
<p className="config-description">
|
||||||
选择分区编号,会作为发言时的分区和影响查看到的内容
|
选择分区编号,会作为发言时的分区和影响查看到的内容
|
||||||
@@ -416,7 +416,7 @@ export class ConfigUI extends PureComponent {
|
|||||||
callback={this.save_changes_bound}
|
callback={this.save_changes_bound}
|
||||||
/>
|
/>
|
||||||
<hr />
|
<hr />
|
||||||
<ConfigRoomId id="room-id" callback={this.save_changes_bound} />
|
<ConfigRoomId id="room" callback={this.save_changes_bound} />
|
||||||
<hr />
|
<hr />
|
||||||
<ConfigSwitch
|
<ConfigSwitch
|
||||||
callback={this.save_changes_bound}
|
callback={this.save_changes_bound}
|
||||||
|
|||||||
@@ -293,8 +293,8 @@ class FlowItem extends PureComponent {
|
|||||||
<code className="box-id">
|
<code className="box-id">
|
||||||
<a href={'##' + info.pid} onClick={this.copy_link.bind(this)}>
|
<a href={'##' + info.pid} onClick={this.copy_link.bind(this)}>
|
||||||
#{info.pid}
|
#{info.pid}
|
||||||
{info.room_id !== parseInt(window.config.room_id) && (
|
{info.room_id !== parseInt(window.config.room) && (
|
||||||
<> @{info.room_id}</>
|
<> @{info.room}</>
|
||||||
)}
|
)}
|
||||||
</a>
|
</a>
|
||||||
</code>
|
</code>
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ export function Title(props) {
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
新T树洞
|
新T树洞
|
||||||
<sup>{window.config.room_id || '?'}</sup>
|
<sup>{window.config.room || '?'}</sup>
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,13 +6,13 @@ import {
|
|||||||
SafeTextarea,
|
SafeTextarea,
|
||||||
PromotionBar,
|
PromotionBar,
|
||||||
HighlightedMarkdown,
|
HighlightedMarkdown,
|
||||||
|
check_service_work_update,
|
||||||
} from './Common';
|
} from './Common';
|
||||||
import { MessageViewer } from './Message';
|
import { MessageViewer } from './Message';
|
||||||
import { LoginPopup } from './infrastructure/widgets';
|
import { LoginPopup } from './infrastructure/widgets';
|
||||||
import { ColorPicker } from './color_picker';
|
import { ColorPicker } from './color_picker';
|
||||||
import { ConfigUI } from './Config';
|
import { ConfigUI } from './Config';
|
||||||
import copy from 'copy-to-clipboard';
|
import copy from 'copy-to-clipboard';
|
||||||
import { cache } from './cache';
|
|
||||||
import { get_json } from './flows_api';
|
import { get_json } from './flows_api';
|
||||||
import { save_attentions } from './Attention';
|
import { save_attentions } from './Attention';
|
||||||
|
|
||||||
@@ -60,25 +60,7 @@ export function InfoSidebar(props) {
|
|||||||
<a
|
<a
|
||||||
href="###"
|
href="###"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
if ('serviceWorker' in navigator) {
|
check_service_work_update(true);
|
||||||
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('没有已下载的更新');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
立即更新
|
立即更新
|
||||||
@@ -588,7 +570,7 @@ export class PostForm extends Component {
|
|||||||
text: text,
|
text: text,
|
||||||
allow_search: allow_search ? '1' : '',
|
allow_search: allow_search ? '1' : '',
|
||||||
use_title: use_title ? '1' : '',
|
use_title: use_title ? '1' : '',
|
||||||
room_id: window.config.room_id,
|
room_id: window.config.room,
|
||||||
});
|
});
|
||||||
if (has_poll) {
|
if (has_poll) {
|
||||||
poll_options.forEach((opt) => {
|
poll_options.forEach((opt) => {
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ export const API = {
|
|||||||
get_list: async (page, token, submode) => {
|
get_list: async (page, token, submode) => {
|
||||||
let response = await fetch(
|
let response = await fetch(
|
||||||
`${get_api_base()}/getlist?p=${page}&order_mode=${submode}&room_id=${
|
`${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 },
|
headers: { 'User-Token': token },
|
||||||
@@ -181,7 +181,7 @@ export const API = {
|
|||||||
get_search: async (page, keyword, token, submode) => {
|
get_search: async (page, keyword, token, submode) => {
|
||||||
let response = await fetch(
|
let response = await fetch(
|
||||||
`${get_api_base()}/search?search_mode=${submode}&page=${page}&room_id=${
|
`${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}`,
|
}&keywords=${encodeURIComponent(keyword)}&pagesize=${SEARCH_PAGESIZE}`,
|
||||||
{
|
{
|
||||||
headers: { 'User-Token': token },
|
headers: { 'User-Token': token },
|
||||||
|
|||||||
Reference in New Issue
Block a user