X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsession.cpp;h=7df73d63d5ba43660eb666ec1a91322046002442;hp=cbf24e235acc274c478c79481bfc5b446c80939f;hb=1325ce422f1b49ab1f693125105b8c373c2965e5;hpb=eaa02ef436fb9d8217a94076e1258da47d3cd8e0 diff --git a/pv/session.cpp b/pv/session.cpp index cbf24e23..7df73d63 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -28,6 +28,7 @@ #include #include "devicemanager.hpp" +#include "mainwindow.hpp" #include "session.hpp" #include "data/analog.hpp" @@ -206,7 +207,7 @@ void Session::save_settings(QSettings &settings) const } shared_ptr sessionfile_device = - dynamic_pointer_cast< devices::SessionFile >(device_); + dynamic_pointer_cast(device_); if (sessionfile_device) { settings.setValue("device_type", "sessionfile"); @@ -216,6 +217,16 @@ void Session::save_settings(QSettings &settings) const settings.endGroup(); } + shared_ptr inputfile_device = + dynamic_pointer_cast(device_); + + if (inputfile_device) { + settings.setValue("device_type", "inputfile"); + settings.beginGroup("device"); + inputfile_device->save_meta_to_settings(settings); + settings.endGroup(); + } + // Save channels and decoders for (shared_ptr base : signalbases_) { #ifdef ENABLE_DECODE @@ -289,20 +300,34 @@ void Session::restore_settings(QSettings &settings) settings.endGroup(); } - if (device_type == "sessionfile") { - settings.beginGroup("device"); - QString filename = settings.value("filename").toString(); - settings.endGroup(); + if ((device_type == "sessionfile") || (device_type == "inputfile")) { + if (device_type == "sessionfile") { + settings.beginGroup("device"); + QString filename = settings.value("filename").toString(); + settings.endGroup(); - if (QFileInfo(filename).isReadable()) { - device = make_shared(device_manager_.context(), - filename.toStdString()); + if (QFileInfo(filename).isReadable()) { + device = make_shared(device_manager_.context(), + filename.toStdString()); + } + } + + if (device_type == "inputfile") { + settings.beginGroup("device"); + device = make_shared(device_manager_.context(), + settings); + settings.endGroup(); + } + + if (device) { set_device(device); start_capture([](QString infoMessage) { - qDebug().noquote() << "Session error:" << infoMessage; }); + // TODO Emulate noquote() + qDebug() << "Session error:" << infoMessage; }); - set_name(QFileInfo(filename).fileName()); + set_name(QString::fromStdString( + dynamic_pointer_cast(device)->display_name(device_manager_))); } } @@ -352,7 +377,7 @@ void Session::select_device(shared_ptr device) else set_default_device(); } catch (const QString &e) { - main_bar_->session_error(tr("Failed to select device"), e); + MainWindow::show_session_error(tr("Failed to select device"), e); } } @@ -400,7 +425,7 @@ void Session::set_device(shared_ptr device) device_->open(); } catch (const QString &e) { device_.reset(); - main_bar_->session_error(tr("Failed to open device"), e); + MainWindow::show_session_error(tr("Failed to open device"), e); } if (device_) { @@ -490,7 +515,7 @@ void Session::load_init_file(const string &file_name, const string &format) [&](const pair > f) { return f.first == user_name; }); if (iter == formats.end()) { - main_bar_->session_error(tr("Error"), + MainWindow::show_session_error(tr("Error"), tr("Unexpected input format: %s").arg(QString::fromStdString(format))); return; } @@ -509,6 +534,10 @@ void Session::load_file(QString file_name, const QString errorMessage( QString("Failed to load file %1").arg(file_name)); + // In the absence of a caller's format spec, try to auto detect. + // Assume "sigrok session file" upon lookup miss. + if (!format) + format = device_manager_.context()->input_format_match(file_name.toStdString()); try { if (format) set_device(shared_ptr( @@ -522,7 +551,7 @@ void Session::load_file(QString file_name, device_manager_.context(), file_name.toStdString()))); } catch (Error& e) { - main_bar_->session_error(tr("Failed to load ") + file_name, e.what()); + MainWindow::show_session_error(tr("Failed to load ") + file_name, e.what()); set_default_device(); main_bar_->update_device_list(); return; @@ -531,7 +560,7 @@ void Session::load_file(QString file_name, main_bar_->update_device_list(); start_capture([&, errorMessage](QString infoMessage) { - main_bar_->session_error(errorMessage, infoMessage); }); + MainWindow::show_session_error(errorMessage, infoMessage); }); set_name(QFileInfo(file_name).fileName()); } @@ -1042,15 +1071,10 @@ void Session::feed_in_meta(shared_ptr meta) for (auto entry : meta->config()) { switch (entry.first->id()) { case SR_CONF_SAMPLERATE: - // We can't rely on the header to always contain the sample rate, - // so in case it's supplied via a meta packet, we use it. - if (!cur_samplerate_) - cur_samplerate_ = g_variant_get_uint64(entry.second.gobj()); - - /// @todo handle samplerate changes + cur_samplerate_ = g_variant_get_uint64(entry.second.gobj()); break; default: - // Unknown metadata is not an error. + qDebug() << "Received meta data key" << entry.first->id() << ", ignoring."; break; } }