+
+ return result;
+}
+
+void Session::load_init_file(const string &file_name, const string &format)
+{
+ shared_ptr<InputFormat> input_format;
+ map<string, Glib::VariantBase> input_opts;
+
+ if (!format.empty()) {
+ const map<string, shared_ptr<InputFormat> > formats =
+ device_manager_.context()->input_formats();
+ auto user_opts = pv::util::split_string(format, ":");
+ string user_name = user_opts.front();
+ user_opts.erase(user_opts.begin());
+ const auto iter = find_if(formats.begin(), formats.end(),
+ [&](const pair<string, shared_ptr<InputFormat> > f) {
+ return f.first == user_name; });
+ if (iter == formats.end()) {
+ MainWindow::show_session_error(tr("Error"),
+ tr("Unexpected input format: %s").arg(QString::fromStdString(format)));
+ return;
+ }
+ input_format = (*iter).second;
+ input_opts = input_format_options(user_opts,
+ input_format->options());
+ }
+
+ load_file(QString::fromStdString(file_name), input_format, input_opts);
+}
+
+void Session::load_file(QString file_name,
+ shared_ptr<sigrok::InputFormat> format,
+ const map<string, Glib::VariantBase> &options)
+{
+ 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<devices::Device>(
+ new devices::InputFile(
+ device_manager_.context(),
+ file_name.toStdString(),
+ format, options)));
+ else
+ set_device(shared_ptr<devices::Device>(
+ new devices::SessionFile(
+ device_manager_.context(),
+ file_name.toStdString())));
+ } catch (Error& e) {
+ MainWindow::show_session_error(tr("Failed to load ") + file_name, e.what());
+ set_default_device();
+ main_bar_->update_device_list();
+ return;
+ }
+
+ main_bar_->update_device_list();
+
+ start_capture([&, errorMessage](QString infoMessage) {
+ MainWindow::show_session_error(errorMessage, infoMessage); });
+
+ set_name(QFileInfo(file_name).fileName());