Merge branch 'develop' into iceshrimp_mastodon
This commit is contained in:
commit
ee933524e4
17 changed files with 641 additions and 579 deletions
18
Cargo.lock
generated
18
Cargo.lock
generated
|
@ -239,9 +239,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "backtrace"
|
name = "backtrace"
|
||||||
version = "0.3.72"
|
version = "0.3.73"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11"
|
checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"addr2line",
|
"addr2line",
|
||||||
"cc",
|
"cc",
|
||||||
|
@ -290,12 +290,11 @@ checksum = "1dbe4bb73fd931c4d1aaf53b35d1286c8a948ad00ec92c8e3c856f15fd027f43"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bb8"
|
name = "bb8"
|
||||||
version = "0.8.3"
|
version = "0.8.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "df7c2093d15d6a1d33b1f972e1c5ea3177748742b97a5f392aa83a65262c6780"
|
checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"futures-channel",
|
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
@ -2028,9 +2027,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "object"
|
name = "object"
|
||||||
version = "0.35.0"
|
version = "0.36.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e"
|
checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
@ -3143,11 +3142,10 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sqlformat"
|
name = "sqlformat"
|
||||||
version = "0.2.3"
|
version = "0.2.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c"
|
checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools",
|
|
||||||
"nom",
|
"nom",
|
||||||
"unicode_categories",
|
"unicode_categories",
|
||||||
]
|
]
|
||||||
|
|
|
@ -13,7 +13,7 @@ napi-build = "2.1.3"
|
||||||
argon2 = { version = "0.5.3", default-features = false }
|
argon2 = { version = "0.5.3", default-features = false }
|
||||||
async-trait = { version = "0.1.80", default-features = false }
|
async-trait = { version = "0.1.80", default-features = false }
|
||||||
basen = { version = "0.1.0", default-features = false }
|
basen = { version = "0.1.0", default-features = false }
|
||||||
bb8 = { version = "0.8.3", default-features = false }
|
bb8 = { version = "0.8.5", default-features = false }
|
||||||
bcrypt = { version = "0.15.1", default-features = false }
|
bcrypt = { version = "0.15.1", default-features = false }
|
||||||
chrono = { version = "0.4.38", default-features = false }
|
chrono = { version = "0.4.38", default-features = false }
|
||||||
convert_case = { version = "0.6.0", default-features = false }
|
convert_case = { version = "0.6.0", default-features = false }
|
||||||
|
|
|
@ -17,8 +17,7 @@ ENV PATH="/root/.cargo/bin:${PATH}"
|
||||||
COPY packages/macro-rs packages/macro-rs/
|
COPY packages/macro-rs packages/macro-rs/
|
||||||
COPY packages/backend-rs/src/lib.rs packages/backend-rs/src/
|
COPY packages/backend-rs/src/lib.rs packages/backend-rs/src/
|
||||||
COPY packages/backend-rs/Cargo.toml packages/backend-rs/Cargo.toml
|
COPY packages/backend-rs/Cargo.toml packages/backend-rs/Cargo.toml
|
||||||
COPY Cargo.toml Cargo.toml
|
COPY Cargo.toml Cargo.lock ./
|
||||||
COPY Cargo.lock Cargo.lock
|
|
||||||
|
|
||||||
# Configure pnpm, and install backend-rs dependencies
|
# Configure pnpm, and install backend-rs dependencies
|
||||||
RUN corepack enable && corepack prepare pnpm@latest --activate && pnpm --filter backend-rs install
|
RUN corepack enable && corepack prepare pnpm@latest --activate && pnpm --filter backend-rs install
|
||||||
|
|
|
@ -15,6 +15,10 @@ Critical security updates are indicated by the :warning: icon.
|
||||||
- The new Mastodon API uses a new format to manage Mastodon sessions in the database, whereas old implementation uses Misskey sessions. All previous client app and token registrations will not work with the new API. All clients need to be re-registered and all users need to re-authenticate.
|
- The new Mastodon API uses a new format to manage Mastodon sessions in the database, whereas old implementation uses Misskey sessions. All previous client app and token registrations will not work with the new API. All clients need to be re-registered and all users need to re-authenticate.
|
||||||
- All IDs (of statuses/notes, notifications, users, etc.) will be using the alphanumerical format, aligning with the Firefish/Misskey API. The old numerical IDs will not work when queried against the new API.
|
- All IDs (of statuses/notes, notifications, users, etc.) will be using the alphanumerical format, aligning with the Firefish/Misskey API. The old numerical IDs will not work when queried against the new API.
|
||||||
|
|
||||||
|
## [v20240613](https://firefish.dev/firefish/firefish/-/merge_requests/11003/commits)
|
||||||
|
|
||||||
|
This update contains code refactoring and dependency updates, with no major user-facing changes.
|
||||||
|
|
||||||
## [v20240607](https://firefish.dev/firefish/firefish/-/merge_requests/10978/commits)
|
## [v20240607](https://firefish.dev/firefish/firefish/-/merge_requests/10978/commits)
|
||||||
|
|
||||||
- Add the ability to share posts via QR code
|
- Add the ability to share posts via QR code
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "firefish",
|
"name": "firefish",
|
||||||
"version": "20240607",
|
"version": "20240613",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://firefish.dev/firefish/firefish.git"
|
"url": "https://firefish.dev/firefish/firefish.git"
|
||||||
|
@ -26,9 +26,10 @@
|
||||||
"lint:rs": "cargo clippy --fix --allow-dirty --allow-staged && cargo fmt --all --",
|
"lint:rs": "cargo clippy --fix --allow-dirty --allow-staged && cargo fmt --all --",
|
||||||
"debug": "pnpm run build:debug && pnpm run start",
|
"debug": "pnpm run build:debug && pnpm run start",
|
||||||
"mocha": "pnpm --filter backend run mocha",
|
"mocha": "pnpm --filter backend run mocha",
|
||||||
"test": "pnpm run test:ts && pnpm run test:rs",
|
"test": "pnpm run test:rs && pnpm run test:rs:miri && pnpm run test:ts",
|
||||||
"test:ts": "pnpm run mocha",
|
"test:ts": "pnpm run mocha",
|
||||||
"test:rs": "cargo test --doc && cargo nextest run",
|
"test:rs": "cargo test --doc && cargo nextest run",
|
||||||
|
"test:rs:miri": "MIRIFLAGS='-Zmiri-disable-isolation' cargo +nightly miri nextest run -j$(nproc --all)",
|
||||||
"format": "pnpm run format:ts; pnpm run format:rs",
|
"format": "pnpm run format:ts; pnpm run format:rs",
|
||||||
"format:ts": "pnpm -r --parallel run format",
|
"format:ts": "pnpm -r --parallel run format",
|
||||||
"format:rs": "cargo fmt --all --",
|
"format:rs": "cargo fmt --all --",
|
||||||
|
|
|
@ -18,8 +18,8 @@ pub async fn elaborate_impl(
|
||||||
file_ids: &[String],
|
file_ids: &[String],
|
||||||
text: Option<String>,
|
text: Option<String>,
|
||||||
cw: Option<String>,
|
cw: Option<String>,
|
||||||
renote_id: &Option<String>,
|
renote_id: Option<&String>,
|
||||||
reply_id: &Option<String>,
|
reply_id: Option<&String>,
|
||||||
include_parent: bool,
|
include_parent: bool,
|
||||||
) -> Result<Vec<String>, DbErr> {
|
) -> Result<Vec<String>, DbErr> {
|
||||||
let db = db_conn().await?;
|
let db = db_conn().await?;
|
||||||
|
@ -123,8 +123,8 @@ macro_rules! elaborate {
|
||||||
&$note_like.file_ids,
|
&$note_like.file_ids,
|
||||||
$note_like.text.clone(),
|
$note_like.text.clone(),
|
||||||
$note_like.cw.clone(),
|
$note_like.cw.clone(),
|
||||||
&$note_like.renote_id,
|
$note_like.renote_id.as_ref(),
|
||||||
&$note_like.reply_id,
|
$note_like.reply_id.as_ref(),
|
||||||
$include_parent,
|
$include_parent,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
|
@ -57,14 +57,15 @@ pub(super) async fn check_hit_antenna(
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
} else if antenna.src == AntennaSrc::Instances {
|
} else if antenna.src == AntennaSrc::Instances {
|
||||||
let is_from_one_of_specified_servers = antenna.instances.iter().any(|host| {
|
let note_author_host = note_author
|
||||||
host.to_ascii_lowercase()
|
.host
|
||||||
== note_author
|
.clone()
|
||||||
.host
|
.unwrap_or_else(|| CONFIG.host.clone())
|
||||||
.clone()
|
.to_ascii_lowercase();
|
||||||
.unwrap_or_else(|| CONFIG.host.clone())
|
let is_from_one_of_specified_servers = antenna
|
||||||
.to_ascii_lowercase()
|
.instances
|
||||||
});
|
.iter()
|
||||||
|
.any(|host| host.to_ascii_lowercase() == note_author_host);
|
||||||
|
|
||||||
if !is_from_one_of_specified_servers {
|
if !is_from_one_of_specified_servers {
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
|
@ -116,7 +117,10 @@ pub(super) async fn check_hit_antenna(
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if [NoteVisibility::Home, NoteVisibility::Followers].contains(¬e.visibility) {
|
if matches!(
|
||||||
|
note.visibility,
|
||||||
|
NoteVisibility::Home | NoteVisibility::Followers
|
||||||
|
) {
|
||||||
let following_user_ids: Vec<String> =
|
let following_user_ids: Vec<String> =
|
||||||
if let Some(ids) = cache::get_one(cache::Category::Follow, &antenna.user_id).await? {
|
if let Some(ids) = cache::get_one(cache::Category::Follow, &antenna.user_id).await? {
|
||||||
ids
|
ids
|
||||||
|
|
|
@ -27,11 +27,11 @@ fn init_id_generator(length: u8, fingerprint: &str) {
|
||||||
/// It automatically calls [init_id_generator], if the generator has not been initialized.
|
/// It automatically calls [init_id_generator], if the generator has not been initialized.
|
||||||
fn create_id(datetime: &NaiveDateTime) -> String {
|
fn create_id(datetime: &NaiveDateTime) -> String {
|
||||||
if GENERATOR.get().is_none() {
|
if GENERATOR.get().is_none() {
|
||||||
let length = match &CONFIG.cuid {
|
let length = match CONFIG.cuid.as_ref() {
|
||||||
Some(cuid) => cmp::min(cmp::max(cuid.length.unwrap_or(16), 16), 24),
|
Some(cuid) => cuid.length.unwrap_or(16).clamp(16, 24),
|
||||||
None => 16,
|
None => 16,
|
||||||
};
|
};
|
||||||
let fingerprint = match &CONFIG.cuid {
|
let fingerprint = match CONFIG.cuid.as_ref() {
|
||||||
Some(cuid) => cuid.fingerprint.as_deref().unwrap_or_default(),
|
Some(cuid) => cuid.fingerprint.as_deref().unwrap_or_default(),
|
||||||
None => "",
|
None => "",
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,9 +22,9 @@
|
||||||
"@swc/core-android-arm64": "1.3.11"
|
"@swc/core-android-arm64": "1.3.11"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@bull-board/api": "5.20.1",
|
"@bull-board/api": "5.20.2",
|
||||||
"@bull-board/koa": "5.20.1",
|
"@bull-board/koa": "5.20.2",
|
||||||
"@bull-board/ui": "5.20.1",
|
"@bull-board/ui": "5.20.2",
|
||||||
"@discordapp/twemoji": "15.0.3",
|
"@discordapp/twemoji": "15.0.3",
|
||||||
"@koa/cors": "5.0.0",
|
"@koa/cors": "5.0.0",
|
||||||
"@koa/multer": "3.0.2",
|
"@koa/multer": "3.0.2",
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
"archiver": "7.0.1",
|
"archiver": "7.0.1",
|
||||||
"async-lock": "1.4.0",
|
"async-lock": "1.4.0",
|
||||||
"async-mutex": "0.5.0",
|
"async-mutex": "0.5.0",
|
||||||
"aws-sdk": "2.1639.0",
|
"aws-sdk": "2.1642.0",
|
||||||
"axios": "1.7.2",
|
"axios": "1.7.2",
|
||||||
"backend-rs": "workspace:*",
|
"backend-rs": "workspace:*",
|
||||||
"blurhash": "2.0.5",
|
"blurhash": "2.0.5",
|
||||||
|
@ -123,7 +123,7 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@swc/cli": "0.3.12",
|
"@swc/cli": "0.3.12",
|
||||||
"@swc/core": "1.5.28",
|
"@swc/core": "1.6.1",
|
||||||
"@types/adm-zip": "0.5.5",
|
"@types/adm-zip": "0.5.5",
|
||||||
"@types/async-lock": "1.4.0",
|
"@types/async-lock": "1.4.0",
|
||||||
"@types/color-convert": "2.0.3",
|
"@types/color-convert": "2.0.3",
|
||||||
|
@ -169,7 +169,7 @@
|
||||||
"@types/websocket": "1.0.10",
|
"@types/websocket": "1.0.10",
|
||||||
"@types/ws": "8.5.10",
|
"@types/ws": "8.5.10",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"eslint": "9.4.0",
|
"eslint": "9.5.0",
|
||||||
"mocha": "10.4.0",
|
"mocha": "10.4.0",
|
||||||
"pug": "3.0.3",
|
"pug": "3.0.3",
|
||||||
"strict-event-emitter-types": "2.0.0",
|
"strict-event-emitter-types": "2.0.0",
|
||||||
|
@ -177,9 +177,9 @@
|
||||||
"ts-loader": "9.5.1",
|
"ts-loader": "9.5.1",
|
||||||
"ts-node": "10.9.2",
|
"ts-node": "10.9.2",
|
||||||
"tsconfig-paths": "4.2.0",
|
"tsconfig-paths": "4.2.0",
|
||||||
"type-fest": "4.20.0",
|
"type-fest": "4.20.1",
|
||||||
"typescript": "5.4.5",
|
"typescript": "5.4.5",
|
||||||
"webpack": "5.92.0",
|
"webpack": "5.92.0",
|
||||||
"ws": "8.17.0"
|
"ws": "8.17.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
"@types/tinycolor2": "1.4.6",
|
"@types/tinycolor2": "1.4.6",
|
||||||
"@types/uuid": "9.0.8",
|
"@types/uuid": "9.0.8",
|
||||||
"@vitejs/plugin-vue": "5.0.5",
|
"@vitejs/plugin-vue": "5.0.5",
|
||||||
"@vue/runtime-core": "3.4.27",
|
"@vue/runtime-core": "3.4.29",
|
||||||
"autobind-decorator": "2.4.0",
|
"autobind-decorator": "2.4.0",
|
||||||
"autosize": "6.0.1",
|
"autosize": "6.0.1",
|
||||||
"broadcast-channel": "7.0.0",
|
"broadcast-channel": "7.0.0",
|
||||||
|
@ -84,9 +84,9 @@
|
||||||
"typescript": "5.4.5",
|
"typescript": "5.4.5",
|
||||||
"unicode-emoji-json": "0.6.0",
|
"unicode-emoji-json": "0.6.0",
|
||||||
"uuid": "10.0.0",
|
"uuid": "10.0.0",
|
||||||
"vite": "5.2.13",
|
"vite": "5.3.1",
|
||||||
"vite-plugin-compression": "0.5.1",
|
"vite-plugin-compression": "0.5.1",
|
||||||
"vue": "3.4.27",
|
"vue": "3.4.29",
|
||||||
"vue-draggable-plus": "0.5.0",
|
"vue-draggable-plus": "0.5.0",
|
||||||
"vue-plyr": "7.0.0",
|
"vue-plyr": "7.0.0",
|
||||||
"vue-prism-editor": "2.0.0-alpha.2",
|
"vue-prism-editor": "2.0.0-alpha.2",
|
||||||
|
|
|
@ -78,8 +78,8 @@ const bg = {
|
||||||
|
|
||||||
function getInstanceIcon(instance): string {
|
function getInstanceIcon(instance): string {
|
||||||
return (
|
return (
|
||||||
getProxiedImageUrlNullable(instance.iconUrl, "preview") ??
|
|
||||||
getProxiedImageUrlNullable(instance.faviconUrl, "preview") ??
|
getProxiedImageUrlNullable(instance.faviconUrl, "preview") ??
|
||||||
|
getProxiedImageUrlNullable(instance.iconUrl, "preview") ??
|
||||||
"/client-assets/dummy.png"
|
"/client-assets/dummy.png"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -328,13 +328,21 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
case "fg": {
|
case "fg": {
|
||||||
let color = token.props.args.color;
|
let color = token.props.args.color;
|
||||||
if (!/^[0-9a-f]{3,6}$/i.test(color.toString())) color = "f00";
|
if (
|
||||||
|
color == null ||
|
||||||
|
!/^[0-9a-f]{3,6}$/i.test(color.toString())
|
||||||
|
)
|
||||||
|
color = "f00";
|
||||||
style = `color: #${color};`;
|
style = `color: #${color};`;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "bg": {
|
case "bg": {
|
||||||
let color = token.props.args.color;
|
let color = token.props.args.color;
|
||||||
if (!/^[0-9a-f]{3,6}$/i.test(color.toString())) color = "f00";
|
if (
|
||||||
|
color == null ||
|
||||||
|
!/^[0-9a-f]{3,6}$/i.test(color.toString())
|
||||||
|
)
|
||||||
|
color = "f00";
|
||||||
style = `background-color: #${color};`;
|
style = `background-color: #${color};`;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<swiper-slide>
|
<swiper-slide>
|
||||||
<div class="_formRoot">
|
<div class="_formRoot">
|
||||||
<div class="fnfelxur">
|
<div class="fnfelxur">
|
||||||
<img :src="faviconUrl" alt="" class="icon" />
|
<img :src="iconUrl" alt="" class="icon" />
|
||||||
<span class="name">{{
|
<span class="name">{{
|
||||||
instance.name || `(${i18n.ts.unknown})`
|
instance.name || `(${i18n.ts.unknown})`
|
||||||
}}</span>
|
}}</span>
|
||||||
|
@ -310,7 +310,7 @@ const instance = ref<AugmentedInstance | null>(null);
|
||||||
const suspended = ref(false);
|
const suspended = ref(false);
|
||||||
const isBlocked = ref(false);
|
const isBlocked = ref(false);
|
||||||
const isSilenced = ref(false);
|
const isSilenced = ref(false);
|
||||||
const faviconUrl = ref<string | null>(null);
|
const iconUrl = ref<string | null>(null);
|
||||||
|
|
||||||
const usersPagination = {
|
const usersPagination = {
|
||||||
endpoint: isAdmin ? ("admin/show-users" as const) : ("users" as const),
|
endpoint: isAdmin ? ("admin/show-users" as const) : ("users" as const),
|
||||||
|
@ -332,9 +332,9 @@ async function fetch() {
|
||||||
suspended.value = instance.value.isSuspended;
|
suspended.value = instance.value.isSuspended;
|
||||||
isBlocked.value = instance.value.isBlocked;
|
isBlocked.value = instance.value.isBlocked;
|
||||||
isSilenced.value = instance.value.isSilenced;
|
isSilenced.value = instance.value.isSilenced;
|
||||||
faviconUrl.value =
|
iconUrl.value =
|
||||||
getProxiedImageUrlNullable(instance.value.faviconUrl, "preview") ??
|
getProxiedImageUrlNullable(instance.value.iconUrl, "preview") ??
|
||||||
getProxiedImageUrlNullable(instance.value.iconUrl, "preview");
|
getProxiedImageUrlNullable(instance.value.faviconUrl, "preview");
|
||||||
}
|
}
|
||||||
|
|
||||||
async function toggleBlock() {
|
async function toggleBlock() {
|
||||||
|
|
|
@ -1,14 +1,23 @@
|
||||||
import { ColdDeviceStorage } from "@/store";
|
import { ColdDeviceStorage } from "@/store";
|
||||||
|
|
||||||
const ctx = new AudioContext();
|
let ctx: AudioContext | null;
|
||||||
const cache = new Map<string, HTMLAudioElement>();
|
try {
|
||||||
|
ctx = new AudioContext();
|
||||||
|
} catch {
|
||||||
|
ctx = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const cache = new Map<string, AudioBuffer>();
|
||||||
|
|
||||||
export async function getAudio(
|
export async function getAudio(
|
||||||
file: string,
|
file: string,
|
||||||
useCache = true,
|
useCache = true,
|
||||||
): HTMLAudioElement {
|
): Promise<AudioBuffer | null> {
|
||||||
if (useCache && cache.has(file)) {
|
if (useCache && cache.has(file)) {
|
||||||
return cache.get(file);
|
return cache.get(file) ?? null;
|
||||||
|
}
|
||||||
|
if (ctx == null) {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const response = await fetch(`/static-assets/sounds/${file}.mp3`);
|
const response = await fetch(`/static-assets/sounds/${file}.mp3`);
|
||||||
|
@ -39,7 +48,7 @@ export function play(type: string) {
|
||||||
|
|
||||||
export async function playFile(file: string, volume: number) {
|
export async function playFile(file: string, volume: number) {
|
||||||
const masterVolume = ColdDeviceStorage.get("sound_masterVolume");
|
const masterVolume = ColdDeviceStorage.get("sound_masterVolume");
|
||||||
if (masterVolume === 0 || volume === 0) {
|
if (ctx == null || masterVolume === 0 || volume === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@swc/cli": "0.3.12",
|
"@swc/cli": "0.3.12",
|
||||||
"@swc/core": "1.5.28",
|
"@swc/core": "1.6.1",
|
||||||
"@swc/types": "0.1.8",
|
"@swc/types": "0.1.8",
|
||||||
"@types/jest": "29.5.12",
|
"@types/jest": "29.5.12",
|
||||||
"@types/node": "20.14.2",
|
"@types/node": "20.14.2",
|
||||||
|
@ -30,9 +30,9 @@
|
||||||
"jest-fetch-mock": "3.0.3",
|
"jest-fetch-mock": "3.0.3",
|
||||||
"jest-websocket-mock": "2.5.0",
|
"jest-websocket-mock": "2.5.0",
|
||||||
"mock-socket": "9.3.1",
|
"mock-socket": "9.3.1",
|
||||||
"ts-jest": "29.1.4",
|
"ts-jest": "29.1.5",
|
||||||
"ts-node": "10.9.2",
|
"ts-node": "10.9.2",
|
||||||
"tsd": "0.31.0",
|
"tsd": "0.31.1",
|
||||||
"typescript": "5.4.5"
|
"typescript": "5.4.5"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"firefish-js": "workspace:*",
|
"firefish-js": "workspace:*",
|
||||||
"idb-keyval": "6.2.1",
|
"idb-keyval": "6.2.1",
|
||||||
"vite": "5.2.13",
|
"vite": "5.3.1",
|
||||||
"vite-plugin-compression": "0.5.1"
|
"vite-plugin-compression": "0.5.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1079
pnpm-lock.yaml
1079
pnpm-lock.yaml
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue