v2.0.0
Loading...
Searching...
No Matches
fiff_file_sharer.cpp
Go to the documentation of this file.
1//=============================================================================================================
34
35//=============================================================================================================
36// INCLUDES
37//=============================================================================================================
38
39#include "fiff_file_sharer.h"
40
41//=============================================================================================================
42// QT INCLUDES
43//=============================================================================================================
44
45#include <QDir>
46#include <QDebug>
47
48//=============================================================================================================
49// USED NAMESPACES
50//=============================================================================================================
51
52using namespace FIFFLIB;
53
54//=============================================================================================================
55// DEFINE STATIC MEMBERS
56//=============================================================================================================
57
58const static char m_sDefaultDirectory[]("realtime_shared_files");
59const static char m_sDefaultFileName[]("realtime_file");
60
61//=============================================================================================================
62// DEFINE MEMBER METHODS
63//=============================================================================================================
64
66: FiffFileSharer(m_sDefaultDirectory)
67{
68}
69
70//=============================================================================================================
71
72FiffFileSharer::FiffFileSharer(const QString& sDirName)
73: m_sDirectory(QDir::currentPath() + "/" + sDirName)
74, m_iFileIndex(0)
75{
76}
77
78//=============================================================================================================
79
80void FiffFileSharer::copyRealtimeFile(const QString &sSourcePath)
81{
82 if(initSharedDirectory()){
83 QString sFilePath(m_sDirectory + "/" + m_sDefaultFileName + QString::number(m_iFileIndex++) + "_raw.fif");
84
85 if(QFile::copy(sSourcePath, sFilePath)){
86 QFile newFile(sFilePath);
87 if(newFile.open(QIODevice::ReadWrite)){
88 FIFFLIB::FiffStream stream(&newFile);
89 stream.skipRawData(newFile.bytesAvailable());
90 stream.finish_writing_raw();
91
92 newFile.close();
93 }
94 }
95 }
96}
97
98//=============================================================================================================
99
101{
102 if(initSharedDirectory()){
103 clearSharedDirectory();
104 m_fileWatcher.addPath(m_sDirectory);
105 connect(&m_fileWatcher, &QFileSystemWatcher::directoryChanged,
106 this, &FiffFileSharer::onDirectoryChanged, Qt::UniqueConnection);
107 connect(&m_fileWatcher, &QFileSystemWatcher::fileChanged,
108 this, &FiffFileSharer::onFileChanged, Qt::UniqueConnection);
109 } else {
110 qWarning() << "[FiffFileSharer::initWatcher] Unable to initilaize shared directory";
111 }
112}
113
114//=============================================================================================================
115
116void FiffFileSharer::clearSharedDirectory()
117{
118 QDir directory(m_sDirectory);
119 directory.setNameFilters(QStringList("*.*"));
120 directory.setFilter(QDir::Files);
121 for(auto& file : directory.entryList()){
122 directory.remove(file);
123 }
124}
125
126//=============================================================================================================
127
128void FiffFileSharer::onDirectoryChanged(const QString &sPath)
129{
130 QString filePath(sPath + "/" + m_sDefaultFileName + QString::number(m_iFileIndex) + "_raw.fif");
131 m_fileWatcher.addPath(filePath);
132}
133
134//=============================================================================================================
135
136void FiffFileSharer::onFileChanged(const QString &sPath)
137{
138 emit newFileAtPath(sPath);
139 m_fileWatcher.removePath(sPath);
140
141 m_iFileIndex++;
142}
143
144//=============================================================================================================
145
146bool FiffFileSharer::initSharedDirectory()
147{
148 QDir sharedDirectory(m_sDirectory);
149 if(!sharedDirectory.exists()){
150 sharedDirectory.mkpath(".");
151 }
152
153 return sharedDirectory.exists();
154}
FiffFileSharer class declaration.
FIFF file I/O and data structures (raw, epochs, evoked, covariance, forward).
void newFileAtPath(const QString &sPath)
void copyRealtimeFile(const QString &sSourcePath)
FIFF File I/O routines.