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