Merge branch 'scrobbles-age' into 'develop'

Add setting to only show scrobbles newer than certain age.

See merge request pleroma/pleroma-fe!1904
This commit is contained in:
HJ 2024-05-22 12:25:24 +00:00
commit fd1011f622
12 changed files with 66 additions and 23 deletions

View File

@ -0,0 +1 @@
Option to only show scrobbles that are recent enough

View File

@ -17,6 +17,10 @@ export default {
units: { units: {
type: Array, type: Array,
default: () => allCssUnits default: () => allCssUnits
},
unitSet: {
type: String,
default: 'none'
} }
}, },
computed: { computed: {
@ -30,6 +34,10 @@ export default {
}, },
methods: { methods: {
...Setting.methods, ...Setting.methods,
getUnitString (value) {
if (this.unitSet === 'none') return value
return this.$t(['settings', 'units', this.unitSet, value].join('.'))
},
updateValue (e) { updateValue (e) {
this.configSink(this.path, parseInt(e.target.value) + this.stateUnit) this.configSink(this.path, parseInt(e.target.value) + this.stateUnit)
}, },

View File

@ -1,7 +1,7 @@
<template> <template>
<span <span
v-if="matchesExpertLevel" v-if="matchesExpertLevel"
class="SizeSetting" class="UnitSetting"
> >
<label <label
:for="path" :for="path"
@ -23,7 +23,7 @@
:id="path" :id="path"
:model-value="stateUnit" :model-value="stateUnit"
:disabled="disabled" :disabled="disabled"
class="css-unit-input" class="unit-input unstyled"
@change="updateUnit" @change="updateUnit"
> >
<option <option
@ -31,7 +31,7 @@
:key="option" :key="option"
:value="option" :value="option"
> >
{{ option }} {{ getUnitString(option) }}
</option> </option>
</Select> </Select>
{{ ' ' }} {{ ' ' }}
@ -42,20 +42,19 @@
</span> </span>
</template> </template>
<script src="./size_setting.js"></script> <script src="./unit_setting.js"></script>
<style lang="scss"> <style lang="scss">
.SizeSetting { .UnitSetting {
.number-input { .number-input {
max-width: 6.5em; max-width: 6.5em;
text-align: right;
} }
.css-unit-input, .unit-input,
.css-unit-input select { .unit-input select {
margin-left: 0.5em;
width: 4em;
max-width: 4em;
min-width: 4em; min-width: 4em;
width: auto;
} }
} }

View File

@ -31,10 +31,6 @@
margin-bottom: 1em; margin-bottom: 1em;
} }
select {
min-width: 10em;
}
textarea { textarea {
width: 100%; width: 100%;
max-width: 100%; max-width: 100%;

View File

@ -31,10 +31,6 @@
margin-bottom: 1em; margin-bottom: 1em;
} }
select {
min-width: 10em;
}
textarea { textarea {
width: 100%; width: 100%;
max-width: 100%; max-width: 100%;

View File

@ -1,6 +1,7 @@
import { filter, trim, debounce } from 'lodash' import { filter, trim, debounce } from 'lodash'
import BooleanSetting from '../helpers/boolean_setting.vue' import BooleanSetting from '../helpers/boolean_setting.vue'
import ChoiceSetting from '../helpers/choice_setting.vue' import ChoiceSetting from '../helpers/choice_setting.vue'
import UnitSetting from '../helpers/unit_setting.vue'
import IntegerSetting from '../helpers/integer_setting.vue' import IntegerSetting from '../helpers/integer_setting.vue'
import SharedComputedObject from '../helpers/shared_computed_object.js' import SharedComputedObject from '../helpers/shared_computed_object.js'
@ -19,6 +20,7 @@ const FilteringTab = {
components: { components: {
BooleanSetting, BooleanSetting,
ChoiceSetting, ChoiceSetting,
UnitSetting,
IntegerSetting IntegerSetting
}, },
computed: { computed: {

View File

@ -119,6 +119,17 @@
{{ $t('settings.hide_scrobbles') }} {{ $t('settings.hide_scrobbles') }}
</BooleanSetting> </BooleanSetting>
</li> </li>
<li>
<UnitSetting
key="hideScrobblesAfter"
path="hideScrobblesAfter"
:units="['m', 'h', 'd']"
unitSet="time"
expert="1"
>
{{ $t('settings.hide_scrobbles_after') }}
</UnitSetting>
</li>
</ul> </ul>
</div> </div>
<div <div

View File

@ -3,7 +3,7 @@ import ChoiceSetting from '../helpers/choice_setting.vue'
import ScopeSelector from 'src/components/scope_selector/scope_selector.vue' import ScopeSelector from 'src/components/scope_selector/scope_selector.vue'
import IntegerSetting from '../helpers/integer_setting.vue' import IntegerSetting from '../helpers/integer_setting.vue'
import FloatSetting from '../helpers/float_setting.vue' import FloatSetting from '../helpers/float_setting.vue'
import SizeSetting, { defaultHorizontalUnits } from '../helpers/size_setting.vue' import UnitSetting, { defaultHorizontalUnits } from '../helpers/unit_setting.vue'
import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue' import InterfaceLanguageSwitcher from 'src/components/interface_language_switcher/interface_language_switcher.vue'
import SharedComputedObject from '../helpers/shared_computed_object.js' import SharedComputedObject from '../helpers/shared_computed_object.js'
@ -64,7 +64,7 @@ const GeneralTab = {
ChoiceSetting, ChoiceSetting,
IntegerSetting, IntegerSetting,
FloatSetting, FloatSetting,
SizeSetting, UnitSetting,
InterfaceLanguageSwitcher, InterfaceLanguageSwitcher,
ScopeSelector, ScopeSelector,
ProfileSettingIndicator ProfileSettingIndicator

View File

@ -134,7 +134,7 @@
<li v-if="expertLevel > 0"> <li v-if="expertLevel > 0">
{{ $t('settings.column_sizes') }} {{ $t('settings.column_sizes') }}
<div class="column-settings"> <div class="column-settings">
<SizeSetting <UnitSetting
v-for="column in columns" v-for="column in columns"
:key="column" :key="column"
:path="column + 'ColumnWidth'" :path="column + 'ColumnWidth'"
@ -142,7 +142,7 @@
expert="1" expert="1"
> >
{{ $t('settings.column_sizes_' + column) }} {{ $t('settings.column_sizes_' + column) }}
</SizeSetting> </UnitSetting>
</div> </div>
</li> </li>
<li class="select-multiple"> <li class="select-multiple">

View File

@ -425,7 +425,27 @@ const Status = {
return this.quotedStatus && this.displayQuote return this.quotedStatus && this.displayQuote
}, },
scrobblePresent () { scrobblePresent () {
return !this.mergedConfig.hideScrobbles && this.status.user.latestScrobble && this.status.user.latestScrobble.artist if (this.mergedConfig.hideScrobbles) return false
if (!this.status.user.latestScrobble) return false
const value = this.mergedConfig.hideScrobblesAfter.match(/\d+/gs)[0]
const unit = this.mergedConfig.hideScrobblesAfter.match(/\D+/gs)[0]
let multiplier = 60 * 1000 // minutes is smallest unit
switch (unit) {
case 'm':
break
case 'h':
multiplier *= 60 // hour
break
case 'd':
multiplier *= 60 // hour
multiplier *= 24 // day
break
}
const maxAge = Number(value) * multiplier
const createdAt = Date.parse(this.status.user.latestScrobble.created_at)
const age = Date.now() - createdAt
if (age > maxAge) return false
return this.status.user.latestScrobble.artist
}, },
scrobble () { scrobble () {
return this.status.user.latestScrobble return this.status.user.latestScrobble

View File

@ -395,6 +395,14 @@
"desc": "To enable two-factor authentication, enter the code from your two-factor app:" "desc": "To enable two-factor authentication, enter the code from your two-factor app:"
} }
}, },
"units": {
"time": {
"m": "minutes",
"s": "seconds",
"h": "hours",
"d": "days"
}
},
"lists_navigation": "Show lists in navigation", "lists_navigation": "Show lists in navigation",
"allow_following_move": "Allow auto-follow when following account moves", "allow_following_move": "Allow auto-follow when following account moves",
"attachmentRadius": "Attachments", "attachmentRadius": "Attachments",
@ -502,6 +510,7 @@
"mute_bot_posts": "Mute bot posts", "mute_bot_posts": "Mute bot posts",
"hide_actor_type_indication": "Hide actor type (bots, groups, etc.) indication in posts", "hide_actor_type_indication": "Hide actor type (bots, groups, etc.) indication in posts",
"hide_scrobbles": "Hide scrobbles", "hide_scrobbles": "Hide scrobbles",
"hide_scrobbles_after": "Hide scrobbles older than",
"mute_sensitive_posts": "Mute sensitive posts", "mute_sensitive_posts": "Mute sensitive posts",
"hide_all_muted_posts": "Hide muted posts", "hide_all_muted_posts": "Hide muted posts",
"max_thumbnails": "Maximum amount of thumbnails per post (empty = no limit)", "max_thumbnails": "Maximum amount of thumbnails per post (empty = no limit)",

View File

@ -43,6 +43,7 @@ export const defaultState = {
hideAttachments: false, hideAttachments: false,
hideAttachmentsInConv: false, hideAttachmentsInConv: false,
hideScrobbles: false, hideScrobbles: false,
hideScrobblesAfter: '2d',
maxThumbnails: 16, maxThumbnails: 16,
hideNsfw: true, hideNsfw: true,
preloadImage: true, preloadImage: true,