From d410be75dcd1bb8322353eb55e7a62e139074caf Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Thu, 15 Apr 2021 18:19:17 +0200 Subject: [PATCH] Store source track index in track --- .../migrations/2020-09-27-201047_initial_schema/up.sql | 1 + database/src/medium.rs | 7 +++++++ database/src/schema.rs | 1 + musicus/src/import/import_screen.rs | 1 - musicus/src/import/medium_editor.rs | 1 + musicus/src/import/medium_preview.rs | 8 +++++--- 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/database/migrations/2020-09-27-201047_initial_schema/up.sql b/database/migrations/2020-09-27-201047_initial_schema/up.sql index 112e467..cc81498 100644 --- a/database/migrations/2020-09-27-201047_initial_schema/up.sql +++ b/database/migrations/2020-09-27-201047_initial_schema/up.sql @@ -66,6 +66,7 @@ CREATE TABLE "tracks" ( "index" INTEGER NOT NULL, "recording" TEXT NOT NULL REFERENCES "recordings"("id"), "work_parts" TEXT NOT NULL, + "source_index" INTEGER NOT NULL, "path" TEXT NOT NULL ); diff --git a/database/src/medium.rs b/database/src/medium.rs index c995356..534f6b7 100644 --- a/database/src/medium.rs +++ b/database/src/medium.rs @@ -33,6 +33,10 @@ pub struct Track { /// work parts of the work that is associated with the recording. pub work_parts: Vec, + /// The index of the track within its source. This is used to associate + /// the metadata with the audio data from the source when importing. + pub source_index: usize, + /// The path to the audio file containing this track. This will not be /// included when communicating with the server. #[serde(skip)] @@ -57,6 +61,7 @@ struct TrackRow { pub index: i32, pub recording: String, pub work_parts: String, + pub source_index: i32, pub path: String, } @@ -105,6 +110,7 @@ impl Database { index: index as i32, recording: track.recording.id.clone(), work_parts, + source_index: track.source_index as i32, path: track.path.clone(), }; @@ -274,6 +280,7 @@ impl Database { let track = Track { recording, work_parts: part_indices, + source_index: row.source_index as usize, path: row.path, }; diff --git a/database/src/schema.rs b/database/src/schema.rs index bc046c4..ddd1357 100644 --- a/database/src/schema.rs +++ b/database/src/schema.rs @@ -61,6 +61,7 @@ table! { index -> Integer, recording -> Text, work_parts -> Text, + source_index -> Integer, path -> Text, } } diff --git a/musicus/src/import/import_screen.rs b/musicus/src/import/import_screen.rs index efeb638..9c6ebc0 100644 --- a/musicus/src/import/import_screen.rs +++ b/musicus/src/import/import_screen.rs @@ -7,7 +7,6 @@ use glib::clone; use gtk::prelude::*; use gtk_macros::get_widget; use libadwaita::prelude::*; -use log::debug; use musicus_backend::Error; use musicus_backend::db::Medium; use musicus_backend::import::ImportSession; diff --git a/musicus/src/import/medium_editor.rs b/musicus/src/import/medium_editor.rs index 419d9ba..ce37254 100644 --- a/musicus/src/import/medium_editor.rs +++ b/musicus/src/import/medium_editor.rs @@ -142,6 +142,7 @@ impl MediumEditor { let track = Track { recording: track_set_data.recording.clone(), work_parts: track_data.work_parts.clone(), + source_index: track_data.track_source, path: String::new(), }; diff --git a/musicus/src/import/medium_preview.rs b/musicus/src/import/medium_preview.rs index 74c5b42..829ab69 100644 --- a/musicus/src/import/medium_preview.rs +++ b/musicus/src/import/medium_preview.rs @@ -64,6 +64,8 @@ impl Screen<(Arc, Medium), ()> for MediumPreview { let mut last_recording_id = ""; let mut last_list = None::; + let import_tracks = this.session.tracks(); + for track in &this.medium.tracks { if track.recording.id != last_recording_id { last_recording_id = &track.recording.id; @@ -109,7 +111,7 @@ impl Screen<(Arc, Medium), ()> for MediumPreview { let row = libadwaita::ActionRowBuilder::new() .activatable(false) .title(&title) - .subtitle(&track.path) + .subtitle(&import_tracks[track.source_index].name) .margin_start(12) .build(); @@ -170,12 +172,12 @@ impl MediumPreview { let mut tracks = Vec::new(); let import_tracks = self.session.tracks(); - for (index, track) in self.medium.tracks.iter().enumerate() { + for track in &self.medium.tracks { let mut track = track.clone(); // Set the track path to the new audio file location. - let import_track = &import_tracks[index]; + let import_track = &import_tracks[track.source_index]; let track_path = directory.join(import_track.path.file_name().unwrap()); track.path = track_path.to_str().unwrap().to_owned();