feat(frontend): スリープ無効化機能

Resolve #11853
This commit is contained in:
syuilo 2023-09-20 10:02:39 +09:00
parent bb0b2df37e
commit bb460a1785
6 changed files with 60 additions and 37 deletions

View file

@ -15,51 +15,53 @@
## 2023.9.0 (unreleased) ## 2023.9.0 (unreleased)
### General ### General
- OAuth 2.0のサポート - Feat: OAuth 2.0のサポート
- お知らせ機能の強化 - Feat: お知らせ機能の強化
- ユーザー個別のお知らせを作成可能に - ユーザー個別のお知らせを作成可能に
- お知らせのバナー表示やダイアログ表示が可能に - お知らせのバナー表示やダイアログ表示が可能に
- お知らせのアイコンを設定可能に - お知らせのアイコンを設定可能に
- チャンネルをセンシティブ指定できるようになりました - Feat: チャンネルをセンシティブ指定できるようになりました
- センシティブチャンネルのNoteのReNoteはデフォルトでHome TLに流れるようになりました - センシティブチャンネルのNoteのReNoteはデフォルトでHome TLに流れるようになりました
- センシティブチャンネルのノートはユーザープロフィールに表示されません - センシティブチャンネルのノートはユーザープロフィールに表示されません
- 二要素認証のバックアップコードが生成されるようになりました ref. https://github.com/MisskeyIO/misskey/pull/121 - Feat: 二要素認証のバックアップコードが生成されるようになりました
- 二要素認証でパスキーをサポートするようになりました - ref. https://github.com/MisskeyIO/misskey/pull/121
- 通知をテストできるようになりました - Feat: 二要素認証でパスキーをサポートするようになりました
- PWAのアイコンが設定できるようになりました - Feat: 通知をテストできるようになりました
- manifest.jsonをオーバーライド可能に - Feat: PWAのアイコンが設定できるようになりました
- 依存関係の更新 - Enhance: manifest.jsonをオーバーライド可能に
- ローカリゼーションの更新 - Enhance: 依存関係の更新
- Enhance: ローカリゼーションの更新
### Client ### Client
- 任意のユーザーリストをタイムラインページにピン留めできるように - Feat: 任意のユーザーリストをタイムラインページにピン留めできるように
- 設定->クライアント設定->全般 から設定可能です - 設定->クライアント設定->全般 から設定可能です
- ノート詳細ページを改修 - Feat: Playで直接投稿フォームを埋め込めるように(`Ui:C:postForm`)
- Feat: クライアントを起動している間、デバイスの画面が自動でオフになるのを防ぐオプションを追加
- Feat: 新しい実績を追加
- Enhance: ノート詳細ページを改修
- 読み込み時のパフォーマンスが向上しました - 読み込み時のパフォーマンスが向上しました
- リノート一覧、リアクション一覧がタブとして追加されました - リノート一覧、リアクション一覧がタブとして追加されました
- ノートのメニューからは当該項目は消えました - ノートのメニューからは当該項目は消えました
- プロフィールにその人が作ったPlayの一覧出せるように - Enhance: プロフィールにその人が作ったPlayの一覧出せるように
- メニューのスイッチの動作を改善 - Enhance: メニューのスイッチの動作を改善
- 絵文字ピッカーの検索の表示件数を100件に増加 - Enhance: 絵文字ピッカーの検索の表示件数を100件に増加
- 投稿フォームのプレビューの表示状態を記憶するように - Enhance: 投稿フォームのプレビューの表示状態を記憶するように
- AiScriptからMisskeyサーバーAPIを呼び出す際の制限を撤廃
- Playで直接投稿フォームを埋め込めるように(`Ui:C:postForm`)
- Enhance: ユーザーメニューでスイッチでユーザーリストに追加・削除できるように - Enhance: ユーザーメニューでスイッチでユーザーリストに追加・削除できるように
- Enhance: 自分が押したリアクションのデザインを改善 - Enhance: 自分が押したリアクションのデザインを改善
- Enhance: ノート検索にローカルのみ検索可能なオプションの追加 - Enhance: ノート検索にローカルのみ検索可能なオプションの追加
- Enhance: AiScriptで`LOCALE`として現在の設定言語を取得できるように
- Enhance: Renote自体を通報できるように - Enhance: Renote自体を通報できるように
- Enhance: データセーバーモードの強化 - Enhance: データセーバーモードの強化
- Enhance: Renoteを管理者権限で削除可能に - Enhance: Renoteを管理者権限で削除可能に
- `$[rainbow ]`記法が、動きのあるMFMが無効になっていても使用できるようになりました - Enhance: `$[rainbow ]`記法が、動きのあるMFMが無効になっていても使用できるようになりました
- Playの操作を行うAPI TokenをAPIコンソールから発行できるように - Enhance: Playの操作を行うAPI TokenをAPIコンソールから発行できるように
- リアクションの表示サイズをより大きくできるように - Enhance: リアクションの表示サイズをより大きくできるように
- AiScriptを0.16.0に更新 - Enhance: AiScriptを0.16.0に更新
- Mk:apiが失敗した時にエラー型の値AiScript 0.16.0で追加)を返すように - Enhance: AiScriptからMisskeyサーバーAPIを呼び出す際の制限を撤廃
- タイムラインでリスト/アンテナ選択時のパフォーマンスを改善 - Enhance: AiScriptで`LOCALE`として現在の設定言語を取得できるように
- ScratchpadでAsync:系関数やボタンのコールバックなどのエラーにもダイアログを出すように試験的なためPlayなどには未実装 - Enhance: Mk:apiが失敗した時にエラー型の値AiScript 0.16.0で追加)を返すように
- 「Moderation note」、「Add moderation note」をローカライズできるように - Enhance: ScratchpadでAsync:系関数やボタンのコールバックなどのエラーにもダイアログを出すように試験的なためPlayなどには未実装
- 新しい実績を追加 - Enhance: タイムラインでリスト/アンテナ選択時のパフォーマンスを改善
- Enhance: 「Moderation note」、「Add moderation note」をローカライズできるように
- Fix: サーバー情報画面(`/instance-info/{domain}`)でブロックができないのを修正 - Fix: サーバー情報画面(`/instance-info/{domain}`)でブロックができないのを修正
- Fix: 未読のお知らせの「わかった」をクリック・タップしてもその場で「わかった」が消えない問題を修正 - Fix: 未読のお知らせの「わかった」をクリック・タップしてもその場で「わかった」が消えない問題を修正
- Fix: iOSで画面を回転させるとテキストサイズが変わる問題を修正 - Fix: iOSで画面を回転させるとテキストサイズが変わる問題を修正
@ -70,14 +72,14 @@
- Fix: 環境によってはMisskey Webが開けない問題を修正 - Fix: 環境によってはMisskey Webが開けない問題を修正
### Server ### Server
- cacheRemoteFilesの初期値はfalseになりました - Change: cacheRemoteFilesの初期値はfalseになりました
- ファイルアップロード時等にファイル名の拡張子を修正する関数(correctFilename)の挙動を改善 - Enhance: ファイルアップロード時等にファイル名の拡張子を修正する関数(correctFilename)の挙動を改善
- Webhookのペイロードにサーバーのurlが含まれるようになりました - Enhance: Webhookのペイロードにサーバーのurlが含まれるようになりました
- Webhook設定でsecretを空に出来るように - Enhance: Webhook設定でsecretを空に出来るように
- 使われていないアンテナの自動停止を設定可能に - Enhance: 使われていないアンテナの自動停止を設定可能に
- nodeinfo 2.1対応 - Enhance: nodeinfo 2.1対応
- 自分へのメンション一覧を取得する際のパフォーマンスを向上 - Enhance: 自分へのメンション一覧を取得する際のパフォーマンスを向上
- Docker環境でjemallocを使用することでメモリ使用量を削減 - Enhance: Docker環境でjemallocを使用することでメモリ使用量を削減
- Fix: MK_ONLY_SERVERオプションを指定した際にクラッシュする問題を修正 - Fix: MK_ONLY_SERVERオプションを指定した際にクラッシュする問題を修正
- Fix: ノート検索 `notes/search` にてhostを指定した際に検索結果に反映されるように - Fix: ノート検索 `notes/search` にてhostを指定した際に検索結果に反映されるように
- Fix: 一部のfeatured noteを照会できない問題を修正 - Fix: 一部のfeatured noteを照会できない問題を修正

