SatDump 2.0.0-alpha-76a915210
Loading...
Searching...
No Matches
folder_file_iterators.h
1#pragma once
2
3#include "core/exception.h"
4#include "file_iterators.h"
5#include <filesystem>
6#include <fstream>
7
8namespace satdump
9{
10 namespace utils
11 {
12
13 class FolderFileIteratorItem : public FilesIteratorItem
14 {
15 private:
16 const std::string path;
17
18 public:
19 FolderFileIteratorItem(std::string path) : FilesIteratorItem(std::filesystem::path(path).stem().string() + std::filesystem::path(path).extension().string()), path(path) {}
20 FolderFileIteratorItem(std::string path, std::string name) : FilesIteratorItem(name), path(path) {}
21 ~FolderFileIteratorItem() {}
22
23 std::vector<uint8_t> getPayload()
24 {
25 std::vector<uint8_t> v;
26 std::ifstream input_file(path, std::ios::binary);
27 input_file.seekg(0, std::ios::end);
28 const size_t fsize = input_file.tellg();
29 v.resize(fsize);
30 input_file.seekg(0, std::ios::beg);
31 input_file.read((char *)&v[0], fsize);
32 input_file.close();
33 return v;
34 }
35 };
36
37 class FolderFilesIterator : public FilesIterator
38 {
39 private:
40 const std::string folder;
41 std::filesystem::recursive_directory_iterator filesIterator;
42 std::error_code iteratorError;
43
44 public:
45 FolderFilesIterator(std::string folder) : folder(folder) { filesIterator = std::filesystem::recursive_directory_iterator(folder); }
46 ~FolderFilesIterator() {}
47
48 bool getNext(std::shared_ptr<FilesIteratorItem> &v)
49 {
50 bool vv = filesIterator != std::filesystem::recursive_directory_iterator();
51 v.reset();
52
53 if (vv)
54 {
55 std::string path = filesIterator->path().string();
56
57 if (std::filesystem::is_regular_file(path))
58 v = std::make_unique<FolderFileIteratorItem>(path, std::filesystem::path(path).stem().string() + std::filesystem::path(path).extension().string());
59
60 filesIterator.increment(iteratorError);
61 if (iteratorError)
62 throw satdump_exception(iteratorError.message());
63 }
64
65 return vv;
66 }
67
68 void reset() { filesIterator = std::filesystem::recursive_directory_iterator(folder); }
69 };
70 } // namespace utils
71} // namespace satdump
Definition file_iterators.h:21