Browse Source

check service work update on reload & init room

master
hole-thu 3 years ago
parent
commit
e1f3fafd58
  1. 2
      src/App.js
  2. 23
      src/Common.js
  3. 14
      src/Config.js
  4. 4
      src/Flows.js
  5. 2
      src/Title.js
  6. 24
      src/UserAction.js
  7. 4
      src/flows_api.js

2
src/App.js

@ -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')

23
src/Common.js

@ -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('没有已下载的更新');
}
});
}
}

14
src/Config.js

@ -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>
&nbsp;<small>#room_id</small> &nbsp;<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}

4
src/Flows.js

@ -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>

2
src/Title.js

@ -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>

24
src/UserAction.js

@ -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) => {

4
src/flows_api.js

@ -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 },

Loading…
Cancel
Save