1
locales/index.d.ts vendored
View file

@ -1115,6 +1115,7 @@ export interface Locale {
"loadReplies": string; "loadReplies": string;
"loadConversation": string; "loadConversation": string;
"pinnedList": string; "pinnedList": string;
"keepScreenOn": string;
"_announcement": { "_announcement": {
"forExistingUsers": string; "forExistingUsers": string;
"forExistingUsersDescription": string; "forExistingUsersDescription": string;

View file

@ -1112,6 +1112,7 @@ renotes: "リノート"
loadReplies: "返信を見る" loadReplies: "返信を見る"
loadConversation: "会話を見る" loadConversation: "会話を見る"
pinnedList: "ピン留めされたリスト" pinnedList: "ピン留めされたリスト"
keepScreenOn: "デバイスの画面を常にオンにする"
_announcement: _announcement:
forExistingUsers: "既存ユーザーのみ" forExistingUsers: "既存ユーザーのみ"

View file

@ -202,6 +202,18 @@ export async function common(createVue: () => App<Element>) {
} }
}, { immediate: true }); }, { immediate: true });
if (defaultStore.state.keepScreenOn) {
if ('wakeLock' in navigator) {
navigator.wakeLock.request('screen');
document.addEventListener('visibilitychange', async () => {
if (document.visibilityState === 'visible') {
navigator.wakeLock.request('screen');
}
});
}
}
//#region Fetch user //#region Fetch user
if ($i && $i.token) { if ($i && $i.token) {
if (_DEV_) { if (_DEV_) {

View file

@ -148,6 +148,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div class="_gaps_s"> <div class="_gaps_s">
<MkSwitch v-model="imageNewTab">{{ i18n.ts.openImageInNewTab }}</MkSwitch> <MkSwitch v-model="imageNewTab">{{ i18n.ts.openImageInNewTab }}</MkSwitch>
<MkSwitch v-model="enableInfiniteScroll">{{ i18n.ts.enableInfiniteScroll }}</MkSwitch> <MkSwitch v-model="enableInfiniteScroll">{{ i18n.ts.enableInfiniteScroll }}</MkSwitch>
<MkSwitch v-model="keepScreenOn">{{ i18n.ts.keepScreenOn }}</MkSwitch>
</div> </div>
<MkSelect v-model="serverDisconnectedBehavior"> <MkSelect v-model="serverDisconnectedBehavior">
<template #label>{{ i18n.ts.whenServerDisconnected }}</template> <template #label>{{ i18n.ts.whenServerDisconnected }}</template>
@ -247,6 +248,7 @@ const mediaListWithOneImageAppearance = computed(defaultStore.makeGetterSetter('
const notificationPosition = computed(defaultStore.makeGetterSetter('notificationPosition')); const notificationPosition = computed(defaultStore.makeGetterSetter('notificationPosition'));
const notificationStackAxis = computed(defaultStore.makeGetterSetter('notificationStackAxis')); const notificationStackAxis = computed(defaultStore.makeGetterSetter('notificationStackAxis'));
const showTimelineReplies = computed(defaultStore.makeGetterSetter('showTimelineReplies')); const showTimelineReplies = computed(defaultStore.makeGetterSetter('showTimelineReplies'));
const keepScreenOn = computed(defaultStore.makeGetterSetter('keepScreenOn'));
watch(lang, () => { watch(lang, () => {
miLocalStorage.setItem('lang', lang.value as string); miLocalStorage.setItem('lang', lang.value as string);
@ -281,6 +283,7 @@ watch([
overridedDeviceKind, overridedDeviceKind,
mediaListWithOneImageAppearance, mediaListWithOneImageAppearance,
reactionsDisplaySize, reactionsDisplaySize,
keepScreenOn,
], async () => { ], async () => {
await reloadAsk(); await reloadAsk();
}); });

View file

@ -5,6 +5,7 @@
import { markRaw, ref } from 'vue'; import { markRaw, ref } from 'vue';
import * as Misskey from 'misskey-js'; import * as Misskey from 'misskey-js';
import { miLocalStorage } from './local-storage';
import { Storage } from '@/pizzax.js'; import { Storage } from '@/pizzax.js';
interface PostFormAction { interface PostFormAction {
@ -356,6 +357,10 @@ export const defaultStore = markRaw(new Storage('base', {
where: 'device', where: 'device',
default: {} as Record<string, Record<string, string[]>>, default: {} as Record<string, Record<string, string[]>>,
}, },
keepScreenOn: {
where: 'device',
default: false,
},
})); }));
// TODO: 他のタブと永続化されたstateを同期 // TODO: 他のタブと永続化されたstateを同期
@ -382,7 +387,6 @@ interface Watcher {
/** /**
* () * ()
*/ */
import { miLocalStorage } from './local-storage';
import lightTheme from '@/themes/l-light.json5'; import lightTheme from '@/themes/l-light.json5';
import darkTheme from '@/themes/d-green-lime.json5'; import darkTheme from '@/themes/d-green-lime.json5';