diff --git a/locales/en-US.yml b/locales/en-US.yml index 6ea2d36129..c560011e73 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -968,6 +968,9 @@ rateLimitExceeded: "Rate limit exceeded" cropImage: "Crop image" cropImageAsk: "Do you want to crop this image?" file: "File" +image: "Image" +video: "Video" +audio: "Audio" recentNHours: "Last {n} hours" recentNDays: "Last {n} days" noEmailServerWarning: "Email server not configured." @@ -1442,6 +1445,14 @@ _time: minute: "Minute(s)" hour: "Hour(s)" day: "Day(s)" +_filters: + fromUser: "From user" + withFile: "With file" + fromDomain: "From domain" + notesBefore: "Posts before" + notesAfter: "Posts after" + followingOnly: "Following only" + followersOnly: "Followers only" _tutorial: title: "How to use Calckey" step1_1: "Welcome!" diff --git a/packages/backend/native-utils/src/mastodon_api.rs b/packages/backend/native-utils/src/mastodon_api.rs index 7a3ea455a1..57119ea73f 100644 --- a/packages/backend/native-utils/src/mastodon_api.rs +++ b/packages/backend/native-utils/src/mastodon_api.rs @@ -29,7 +29,7 @@ pub fn convert_id(in_id: String, id_convert_type: IdConvertType) -> napi::Result Err(_) => { return Err(Error::new( Status::InvalidArg, - "Unable to parse ID as MasstodonId", + "Unable to parse ID as MastodonId", )) } }; diff --git a/packages/backend/src/server/api/endpoints/notes/search.ts b/packages/backend/src/server/api/endpoints/notes/search.ts index d0c2f8d778..b4d83aa0bc 100644 --- a/packages/backend/src/server/api/endpoints/notes/search.ts +++ b/packages/backend/src/server/api/endpoints/notes/search.ts @@ -2,9 +2,9 @@ import { In } from "typeorm"; import { Notes } from "@/models/index.js"; import { Note } from "@/models/entities/note.js"; import config from "@/config/index.js"; -import es from "../../../../db/elasticsearch.js"; -import sonic from "../../../../db/sonic.js"; -import meilisearch, { MeilisearchNote } from "../../../../db/meilisearch.js"; +import es from "@/db/elasticsearch.js"; +import sonic from "@/db/sonic.js"; +import meilisearch, { MeilisearchNote } from "@/db/meilisearch.js"; import define from "../../define.js"; import { makePaginationQuery } from "../../common/make-pagination-query.js"; import { generateVisibilityQuery } from "../../common/generate-visibility-query.js"; diff --git a/packages/backend/src/server/api/endpoints/patrons.ts b/packages/backend/src/server/api/endpoints/patrons.ts index a0a7598123..944858694a 100644 --- a/packages/backend/src/server/api/endpoints/patrons.ts +++ b/packages/backend/src/server/api/endpoints/patrons.ts @@ -20,8 +20,7 @@ export default define(meta, paramDef, async () => { const cachedPatrons = await redisClient.get("patrons"); if (cachedPatrons) { patrons = JSON.parse(cachedPatrons); - } - else { + } else { patrons = await fetch( "https://codeberg.org/calckey/calckey/raw/branch/develop/patrons.json", ).then((response) => response.json()); diff --git a/packages/backend/src/server/api/endpoints/stats.ts b/packages/backend/src/server/api/endpoints/stats.ts index 8bd5597689..97889c42ed 100644 --- a/packages/backend/src/server/api/endpoints/stats.ts +++ b/packages/backend/src/server/api/endpoints/stats.ts @@ -1,6 +1,6 @@ import { Instances, NoteReactions, Notes, Users } from "@/models/index.js"; import define from "../define.js"; -import {} from "@/services/chart/index.js"; +import { driveChart, notesChart, usersChart } from "@/services/chart/index.js"; import { IsNull } from "typeorm"; export const meta = { @@ -60,19 +60,25 @@ export const paramDef = { } as const; export default define(meta, paramDef, async () => { + const notesChartData = await notesChart.getChart("hour", 1, null); + const notesCount = + notesChartData.local.total[0] + notesChartData.remote.total[0]; + const originalNotesCount = notesChartData.local.total[0]; + + const usersChartData = await usersChart.getChart("hour", 1, null); + const usersCount = + usersChartData.local.total[0] + usersChartData.remote.total[0]; + const originalUsersCount = usersChartData.local.total[0]; + const driveChartData = await driveChart.getChart("hour", 1, null); + //TODO: fixme currently returns 0 + const driveUsageLocal = driveChartData.local.incSize[0]; + const driveUsageRemote = driveChartData.remote.incSize[0]; + const [ - notesCount, - originalNotesCount, - usersCount, - originalUsersCount, reactionsCount, //originalReactionsCount, instances, ] = await Promise.all([ - Notes.count({ cache: 3600000 }), // 1 hour - Notes.count({ where: { userHost: IsNull() }, cache: 3600000 }), - Users.count({ cache: 3600000 }), - Users.count({ where: { host: IsNull() }, cache: 3600000 }), NoteReactions.count({ cache: 3600000 }), // 1 hour //NoteReactions.count({ where: { userHost: IsNull() }, cache: 3600000 }), Instances.count({ cache: 3600000 }), @@ -86,7 +92,7 @@ export default define(meta, paramDef, async () => { reactionsCount, //originalReactionsCount, instances, - driveUsageLocal: 0, - driveUsageRemote: 0, + driveUsageLocal, + driveUsageRemote, }; }); diff --git a/packages/backend/src/server/api/endpoints/users/followers.ts b/packages/backend/src/server/api/endpoints/users/followers.ts index 138343d9f4..855ab35736 100644 --- a/packages/backend/src/server/api/endpoints/users/followers.ts +++ b/packages/backend/src/server/api/endpoints/users/followers.ts @@ -37,6 +37,12 @@ export const meta = { code: "FORBIDDEN", id: "3c6a84db-d619-26af-ca14-06232a21df8a", }, + + nullFollowers: { + message: "No followers found.", + code: "NULL_FOLLOWERS", + id: "174a6507-a6c2-4925-8e5d-92fd08aedc9e", + }, }, } as const; @@ -97,7 +103,7 @@ export default define(meta, paramDef, async (ps, me) => { followerId: me.id, }); if (following == null) { - throw new ApiError(meta.errors.forbidden); + throw new ApiError(meta.errors.nullFollowers); } } } diff --git a/packages/client/src/components/MkButton.vue b/packages/client/src/components/MkButton.vue index 682072f4cb..aa0adb54bd 100644 --- a/packages/client/src/components/MkButton.vue +++ b/packages/client/src/components/MkButton.vue @@ -2,7 +2,7 @@