diff --git a/bun.lockb b/bun.lockb index ed29d51f56c1b4b82ee7104129352e8de1240e2b..5a89d29d42205679078bbe74a37db3c58f635322 100755 GIT binary patch delta 34 qcmeyeRP@VI(S{br7N#xCg3=q&>*~PrQvWunq1OU>A3o-xz diff --git a/server/api/stats.ts b/server/api/stats.ts index beee681..683b213 100644 --- a/server/api/stats.ts +++ b/server/api/stats.ts @@ -1,10 +1,11 @@ import {exportStats, StatExport} from "~/server/utils/api/stats"; +import {ProjectTypes} from "~/server/utils/types/project"; export default defineEventHandler(async (event): Promise => { let query = getQuery(event); let mode = query.mode as string; - let type = query.type as string; + let type = query.type as ProjectTypes; if (query.stat == "count") { return exportStats(mode, type, value => value.count) diff --git a/server/api/update.ts b/server/api/update.dev.ts similarity index 100% rename from server/api/update.ts rename to server/api/update.dev.ts diff --git a/server/utils/allowed.ts b/server/utils/allowed.ts index 33e1201..31ac35c 100644 --- a/server/utils/allowed.ts +++ b/server/utils/allowed.ts @@ -1,5 +1,24 @@ +import {ProjectTypes} from "~/server/utils/types/project"; + const allowedModLoaders = ["fabric", "forge", "neoforge", "quilt", "liteloader", "modloader", "rift"] +const allowedPluginLoaders = ["bukkit", "folia", "paper", "purpur", "spigot", "sponge"] +const allowedShaderLoaders = ["canvas", "iris", "optifine", "vanilla"] +const allowedResourcePackLoaders = ["minecraft"] +const allowedDatapackLoaders = ["datapack"] -export function isAllowedModLoader(name: string) { - return allowedModLoaders.includes(name); +export function isAllowedModLoader(name: string, type: ProjectTypes) { + switch (type) { + case "mod": + return allowedModLoaders.includes(name); + case "plugin": + return allowedPluginLoaders.includes(name); + case "datapack": + return allowedDatapackLoaders.includes(name); + case "shader": + return allowedShaderLoaders.includes(name); + case "resourcepack": + return allowedResourcePackLoaders.includes(name); + case "modpack": + return allowedModLoaders.includes(name); + } } \ No newline at end of file diff --git a/server/utils/api/stats.ts b/server/utils/api/stats.ts index c92e8d7..33eafa9 100644 --- a/server/utils/api/stats.ts +++ b/server/utils/api/stats.ts @@ -1,5 +1,5 @@ import {Stats, StatsValue} from "~/server/utils/types/stats"; -import {H3Event} from "h3"; +import {ProjectTypes} from "~/server/utils/types/project"; export type StatExport = { labels: string[] @@ -10,7 +10,7 @@ export type StatExport = { }[] } -export async function exportStats(mode: string, type: string, fn: (value: StatsValue) => number): Promise { +export async function exportStats(mode: string, type: ProjectTypes, fn: (value: StatsValue) => number): Promise { const storage = useStorage("statistics"); let stats diff --git a/server/utils/color.ts b/server/utils/color.ts index f22384e..3b6e4a6 100644 --- a/server/utils/color.ts +++ b/server/utils/color.ts @@ -1,18 +1,36 @@ export function getColorForLauncher(name: string): string { switch (name) { case 'fabric': - return "#dbb69b" + return "#dbb69b"; case 'quilt': - return "#c796f9" + return "#c796f9"; case 'forge': - return "#959eef" + return "#959eef"; case 'neoforge': - return "#f99e6b" + return "#f99e6b"; case 'liteloader': - return "#7ab0ee" + return "#7ab0ee"; + case 'bukkit': + return "#f6af7b"; + case 'bungeecord': + return "#d2c080"; + case 'folia': + return "#a5e388"; + case 'paper': + return "#eeaaaa"; + case 'purpur': + return "#c3abf7"; + case 'spigot': + return "#f1cc84"; + case 'velocity': + return "#83d5ef"; + case 'waterfall': + return "#78a4fb"; + case 'sponge': + return "#f9e580"; default: { console.log(`unknown Launcher trying to access color - ${name}`); - return "#6b7280" + return "#6b7280"; } } } \ No newline at end of file diff --git a/server/utils/statistics.ts b/server/utils/statistics.ts index 6ea42a7..2f170d6 100644 --- a/server/utils/statistics.ts +++ b/server/utils/statistics.ts @@ -1,18 +1,25 @@ import {Stats} from "~/server/utils/types/stats"; import {GameVersion, Version} from "~/server/utils/fetchData"; +import {ProjectTypes} from "~/server/utils/types/project"; type StatsData = Map> type AllStats = { all: Stats, minor: Stats, major: Stats }; export async function updateStatistics() { - const modStats = await getStatistics("mod") - await saveStats(modStats, "mod") + await updateStatistic("mod") + await updateStatistic("modpack") + await updateStatistic("resourcepack") + await updateStatistic("shader") + await updateStatistic("plugin") + await updateStatistic("datapack") +} - const modpackStats = await getStatistics("modpack") - await saveStats(modpackStats, "modpack") +async function updateStatistic(type: ProjectTypes) { + const stats = await getStatistics(type) + await saveStats(stats, type) } -async function saveStats(stats: AllStats, type: string) { +async function saveStats(stats: AllStats, type: ProjectTypes) { const storage = useStorage("statistics"); await storage.setItem(`${type}StatsAll`, stats.all) await storage.setItem(`${type}StatsMinor`, stats.minor) @@ -20,7 +27,7 @@ async function saveStats(stats: AllStats, type: string) { ) } -async function getStatistics(type: string): Promise { +async function getStatistics(type: ProjectTypes): Promise { const BATCH_COUNT = import.meta.dev ? 1 : 10; let data: StatsData = new Map() @@ -46,7 +53,7 @@ async function getStatistics(type: string): Promise { const versionIds = (await getVersionIds(batchProjectIds)) console.log("version ids", versionIds.length); - await analyzeVersionsFromIds(versionIds, data); + await analyzeVersionsFromIds(versionIds, data, type); if (done || import.meta.dev) break } @@ -63,7 +70,7 @@ async function getStatistics(type: string): Promise { } } -async function analyzeVersionsFromIds(versionIds: string[], data: StatsData) { +async function analyzeVersionsFromIds(versionIds: string[], data: StatsData, type: ProjectTypes) { const BATCH_SIZE = 1000; let currentIndex = 0; @@ -75,15 +82,15 @@ async function analyzeVersionsFromIds(versionIds: string[], data: StatsData) { const versions = await getVersions(ids) console.log("versions", versions.length); - analyzeVersions(versions, data); + analyzeVersions(versions, data, type); if (ids.length != BATCH_SIZE) break } } -function analyzeVersions(versions: Version[], data: StatsData) { +function analyzeVersions(versions: Version[], data: StatsData, type: ProjectTypes) { for (let version of versions) { - let allowedLaunchers = version.loaders.filter(value => isAllowedModLoader(value)); + let allowedLaunchers = version.loaders.filter(value => isAllowedModLoader(value, type)); // compensate for a version contributing to multiple loaders and versions let versionDownloads = version.downloads / (allowedLaunchers.length * version.game_versions.length) diff --git a/server/utils/types/project.ts b/server/utils/types/project.ts new file mode 100644 index 0000000..e8b5955 --- /dev/null +++ b/server/utils/types/project.ts @@ -0,0 +1 @@ +export type ProjectTypes = "mod" | "plugin" | "datapack" | "shader" | "resourcepack" | "modpack" \ No newline at end of file -- 2.51.2 From 7ee46167a9c57bd6927286e5e43b5fec8df68e4b Mon Sep 17 00:00:00 2001 From: tobinio Date: Fri, 28 Jun 2024 11:19:02 +0200 Subject: [PATCH 2/9] feat: show all project types --- components/navigation/LinksContainer.vue | 46 +++++++++++++++++++++++ layouts/default.vue | 48 +----------------------- server/api/stats.ts | 2 +- server/utils/allowed.ts | 2 +- server/utils/api/stats.ts | 2 +- server/utils/statistics.ts | 11 ++---- server/utils/types/project.ts | 1 - utils/project.ts | 2 + 8 files changed, 57 insertions(+), 57 deletions(-) create mode 100644 components/navigation/LinksContainer.vue delete mode 100644 server/utils/types/project.ts create mode 100644 utils/project.ts diff --git a/components/navigation/LinksContainer.vue b/components/navigation/LinksContainer.vue new file mode 100644 index 0000000..9273222 --- /dev/null +++ b/components/navigation/LinksContainer.vue @@ -0,0 +1,46 @@ + + + + + \ No newline at end of file diff --git a/layouts/default.vue b/layouts/default.vue index 207206b..96a7320 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -1,34 +1,9 @@