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:
commit
fd1011f622
|
@ -0,0 +1 @@
|
||||||
|
Option to only show scrobbles that are recent enough
|
|
@ -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)
|
||||||
},
|
},
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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%;
|
||||||
|
|
|
@ -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%;
|
||||||
|
|
|
@ -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: {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)",
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue