v2.0.0
Loading...
Searching...
No Matches
fiff_file_sharer.cpp
Go to the documentation of this file.
1//=============================================================================================================
15
16//=============================================================================================================
17// INCLUDES
18//=============================================================================================================
19
20#include "fiff_file_sharer.h"
21
22//=============================================================================================================
23// QT INCLUDES
24//=============================================================================================================
25
26#include <QDir>
27#include <QDebug>
28
29//=============================================================================================================
30// USED NAMESPACES
31//=============================================================================================================
32
33using namespace FIFFLIB;
34
35//=============================================================================================================
36// DEFINE STATIC MEMBERS
37//=============================================================================================================
38
39const static char m_sDefaultDirectory[]("realtime_shared_files");
40const static char m_sDefaultFileName[]("realtime_file");
41
42//=============================================================================================================
43// DEFINE MEMBER METHODS
44//=============================================================================================================
45
47: FiffFileSharer(m_sDefaultDirectory)
48{
49}
50
51//=============================================================================================================
52
53FiffFileSharer::FiffFileSharer(const QString& sDirName)
54: m_sDirectory(QDir::currentPath() + "/" + sDirName)
55, m_iFileIndex(0)
56{
57}
58
59//=============================================================================================================
60
61void FiffFileSharer::copyRealtimeFile(const QString &sSourcePath)
62{
63 if(initSharedDirectory()){
64 QString sFilePath(m_sDirectory + "/" + m_sDefaultFileName + QString::number(m_iFileIndex++) + "_raw.fif");
65
66 if(QFile::copy(sSourcePath, sFilePath)){
67 QFile newFile(sFilePath);
68 if(newFile.open(QIODevice::ReadWrite)){
69 FIFFLIB::FiffStream stream(&newFile);
70 stream.skipRawData(newFile.bytesAvailable());
71 stream.finish_writing_raw();
72
73 newFile.close();
74 }
75 }
76 }
77}
78
79//=============================================================================================================
80
82{
83 if(initSharedDirectory()){
84 clearSharedDirectory();
85 m_fileWatcher.addPath(m_sDirectory);
86 connect(&m_fileWatcher, &QFileSystemWatcher::directoryChanged,
87 this, &FiffFileSharer::onDirectoryChanged, Qt::UniqueConnection);
88 connect(&m_fileWatcher, &QFileSystemWatcher::fileChanged,
89 this, &FiffFileSharer::onFileChanged, Qt::UniqueConnection);
90 } else {
91 qWarning() << "[FiffFileSharer::initWatcher] Unable to initilaize shared directory";
92 }
93}
94
95//=============================================================================================================
96
97void FiffFileSharer::clearSharedDirectory()
98{
99 QDir directory(m_sDirectory);
100 directory.setNameFilters(QStringList("*.*"));
101 directory.setFilter(QDir::Files);
102 for(auto& file : directory.entryList()){
103 directory.remove(file);
104 }
105}
106
107//=============================================================================================================
108
109void FiffFileSharer::onDirectoryChanged(const QString &sPath)
110{
111 QString filePath(sPath + "/" + m_sDefaultFileName + QString::number(m_iFileIndex) + "_raw.fif");
112 m_fileWatcher.addPath(filePath);
113}
114
115//=============================================================================================================
116
117void FiffFileSharer::onFileChanged(const QString &sPath)
118{
119 emit newFileAtPath(sPath);
120 m_fileWatcher.removePath(sPath);
121
122 m_iFileIndex++;
123}
124
125//=============================================================================================================
126
127bool FiffFileSharer::initSharedDirectory()
128{
129 QDir sharedDirectory(m_sDirectory);
130 if(!sharedDirectory.exists()){
131 sharedDirectory.mkpath(".");
132 }
133
134 return sharedDirectory.exists();
135}
Memory-mapped FIFF file handle shared between cooperating processes / threads to avoid duplicate read...
FIFF file I/O, in-memory data structures and high-level readers/writers.
void newFileAtPath(const QString &sPath)
void copyRealtimeFile(const QString &sSourcePath)
FIFF tag-stream reader/writer: wraps a QIODevice and exposes typed read_* / write_* methods for every...