From aabcc3c524f43782aee55a8c3c14c6fe7c6ada44 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <cda@rootkey.co.uk>
Date: Thu, 1 Oct 2020 11:22:36 +0100
Subject: [PATCH] Resolve 1228 multi-disc albums

---
 changes/changelog.d/1228.bugfix              |  1 +
 front/src/components/library/AlbumBase.vue   | 20 +++++++++++---------
 front/src/components/library/AlbumDetail.vue |  4 ++--
 3 files changed, 14 insertions(+), 11 deletions(-)
 create mode 100644 changes/changelog.d/1228.bugfix

diff --git a/changes/changelog.d/1228.bugfix b/changes/changelog.d/1228.bugfix
new file mode 100644
index 0000000000..226c850571
--- /dev/null
+++ b/changes/changelog.d/1228.bugfix
@@ -0,0 +1 @@
+Fixed duplication of discs for multi-disc albums in album views (#1228)
\ No newline at end of file
diff --git a/front/src/components/library/AlbumBase.vue b/front/src/components/library/AlbumBase.vue
index 8bdb2fc342..8ae555f6c8 100644
--- a/front/src/components/library/AlbumBase.vue
+++ b/front/src/components/library/AlbumBase.vue
@@ -134,15 +134,17 @@ import TagsList from "@/components/tags/List"
 import ArtistLabel from '@/components/audio/ArtistLabel'
 import AlbumDropdown from './AlbumDropdown'
 
-function groupByDisc(acc, track) {
-  var dn = track.disc_number - 1
-  if (dn < 0) dn = 0
-  if (acc[dn] == undefined) {
-    acc.push([track])
-  } else {
-    acc[dn].push(track)
+function groupByDisc(initial) {
+  function inner(acc, track) {
+    var dn = track.disc_number - initial
+    if (acc[dn] == undefined) {
+      acc.push([track])
+    } else {
+      acc[dn].push(track)
+    }
+    return acc
   }
-  return acc
+  return inner
 }
 
 export default {
@@ -180,7 +182,7 @@ export default {
       tracksResponse = await tracksResponse
       this.object = albumResponse.data
       this.object.tracks = tracksResponse.data.results
-      this.discs = this.object.tracks.reduce(groupByDisc, [])
+      this.discs = this.object.tracks.reduce(groupByDisc(this.object.tracks[0].disc_number), [])
       this.isLoading = false
     },
     remove () {
diff --git a/front/src/components/library/AlbumDetail.vue b/front/src/components/library/AlbumDetail.vue
index bc670ce6ba..b9d4821e60 100644
--- a/front/src/components/library/AlbumDetail.vue
+++ b/front/src/components/library/AlbumDetail.vue
@@ -7,12 +7,12 @@
     <channel-entries v-if="artist.channel && isSerie" :limit="50" :filters="{channel: artist.channel.uuid, ordering: '-creation_date'}">
     </channel-entries>
     <template v-else-if="discs && discs.length > 1">
-      <div v-for="(tracks, discNumber) in discs" :key="discNumber">
+      <div v-for="tracks in discs" :key="tracks.disc_number">
         <div class="ui hidden divider"></div>
         <play-button class="right floated mini inverted vibrant" :tracks="tracks"></play-button>
         <translate
           tag="h3"
-          :translate-params="{number: discNumber + 1}"
+          :translate-params="{number: tracks[0].disc_number}"
           translate-context="Content/Album/"
         >Volume %{ number }</translate>
         <album-entries :tracks="tracks"></album-entries>
-- 
GitLab