From 87d660a32288008c468285c66a94be8469405056 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Fri, 15 May 2020 09:34:36 +0300
Subject: [PATCH] Optional data save in file streams

---
 .../streams/include/ftl/streams/filestream.hpp      |  1 +
 components/streams/src/filestream.cpp               | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/components/streams/include/ftl/streams/filestream.hpp b/components/streams/include/ftl/streams/filestream.hpp
index 92d0a8afe..d1fea1d9f 100644
--- a/components/streams/include/ftl/streams/filestream.hpp
+++ b/components/streams/include/ftl/streams/filestream.hpp
@@ -73,6 +73,7 @@ class File : public Stream {
 	int version_;
 	ftl::timer::TimerHandle timer_;
 	bool is_video_;
+	bool save_data_;
 
 	StreamCallback cb_;
 	MUTEX mutex_;
diff --git a/components/streams/src/filestream.cpp b/components/streams/src/filestream.cpp
index 2afe275ba..ebfbdc6b0 100644
--- a/components/streams/src/filestream.cpp
+++ b/components/streams/src/filestream.cpp
@@ -14,18 +14,29 @@ File::File(nlohmann::json &config) : Stream(config), ostream_(nullptr), istream_
 	mode_ = Mode::Read;
 	jobs_ = 0;
 	checked_ = false;
+	save_data_ = value("save_data", false);
+
+	on("save_data", [this](const ftl::config::Event &e) {
+		save_data_ = value("save_data", false);
+	});
 }
 
 File::File(nlohmann::json &config, std::ifstream *is) : Stream(config), ostream_(nullptr), istream_(is), active_(false) {
 	mode_ = Mode::Read;
 	jobs_ = 0;
 	checked_ = false;
+	save_data_ = false;
 }
 
 File::File(nlohmann::json &config, std::ofstream *os) : Stream(config), ostream_(os), istream_(nullptr), active_(false) {
 	mode_ = Mode::Write;
 	jobs_ = 0;
 	checked_ = false;
+	save_data_ = value("save_data", false);
+
+	on("save_data", [this](const ftl::config::Event &e) {
+		save_data_ = value("save_data", false);
+	});
 }
 
 File::~File() {
@@ -102,7 +113,7 @@ bool File::post(const ftl::codecs::StreamPacket &s, const ftl::codecs::Packet &p
 
 	// Discard all data channel packets for now
 	// TODO: Allow saving of data channels once formats have solidified.
-	if (static_cast<int>(s.channel) >= static_cast<int>(ftl::codecs::Channel::Data)) return true;
+	if (!save_data_ && static_cast<int>(s.channel) >= static_cast<int>(ftl::codecs::Channel::Data)) return true;
 
 	ftl::codecs::StreamPacket s2 = s;
 	// Adjust timestamp relative to start of file.
-- 
GitLab