#include "storesession.hpp"
+#include <QSettings>
+
#include <pv/data/analog.hpp>
#include <pv/data/analogsegment.hpp>
#include <pv/data/logic.hpp>
#include <pv/data/signalbase.hpp>
#include <pv/devicemanager.hpp>
#include <pv/devices/device.hpp>
+#include <pv/globalsettings.hpp>
#include <pv/session.hpp>
#include <libsigrokcxx/libsigrokcxx.hpp>
vector< shared_ptr<data::SignalBase> > achannel_list;
vector< shared_ptr<data::AnalogSegment> > asegment_list;
- for (shared_ptr<data::SignalBase> signal : sigs) {
+ for (const shared_ptr<data::SignalBase>& signal : sigs) {
if (!signal->enabled())
continue;
uint64_t end_sample;
if (sample_range_.first == sample_range_.second) {
+ // No sample range specified, save everything we have
start_sample_ = 0;
sample_count_ = any_segment->get_sample_count();
} else {
}
}
+ // Make sure the sample range is valid
+ if (start_sample_ > any_segment->get_sample_count()) {
+ error_ = tr("Can't save range without sample data.");
+ return false;
+ }
+
// Begin storing
try {
const auto context = session_.device_manager().context();
{{ConfigKey::SAMPLERATE, Glib::Variant<guint64>::create(
any_segment->samplerate())}});
output_->receive(meta);
- } catch (Error error) {
+ } catch (Error& error) {
error_ = tr("Error while saving: ") + error.what();
return false;
}
thread_ = std::thread(&StoreSession::store_proc, this,
achannel_list, asegment_list, lsegment);
+
+ // Save session setup if we're saving to srzip and the user wants it
+ GlobalSettings settings;
+ bool save_with_setup = settings.value(GlobalSettings::Key_General_SaveWithSetup).toBool();
+
+ if ((output_format_->name() == "srzip") && (save_with_setup)) {
+ QString setup_file_name = QString::fromStdString(file_name_);
+ setup_file_name.truncate(setup_file_name.lastIndexOf('.'));
+ setup_file_name.append(".pvs");
+
+ QSettings settings_storage(setup_file_name, QSettings::IniFormat);
+ session_.save_setup(settings_storage);
+ }
+
return true;
}
delete[] ldata;
}
- } catch (Error error) {
+ } catch (Error& error) {
error_ = tr("Error while saving: ") + error.what();
break;
}