From 5d0de7e037da99eb5d0141458987c1fb30008756 Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Sat, 9 Jan 2021 16:09:25 +1100 Subject: [PATCH] pt import: Fix progress bar to span the whole import --- gtk2_ardour/editor_pt_import.cc | 2 +- libs/ardour/ardour/session.h | 2 +- libs/ardour/import_pt.cc | 17 ++++++++++------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/gtk2_ardour/editor_pt_import.cc b/gtk2_ardour/editor_pt_import.cc index f5e73db4d5..90bb87bb96 100644 --- a/gtk2_ardour/editor_pt_import.cc +++ b/gtk2_ardour/editor_pt_import.cc @@ -110,8 +110,8 @@ Editor::external_pt_dialog () MessageDialog msg (_("PT import cancelled")); msg.run (); } else { - _session->import_pt_rest (import_ptf); import_pt_status.progress = 1.0; + _session->import_pt_rest (import_ptf); MessageDialog msg (_("PT import complete!")); msg.run (); } diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 9676889846..2f0101ff21 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -1278,7 +1278,7 @@ public: void import_pt_sources (PTFFormat& ptf, ImportStatus& status); void import_pt_rest (PTFFormat& ptf); - bool import_sndfile_as_region (std::string path, SrcQuality quality, samplepos_t& pos, SourceList& sources, ImportStatus& status); + bool import_sndfile_as_region (std::string path, SrcQuality quality, samplepos_t& pos, SourceList& sources, ImportStatus& status, uint32_t current, uint32_t total); struct ptflookup { uint16_t index1; diff --git a/libs/ardour/import_pt.cc b/libs/ardour/import_pt.cc index 0ef5a34a18..b3ac08f2d7 100644 --- a/libs/ardour/import_pt.cc +++ b/libs/ardour/import_pt.cc @@ -68,13 +68,13 @@ struct midipair { }; bool -Session::import_sndfile_as_region (string path, SrcQuality quality, samplepos_t& pos, SourceList& sources, ImportStatus& status) +Session::import_sndfile_as_region (string path, SrcQuality quality, samplepos_t& pos, SourceList& sources, ImportStatus& status, uint32_t current, uint32_t total) { /* Import the source */ status.paths.clear(); status.paths.push_back(path); - status.current = 1; - status.total = 1; + status.current = current; + status.total = total; status.freeze = false; status.quality = quality; status.replace_existing_source = false; @@ -83,16 +83,17 @@ Session::import_sndfile_as_region (string path, SrcQuality quality, samplepos_t& status.cancel = false; import_files(status); + status.progress = 1.0; sources.clear(); /* FIXME: There is no way to tell if cancel button was pressed * or if the file failed to import, just that one of these occurred. * We want status.cancel to reflect the user's choice only */ - if (status.cancel && status.current > 1) { + if (status.cancel && status.current > current) { /* Succeeded to import file, assume user hit cancel */ return false; - } else if (status.cancel && status.current == 1) { + } else if (status.cancel && status.current == current) { /* Failed to import file, assume user did not hit cancel */ status.cancel = false; return false; @@ -187,6 +188,7 @@ Session::import_pt_sources (PTFFormat& ptf, ImportStatus& status) vector ptfregpair; vector::const_iterator w; + uint32_t wth = 0; SourceList just_one_src; @@ -199,20 +201,21 @@ Session::import_pt_sources (PTFFormat& ptf, ImportStatus& status) for (w = ptf.audiofiles ().begin (); w != ptf.audiofiles ().end () && !status.cancel; ++w) { struct ptflookup p; + wth++; ok = false; /* Try audio file */ fullpath = Glib::build_filename (Glib::path_get_dirname (ptf.path ()), "Audio Files"); fullpath = Glib::build_filename (fullpath, w->filename); if (Glib::file_test (fullpath, Glib::FILE_TEST_EXISTS)) { just_one_src.clear(); - ok = import_sndfile_as_region (fullpath, SrcBest, pos, just_one_src, status); + ok = import_sndfile_as_region (fullpath, SrcBest, pos, just_one_src, status, wth, ptf.audiofiles ().size ()); } else { /* Try fade file */ fullpath = Glib::build_filename (Glib::path_get_dirname (ptf.path ()), "Fade Files"); fullpath = Glib::build_filename (fullpath, w->filename); if (Glib::file_test (fullpath, Glib::FILE_TEST_EXISTS)) { just_one_src.clear(); - ok = import_sndfile_as_region (fullpath, SrcBest, pos, just_one_src, status); + ok = import_sndfile_as_region (fullpath, SrcBest, pos, just_one_src, status, wth, ptf.audiofiles ().size ()); } else { onefailed = true;