From 5caf4eccfb78e622db43e4a3b83a700280d2d90f Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Fri, 15 Dec 2017 21:45:50 +0100
Subject: [PATCH] Fixed #45: search template when querying import sources

---
 CHANGELOG                                      |  2 ++
 .../components/library/import/ArtistImport.vue |  5 +++++
 .../components/library/import/ImportMixin.vue  | 15 ++++++++++++++-
 .../library/import/ReleaseImport.vue           |  1 +
 .../components/library/import/TrackImport.vue  | 18 ++++++++++++------
 5 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 6faa5d26..87c58420 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,8 @@ Changelog
 0.2.5 (unreleased)
 ------------------
 
+- Import: can now specify search template when querying import sources (#45)
+
 
 0.2.4 (2017-12-14)
 ------------------
diff --git a/front/src/components/library/import/ArtistImport.vue b/front/src/components/library/import/ArtistImport.vue
index 4f049f52..870a886e 100644
--- a/front/src/components/library/import/ArtistImport.vue
+++ b/front/src/components/library/import/ArtistImport.vue
@@ -12,6 +12,10 @@
             <label>{{ t }}</label>
           </div>
         </div>
+        <div class="field">
+          <label>Query template</label>
+          <input v-model="customQueryTemplate" />
+        </div>
       </div>
     </form>
     <template
@@ -22,6 +26,7 @@
         :backends="backends"
         :defaultEnabled="false"
         :default-backend-id="defaultBackendId"
+        :query-template="customQueryTemplate"
         @import-data-changed="recordReleaseData"
         @enabled="recordReleaseEnabled"
       ></release-import>
diff --git a/front/src/components/library/import/ImportMixin.vue b/front/src/components/library/import/ImportMixin.vue
index f3fc6fca..475241f3 100644
--- a/front/src/components/library/import/ImportMixin.vue
+++ b/front/src/components/library/import/ImportMixin.vue
@@ -13,10 +13,12 @@ export default {
     metadata: {type: Object, required: true},
     defaultEnabled: {type: Boolean, default: true},
     backends: {type: Array},
-    defaultBackendId: {type: String}
+    defaultBackendId: {type: String},
+    queryTemplate: {type: String, default: '$artist $title'}
   },
   data () {
     return {
+      customQueryTemplate: this.queryTemplate,
       currentBackendId: this.defaultBackendId,
       isImporting: false,
       enabled: this.defaultEnabled
@@ -56,6 +58,9 @@ export default {
       return this.backends.filter(b => {
         return b.id === self.currentBackendId
       })[0]
+    },
+    realQueryTemplate () {
+
     }
   },
   watch: {
@@ -70,6 +75,14 @@ export default {
     },
     enabled (newValue) {
       this.$emit('enabled', this.importData, newValue)
+    },
+    queryTemplate (newValue, oldValue) {
+      // we inherit from the prop template unless the component changed
+      // the value
+      if (oldValue === this.customQueryTemplate) {
+        // no changed from prop, we keep the sync
+        this.customQueryTemplate = newValue
+      }
     }
   }
 }
diff --git a/front/src/components/library/import/ReleaseImport.vue b/front/src/components/library/import/ReleaseImport.vue
index 9f8c1d34..51d5a2fe 100644
--- a/front/src/components/library/import/ReleaseImport.vue
+++ b/front/src/components/library/import/ReleaseImport.vue
@@ -20,6 +20,7 @@
         :release-metadata="metadata"
         :backends="backends"
         :default-backend-id="defaultBackendId"
+        :query-template="customQueryTemplate"
         @import-data-changed="recordTrackData"
         @enabled="recordTrackEnabled"
       ></track-import>
diff --git a/front/src/components/library/import/TrackImport.vue b/front/src/components/library/import/TrackImport.vue
index 3081091c..2275bcf3 100644
--- a/front/src/components/library/import/TrackImport.vue
+++ b/front/src/components/library/import/TrackImport.vue
@@ -92,13 +92,7 @@ export default Vue.extend({
     releaseMetadata: {type: Object, required: true}
   },
   data () {
-    let queryParts = [
-      this.releaseMetadata['artist-credit'][0]['artist']['name'],
-      this.releaseMetadata['title'],
-      this.metadata['recording']['title']
-    ]
     return {
-      query: queryParts.join(' '),
       isLoading: false,
       results: [],
       currentResultIndex: 0,
@@ -151,6 +145,18 @@ export default Vue.extend({
         mbid: this.metadata.recording.id,
         source: this.importedUrl
       }
+    },
+    query () {
+      let queryMapping = [
+        ['artist', this.releaseMetadata['artist-credit'][0]['artist']['name']],
+        ['album', this.releaseMetadata['title']],
+        ['title', this.metadata['recording']['title']]
+      ]
+      let query = this.customQueryTemplate
+      queryMapping.forEach(e => {
+        query = query.split('$' + e[0]).join(e[1])
+      })
+      return query
     }
   },
   watch: {
-- 
GitLab