diff --git a/apps/app-frontend/src/components/ui/settings/AppearanceSettings.vue b/apps/app-frontend/src/components/ui/settings/AppearanceSettings.vue
index 01d49310e..74dc28a76 100644
--- a/apps/app-frontend/src/components/ui/settings/AppearanceSettings.vue
+++ b/apps/app-frontend/src/components/ui/settings/AppearanceSettings.vue
@@ -10,8 +10,9 @@ import type { ColorTheme, FeatureFlag } from '@/store/theme.ts'
const themeStore = useTheming()
const { formatMessage } = useVIntl()
-const worldsInHomeFeatureFlag = 'worlds_in_home' as FeatureFlag
-const skipUnknownPackWarningFeatureFlag = 'skip_unknown_pack_warning' as FeatureFlag
+const worldsInHomeFlag: FeatureFlag = 'worlds_in_home'
+const skipUnknownPackWarningFlag: FeatureFlag = 'skip_unknown_pack_warning'
+const showPlayTimeFlag: FeatureFlag = 'show_instance_play_time'
const messages = defineMessages({
colorThemeTitle: {
@@ -100,6 +101,14 @@ const messages = defineMessages({
defaultMessage:
"If you attempt to install a Modrinth Pack file (.mrpack) that isn't hosted on Modrinth, we'll make sure you understand the risks before installing it.",
},
+ showPlayTimeTitle: {
+ id: 'app.appearance-settings.show-play-time.title',
+ defaultMessage: 'Show play time',
+ },
+ showPlayTimeDescription: {
+ id: 'app.appearance-settings.show-play-time.description',
+ defaultMessage: `Displays how much time you've spent playing an instance.`,
+ },
})
const os = ref(await getOS())
@@ -153,25 +162,6 @@ watch(
/>
-
-
-
- {{ formatMessage(messages.hideNametagTitle) }}
-
-
{{ formatMessage(messages.hideNametagDescription) }}
-
-
{
- themeStore.hideNametagSkinsPage = !!e
- settings.hide_nametag_skins_page = themeStore.hideNametagSkinsPage
- }
- "
- />
-
-
@@ -192,6 +182,44 @@ watch(
+
+
+
+ {{ formatMessage(messages.showPlayTimeTitle) }}
+
+
{{ formatMessage(messages.showPlayTimeDescription) }}
+
+
{
+ const newValue = !themeStore.getFeatureFlag(showPlayTimeFlag)
+ themeStore.featureFlags[showPlayTimeFlag] = newValue
+ settings.feature_flags[showPlayTimeFlag] = newValue
+ }
+ "
+ />
+
+
+
+
+
+ {{ formatMessage(messages.hideNametagTitle) }}
+
+
{{ formatMessage(messages.hideNametagDescription) }}
+
+
{
+ themeStore.hideNametagSkinsPage = !!e
+ settings.hide_nametag_skins_page = themeStore.hideNametagSkinsPage
+ }
+ "
+ />
+
+
@@ -226,12 +254,12 @@ watch(
{{ formatMessage(messages.jumpBackIntoWorldsDescription) }}
{
- const newValue = !themeStore.getFeatureFlag(worldsInHomeFeatureFlag)
- themeStore.featureFlags[worldsInHomeFeatureFlag] = newValue
- settings.feature_flags[worldsInHomeFeatureFlag] = newValue
+ const newValue = !themeStore.getFeatureFlag(worldsInHomeFlag)
+ themeStore.featureFlags[worldsInHomeFlag] = newValue
+ settings.feature_flags[worldsInHomeFlag] = newValue
}
"
/>
@@ -245,13 +273,13 @@ watch(
{{ formatMessage(messages.unknownPackWarningDescription) }}
{
const warnBeforeUnknownPackInstall = !!e
const skipUnknownPackWarning = !warnBeforeUnknownPackInstall
- themeStore.featureFlags[skipUnknownPackWarningFeatureFlag] = skipUnknownPackWarning
- settings.feature_flags[skipUnknownPackWarningFeatureFlag] = skipUnknownPackWarning
+ themeStore.featureFlags[skipUnknownPackWarningFlag] = skipUnknownPackWarning
+ settings.feature_flags[skipUnknownPackWarningFlag] = skipUnknownPackWarning
}
"
/>
diff --git a/apps/app-frontend/src/locales/en-US/index.json b/apps/app-frontend/src/locales/en-US/index.json
index 5d909a577..c135561d0 100644
--- a/apps/app-frontend/src/locales/en-US/index.json
+++ b/apps/app-frontend/src/locales/en-US/index.json
@@ -86,6 +86,12 @@
"app.appearance-settings.select-option": {
"message": "Select an option"
},
+ "app.appearance-settings.show-play-time.description": {
+ "message": "Displays how much time you've spent playing an instance."
+ },
+ "app.appearance-settings.show-play-time.title": {
+ "message": "Show play time"
+ },
"app.appearance-settings.toggle-sidebar.description": {
"message": "Enables the ability to toggle the sidebar."
},
diff --git a/apps/app-frontend/src/pages/instance/Index.vue b/apps/app-frontend/src/pages/instance/Index.vue
index 009090029..1e003a923 100644
--- a/apps/app-frontend/src/pages/instance/Index.vue
+++ b/apps/app-frontend/src/pages/instance/Index.vue
@@ -32,14 +32,16 @@
{{ instance.loader }} {{ instance.game_version }}
-
+
+
-
-
- {{ timePlayedHumanized }}
-
- Never played
-
+
+
+ {{ timePlayedHumanized }}
+
+ Never played
+
+
@@ -326,7 +328,7 @@ import { showProfileInFolder } from '@/helpers/utils.js'
import { get_server_status, refreshWorlds } from '@/helpers/worlds'
import { injectServerInstall } from '@/providers/server-install'
import { handleSevereError } from '@/store/error.js'
-import { useBreadcrumbs } from '@/store/state'
+import { useBreadcrumbs, useTheming } from '@/store/state'
dayjs.extend(duration)
dayjs.extend(relativeTime)
@@ -338,6 +340,8 @@ const route = useRoute()
const router = useRouter()
const breadcrumbs = useBreadcrumbs()
+const themeStore = useTheming()
+const showInstancePlayTime = computed(() => themeStore.getFeatureFlag('show_instance_play_time'))
const contentSubpageRouteNames = new Set(['Mods', 'ModsFilter'])
const offline = ref(!navigator.onLine)
diff --git a/apps/app-frontend/src/store/theme.ts b/apps/app-frontend/src/store/theme.ts
index 70625aa6c..7f704e6fb 100644
--- a/apps/app-frontend/src/store/theme.ts
+++ b/apps/app-frontend/src/store/theme.ts
@@ -11,6 +11,7 @@ export const DEFAULT_FEATURE_FLAGS = {
skip_unknown_pack_warning: false,
pride_fundraiser: true,
i18n_debug: false,
+ show_instance_play_time: true,
}
export const THEME_OPTIONS = ['dark', 'light', 'oled', 'system'] as const
diff --git a/packages/app-lib/src/state/settings.rs b/packages/app-lib/src/state/settings.rs
index 023924aee..867f5ad26 100644
--- a/packages/app-lib/src/state/settings.rs
+++ b/packages/app-lib/src/state/settings.rs
@@ -62,6 +62,7 @@ pub enum FeatureFlag {
ServersInApp,
ServerProjectQa,
I18nDebug,
+ ShowInstancePlayTime,
}
impl Settings {