- {{ scope.obj.name }}
+
+ {{ scope.obj.name }}
+
|
@@ -60,10 +71,10 @@
|
- {{ scope.obj.albums.length }}
+ {{ scope.obj.albums_count }}
|
- {{ scope.obj.tracks.length }}
+ {{ scope.obj.tracks_count }}
|
@@ -136,6 +147,12 @@ export default {
this.fetchData()
},
methods: {
+ getUrl (artist) {
+ if (artist.channel) {
+ return {name: 'manage.channels.detail', params: {id: artist.channel }}
+ }
+ return {name: 'manage.library.artists.detail', params: {id: artist.id }}
+ },
fetchData () {
let params = _.merge({
'page': this.page,
diff --git a/front/src/components/mixins/Report.vue b/front/src/components/mixins/Report.vue
index 058c4b5cb..403b89f24 100644
--- a/front/src/components/mixins/Report.vue
+++ b/front/src/components/mixins/Report.vue
@@ -49,7 +49,20 @@ export default {
artist = album.artist
}
}
- if (artist) {
+
+ if (channel) {
+ reportableObjs.push({
+ label: this.$pgettext('*/Moderation/*/Verb', "Report this channel…"),
+ target: {
+ type: 'channel',
+ uuid: channel.uuid,
+ label: channel.artist.name,
+ _obj: channel,
+ typeLabel: this.$pgettext("*/*/*", 'Channel'),
+ }
+ })
+ }
+ else if (artist) {
reportableObjs.push({
label: this.$pgettext('*/Moderation/*/Verb', "Report this artist…"),
target: {
diff --git a/front/src/components/mixins/Translations.vue b/front/src/components/mixins/Translations.vue
index 47eae2b66..1648a830a 100644
--- a/front/src/components/mixins/Translations.vue
+++ b/front/src/components/mixins/Translations.vue
@@ -56,6 +56,14 @@ export default {
summary: {
label: this.$pgettext('Content/Account/*', 'Bio'),
},
+ content_category: {
+ label: this.$pgettext('Content/*/Dropdown.Label/Noun', 'Content category'),
+ choices: {
+ podcast: this.$pgettext('Content/*/Dropdown', 'Podcast'),
+ music: this.$pgettext('*/*/*', 'Music'),
+ other: this.$pgettext('*/*/*', 'Other'),
+ },
+ }
},
filters: {
creation_date: this.$pgettext('Content/*/*/Noun', 'Creation date'),
diff --git a/front/src/components/moderation/ReportModal.vue b/front/src/components/moderation/ReportModal.vue
index f53f6e998..103cb203d 100644
--- a/front/src/components/moderation/ReportModal.vue
+++ b/front/src/components/moderation/ReportModal.vue
@@ -140,6 +140,9 @@ export default {
return
}
let fid = this.target._obj.fid
+ if (this.target.type === 'channel' && this.target._obj.actor ) {
+ fid = this.target._obj.actor.fid
+ }
if (!fid) {
return this.$store.getters['instance/domain']
}
diff --git a/front/src/entities.js b/front/src/entities.js
index 83ed3dba2..c13d7c6e2 100644
--- a/front/src/entities.js
+++ b/front/src/entities.js
@@ -179,6 +179,7 @@ export default {
label: this.$pgettext('*/*/*/Noun', 'Account'),
icon: 'user',
urls: {
+ getDetail: (obj) => { return {name: 'profile.full.overview', params: {username: obj.preferred_username, domain: obj.domain}}},
getAdminDetail: (obj) => { return {name: 'manage.moderation.accounts.detail', params: {id: `${obj.preferred_username}@${obj.domain}`}}}
},
moderatedFields: [
@@ -194,6 +195,33 @@ export default {
},
]
},
+ channel: {
+ label: this.$pgettext('*/*/*', 'Channel'),
+ icon: 'stream',
+ urls: {
+ getDetail: (obj) => { return {name: 'channels.detail', params: {id: obj.uuid}}},
+ getAdminDetail: (obj) => { return {name: 'manage.channels.detail', params: {id: obj.uuid}}}
+ },
+ moderatedFields: [
+ {
+ id: 'name',
+ label: this.$pgettext('*/*/*/Noun', 'Name'),
+ getValue: (obj) => { return obj.name }
+ },
+ {
+ id: 'creation_date',
+ label: this.$pgettext('Content/*/*/Noun', 'Creation date'),
+ getValue: (obj) => { return obj.creation_date }
+ },
+ {
+ id: 'tags',
+ type: 'tags',
+ label: this.$pgettext('*/*/*/Noun', 'Tags'),
+ getValue: (obj) => { return obj.tags },
+ getValueRepr: getTagsValueRepr
+ },
+ ]
+ },
}
},
diff --git a/front/src/router/index.js b/front/src/router/index.js
index cc5e166db..4581dd0d7 100644
--- a/front/src/router/index.js
+++ b/front/src/router/index.js
@@ -298,6 +298,28 @@ export default new Router({
},
{
path: "channels",
+ name: "manage.channels",
+ component: () =>
+ import(
+ /* webpackChunkName: "admin" */ "@/views/admin/ChannelsList"
+ ),
+ props: route => {
+ return {
+ defaultQuery: route.query.q
+ }
+ }
+ },
+ {
+ path: "channels/:id",
+ name: "manage.channels.detail",
+ component: () =>
+ import(
+ /* webpackChunkName: "admin" */ "@/views/admin/ChannelDetail"
+ ),
+ props: true
+ },
+ {
+ path: "albums",
name: "manage.library.albums",
component: () =>
import(
diff --git a/front/src/views/admin/ChannelDetail.vue b/front/src/views/admin/ChannelDetail.vue
new file mode 100644
index 000000000..d5de3a7cb
--- /dev/null
+++ b/front/src/views/admin/ChannelDetail.vue
@@ -0,0 +1,369 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name
+ |
+
+ {{ object.artist.name }}
+ |
+
+
+
+
+ Category
+
+ |
+
+ {{ object.artist.content_category }}
+ |
+
+
+
+
+ Account
+
+ |
+
+ {{ object.attributed_to.preferred_username }}
+ |
+
+
+
+
+ Domain
+
+ |
+
+ {{ object.actor.domain }}
+ |
+
+
+
+ Description
+ |
+ |
+
+
+
+ URL
+ |
+
+ {{ object.actor.url }}
+ |
+
+
+
+ RSS Feed
+ |
+
+ {{ object.rss_url }}
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+ First seen
+ |
+
+
+ |
+
+
+
+ Listenings
+ |
+
+ {{ stats.listenings }}
+ |
+
+
+
+ Favorited tracks
+ |
+
+ {{ stats.track_favorites }}
+ |
+
+
+
+ Playlists
+ |
+
+ {{ stats.playlists }}
+ |
+
+
+
+
+ Linked reports
+
+ |
+
+ {{ stats.reports }}
+ |
+
+
+
+
+ Edits
+
+ |
+
+ {{ stats.mutations }}
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cached size
+ |
+
+ {{ stats.media_downloaded_size | humanSize }}
+ |
+
+
+
+ Total size
+ |
+
+ {{ stats.media_total_size | humanSize }}
+ |
+
+
+
+
+ Uploads
+
+ |
+
+ {{ stats.uploads }}
+ |
+
+
+
+
+ Albums
+
+ |
+
+ {{ object.artist.albums_count }}
+ |
+
+
+
+
+ Tracks
+
+ |
+
+ {{ object.artist.tracks_count }}
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/front/src/views/admin/ChannelsList.vue b/front/src/views/admin/ChannelsList.vue
new file mode 100644
index 000000000..74cfb56cc
--- /dev/null
+++ b/front/src/views/admin/ChannelsList.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/front/src/views/admin/library/ArtistDetail.vue b/front/src/views/admin/library/ArtistDetail.vue
index 5544445bb..f3db10de2 100644
--- a/front/src/views/admin/library/ArtistDetail.vue
+++ b/front/src/views/admin/library/ArtistDetail.vue
@@ -108,6 +108,16 @@
{{ object.name }}
|
+
+
+
+ Category
+
+ |
+
+ {{ object.content_category }}
+ |
+
@@ -265,7 +275,7 @@
|
- {{ object.albums.length }}
+ {{ object.albums_count }}
|
@@ -275,7 +285,7 @@
- {{ object.tracks.length }}
+ {{ object.tracks_count }}
|
@@ -321,8 +331,12 @@ export default {
this.isLoading = true
let url = `manage/library/artists/${this.id}/`
axios.get(url).then(response => {
- self.object = response.data
- self.isLoading = false
+ if (response.data.channel) {
+ self.$router.push({name: "manage.channels.detail", params: {id: response.data.channel}})
+ } else {
+ self.object = response.data
+ self.isLoading = false
+ }
})
},
fetchStats() {
diff --git a/front/src/views/admin/library/Base.vue b/front/src/views/admin/library/Base.vue
index 8b99b273b..311fe9e77 100644
--- a/front/src/views/admin/library/Base.vue
+++ b/front/src/views/admin/library/Base.vue
@@ -4,6 +4,9 @@
Edits
+ Channels
Artists
diff --git a/front/src/views/admin/moderation/AccountsDetail.vue b/front/src/views/admin/moderation/AccountsDetail.vue
index e8f65dca8..5dbacb18e 100644
--- a/front/src/views/admin/moderation/AccountsDetail.vue
+++ b/front/src/views/admin/moderation/AccountsDetail.vue
@@ -343,7 +343,16 @@
{{ stats.media_total_size | humanSize }}
-
+
+
+
+ Channels
+
+ |
+
+ {{ stats.channels }}
+ |
+
diff --git a/front/src/views/admin/moderation/DomainsDetail.vue b/front/src/views/admin/moderation/DomainsDetail.vue
index 65434f2ec..651a4063e 100644
--- a/front/src/views/admin/moderation/DomainsDetail.vue
+++ b/front/src/views/admin/moderation/DomainsDetail.vue
@@ -266,6 +266,16 @@
{{ stats.media_total_size | humanSize }}
|
+
+
+
+ Channels
+
+ |
+
+ {{ stats.channels }}
+ |
+
diff --git a/front/src/views/channels/DetailBase.vue b/front/src/views/channels/DetailBase.vue
index 0fa345a2d..4e5dabc23 100644
--- a/front/src/views/channels/DetailBase.vue
+++ b/front/src/views/channels/DetailBase.vue
@@ -84,7 +84,7 @@
{{ obj.label }}
@@ -112,7 +112,7 @@
-
+
Open in moderation interface
|