pt import: Fix progress bar to span the whole import

This commit is contained in:
Damien Zammit 2021-01-09 16:09:25 +11:00
parent ea8b855b4a
commit 5d0de7e037
3 changed files with 12 additions and 9 deletions

View File

@ -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 ();
}

View File

@ -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;

View File

@ -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<struct ptflookup> ptfregpair;
vector<PTFFormat::wav_t>::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;