diff --git a/front/src/components/library/AlbumBase.vue b/front/src/components/library/AlbumBase.vue index e42f3e826be6cec0707577b85203af0d2e6c71c6..03c6aab76760fce1563d1ba45bf64fc642e6167b 100644 --- a/front/src/components/library/AlbumBase.vue +++ b/front/src/components/library/AlbumBase.vue @@ -54,7 +54,11 @@ <i class="code icon"></i> <translate translate-context="Content/*/Button.Label/Verb">Embed</translate> </div> - <a :href="wikipediaUrl" target="_blank" rel="noreferrer noopener" class="basic item"> + <a v-if="wikipediaUrl" :href="wikipediaUrl" target="_blank" rel="noreferrer noopener" class="basic item"> + <i class="wikipedia w icon"></i> + <translate translate-context="Content/*/Button.Label/Verb">View on Wikipedia</translate> + </a> + <a v-else :href="wikipediaSearchUrl" target="_blank" rel="noreferrer noopener" class="basic item"> <i class="wikipedia w icon"></i> <translate translate-context="Content/*/Button.Label/Verb">Search on Wikipedia</translate> </a> @@ -62,11 +66,15 @@ <i class="external icon"></i> <translate translate-context="Content/*/*/Clickable, Verb">View on MusicBrainz</translate> </a> - <a :href="discogsUrl" target="_blank" rel="noreferrer noopener" class="basic item"> - <i class="external icon"></i> - <translate translate-context="Content/*/Button.Label/Verb">Search on Discogs</translate> + <a v-if="discogsUrl" :href="discogsUrl" target="_blank" rel="noreferrer noopener" class="basic item"> + <i class="external icon"></i> + <translate translate-context="Content/*/Button.Label/Verb">View on Discogs</translate> </a> - <router-link + <a v-else :href="discogsSearchUrl" target="_blank" rel="noreferrer noopener" class="basic item"> + <i class="external icon"></i> + <translate translate-context="Content/*/Button.Label/Verb">Search on Discogs</translate> + </a> + <router-link v-if="object.is_local" :to="{name: 'library.albums.edit', params: {id: object.id }}" class="basic item"> @@ -145,7 +153,9 @@ export default { object: null, discs: [], libraries: [], - showEmbedModal: false + showEmbedModal: false, + wikipediaUrl: null, + discogsUrl: null } }, created() { @@ -161,10 +171,57 @@ export default { self.object = backend.Album.clean(response.data) self.discs = self.object.tracks.reduce(groupByDisc, []) self.isLoading = false + self.fetchUrls() }) - } + }, + fetchUrls () { + let self = this + this.discogsUrl = null + if (this.object.mbid) { + console.log('Getting URLS') + axios.get('https://musicbrainz.org/ws/2/release/' + this.object.mbid + '?inc=url-rels&fmt=json').then(response => { + response.data.relations.forEach(f => { + if (f.type == 'discogs') { + console.log('Found Discogs Link', f.url.resource) + return this.discogsUrl = f.url.resource + } if (f.type == 'wikidata') { + let foundUrl = f.url.resource + console.log('Found Wikidata Link') + console.log('Pasing', foundUrl, 'to getWiki') + this.getWiki(foundUrl) + } + }).catch(error => { + console.log("Couldn't reach Musicbrainz", error) + }) + }) + } + }, + getWiki (url) { + let self = this + this.wikipediaUrl = null + let split = url.split('/') + let id = split[split.length - 1]; + let getUrl = 'https://www.wikidata.org/w/api.php?action=wbgetentities&ids=' + id + '&props=sitelinks&sitefilter=' + this.shortLocale + 'wiki&format=json&origin=*' + console.log('Fetching Wikipedia Link for', id) + $.get(getUrl).done(function (data) { + $.each(data.entities, function (index, item) { + let wikilang = self.shortLocale + 'wiki' + if (item.sitelinks[wikilang]) { + console.log('Wikipedia language is', wikilang) + let wikiUrl = 'https://' + self.shortLocale + '.wikipedia.org/wiki/' + encodeURI(item.sitelinks[wikilang].title) + console.log('Wikipedia page found at', wikiUrl) + return self.wikipediaUrl = wikiUrl} + else { + console.log('No wiki entries for this language') + } + }) + }) + }, }, computed: { + shortLocale() { + return this.$store.state.ui.momentLocale.split('-')[0] + }, labels() { return { title: this.$pgettext('*/*/*', 'Album') @@ -175,9 +232,9 @@ export default { return l.privacy_level === 'everyone' }) }, - wikipediaUrl() { + wikipediaSearchUrl() { return ( - "https://en.wikipedia.org/w/index.php?search=" + + "https://" + this.shortLocale + ".wikipedia.org/w/index.php?search=" + encodeURI(this.object.title + " " + this.object.artist.name) ) }, @@ -186,7 +243,7 @@ export default { return "https://musicbrainz.org/release/" + this.object.mbid } }, - discogsUrl() { + discogsSearchUrl() { return ( "https://discogs.com/search/?type=release&title=" + encodeURI(this.object.title) + "&artist=" + diff --git a/front/src/components/library/ArtistBase.vue b/front/src/components/library/ArtistBase.vue index 7ab75cc85120cbe6fcb416aca9d03686310551d8..c2e9874db022b1b9c2db7c39b6f72ccc76e07504 100644 --- a/front/src/components/library/ArtistBase.vue +++ b/front/src/components/library/ArtistBase.vue @@ -176,7 +176,7 @@ export default { }, async created() { await this.fetchData(), - await this.fetchUrls() + this.fetchUrls() }, methods: { async fetchData() { @@ -209,7 +209,7 @@ export default { self.isLoadingAlbums = false self.isLoading = false }, - async fetchUrls () { + fetchUrls () { let self = this this.discogsUrl = null if (this.object.mbid) { @@ -225,6 +225,8 @@ export default { console.log('Pasing', foundUrl, 'to getWiki') this.getWiki(foundUrl) } + }).catch(error => { + console.log("Couldn't reach Musicbrainz", error) }) }) } @@ -245,7 +247,7 @@ export default { console.log('Wikipedia page found at', wikiUrl) return self.wikipediaUrl = wikiUrl} else { - console.log('No wiki entries for this language :(') + console.log('No wiki entries for this language') } }) }) diff --git a/front/src/components/library/TrackBase.vue b/front/src/components/library/TrackBase.vue index 82f3aa8a7b4c548b9cc7a38ac43f3f1f0f5684e3..c36588d131a5bf5c29735cdbd23ec040725cdf1a 100644 --- a/front/src/components/library/TrackBase.vue +++ b/front/src/components/library/TrackBase.vue @@ -70,7 +70,11 @@ <i class="code icon"></i> <translate translate-context="Content/*/Button.Label/Verb">Embed</translate> </div> - <a :href="wikipediaUrl" target="_blank" rel="noreferrer noopener" class="basic item"> + <a v-if="wikipediaUrl" :href="wikipediaUrl" target="_blank" rel="noreferrer noopener" class="basic item"> + <i class="wikipedia w icon"></i> + <translate translate-context="Content/*/Button.Label/Verb">Search on Wikipedia</translate> + </a> + <a v-else :href="wikipediaSearchUrl" target="_blank" rel="noreferrer noopener" class="basic item"> <i class="wikipedia w icon"></i> <translate translate-context="Content/*/Button.Label/Verb">Search on Wikipedia</translate> </a> @@ -78,10 +82,14 @@ <i class="external icon"></i> <translate translate-context="Content/*/*/Clickable, Verb">View on MusicBrainz</translate> </a> - <a :href="discogsUrl" target="_blank" rel="noreferrer noopener" class="basic item"> - <i class="external icon"></i> - <translate translate-context="Content/*/Button.Label/Verb">Search on Discogs</translate> - </a> + <a v-if="discogsUrl" :href="discogsUrl" target="_blank" rel="noreferrer noopener" class="basic item"> + <i class="external icon"></i> + <translate translate-context="Content/*/Button.Label/Verb">Search on Discogs</translate> + </a> + <a v-else :href="discogsSearchUrl" target="_blank" rel="noreferrer noopener" class="basic item"> + <i class="external icon"></i> + <translate translate-context="Content/*/Button.Label/Verb">Search on Discogs</translate> + </a> <router-link v-if="track.is_local" :to="{name: 'library.tracks.edit', params: {id: track.id }}" @@ -154,14 +162,16 @@ export default { isLoadingTrack: true, track: null, showEmbedModal: false, - libraries: [] + libraries: [], + wikipediaUrl: null, + discogsUrl: null } }, - created() { - this.fetchData() + async created() { + await this.fetchData() }, methods: { - fetchData() { + async fetchData() { var self = this this.isLoadingTrack = true let url = FETCH_URL + this.id + "/" @@ -169,10 +179,59 @@ export default { axios.get(url, {params: {refresh: 'true'}}).then(response => { self.track = response.data self.isLoadingTrack = false + self.fetchUrls() + }) + }, + fetchUrls () { + let self = this + this.discogsUrl = null + if (this.track.mbid) { + console.log('Getting URLS') + axios.get('https://musicbrainz.org/ws/2/recording/' + this.track.mbid + '?inc=url-rels&fmt=json').then(response => { + response.data.relations.forEach(f => { + if (f.type == 'discogs') { + console.log('Found Discogs Link', f.url.resource) + return this.discogsUrl = f.url.resource + } if (f.type == 'wikidata') { + let foundUrl = f.url.resource + console.log('Found Wikidata Link') + console.log('Pasing', foundUrl, 'to getWiki') + this.getWiki(foundUrl) + } else { + console.log('Nothing found') + } + }).catch(error => { + console.log("Couldn't reach Musicbrainz", error) + }) + }) + } + }, + getWiki (url) { + let self = this + this.wikipediaUrl = null + let split = url.split('/') + let id = split[split.length - 1]; + let getUrl = 'https://www.wikidata.org/w/api.php?action=wbgetentities&ids=' + id + '&props=sitelinks&sitefilter=' + this.shortLocale + 'wiki&format=json&origin=*' + console.log('Fetching Wikipedia Link for', id) + $.get(getUrl).done(function (data) { + $.each(data.entities, function (index, item) { + let wikilang = self.shortLocale + 'wiki' + if (item.sitelinks[wikilang]) { + console.log('Wikipedia language is', wikilang) + let wikiUrl = 'https://' + self.shortLocale + '.wikipedia.org/wiki/' + encodeURI(item.sitelinks[wikilang].title) + console.log('Wikipedia page found at', wikiUrl) + return self.wikipediaUrl = wikiUrl} + else { + console.log('No wiki entries for this language') + } + }) }) }, }, computed: { + shortLocale() { + return this.$store.state.ui.momentLocale.split('-')[0] + }, publicLibraries () { return this.libraries.filter(l => { return l.privacy_level === 'everyone' @@ -188,9 +247,9 @@ export default { title: this.$pgettext('*/*/*/Noun', "Track") } }, - wikipediaUrl() { + wikipediaSearchUrl() { return ( - "https://en.wikipedia.org/w/index.php?search=" + + "https://" + this.shortLocale + ".wikipedia.org/w/index.php?search=" + encodeURI(this.track.title + " " + this.track.artist.name) ) }, @@ -199,12 +258,12 @@ export default { return "https://musicbrainz.org/recording/" + this.track.mbid } }, - discogsUrl() { + discogsSearchUrl() { return ( "https://discogs.com/search/?type=release&title=" + - encodeURI(this.track.album.title) + "&artist=" + - encodeURI(this.track.artist.name) + "&track=" + - encodeURI(this.track.title) + encodeURI(this.track.album.title) + "&artist=" + + encodeURI(this.track.artist.name) + "&track=" + + encodeURI(this.track.title) ) }, downloadUrl() {