Adding initial stage of file system watcher
diff --git a/filesystemwatcher/filesystemwatcher.cpp b/filesystemwatcher/filesystemwatcher.cpp
new file mode 100644
index 0000000..dbde2c8
--- /dev/null
+++ b/filesystemwatcher/filesystemwatcher.cpp
@@ -0,0 +1,91 @@
+#include "filesystemwatcher.h"
+#include "ui_filesystemwatcher.h"
+
+filesystemwatcher::filesystemwatcher(QString dirPath, QWidget *parent) :
+    QMainWindow(parent),
+    m_ui(new Ui::filesystemwatcher),
+    m_watcher(new QFileSystemWatcher()),
+    m_listViewModel(new QStringListModel()),
+    m_listView(new QListView()),
+    m_dirPath(dirPath)
+{
+    // setup user interface
+    m_ui->setupUi(this);
+
+    // add main directory to monitor
+    m_watcher->addPath(m_dirPath);
+
+    // create the view
+    m_listView->setModel(m_listViewModel);
+    setCentralWidget(m_listView);
+
+    // set title
+    setWindowTitle("ChronoShare");
+
+    // register signals (callback functions)
+    connect(m_watcher,SIGNAL(fileChanged(QString)),this,SLOT(fileChangedSlot(QString)));
+    connect(m_watcher,SIGNAL(directoryChanged(QString)),this,SLOT(dirChangedSlot(QString)));
+
+    // bootstrap file list
+    dirChangedSlot(m_dirPath);
+}
+
+filesystemwatcher::~filesystemwatcher()
+{
+    // clean up
+    delete m_ui;
+    delete m_watcher;
+    delete m_listViewModel;
+    delete m_listView;
+}
+
+void filesystemwatcher::fileChangedSlot(QString filePath)
+{
+    QStringList fileList;
+    fileList.append(filePath);
+}
+
+void filesystemwatcher::dirChangedSlot(QString dirPath)
+{
+    // list of files in directory
+    QStringList fileList;
+
+    // directory iterator (recursive)
+    QDirIterator dirIterator(m_dirPath, QDirIterator::Subdirectories |
+                                        QDirIterator::FollowSymlinks);
+
+    // iterate through directory recursively
+    while(dirIterator.hasNext())
+    {
+        // Get Next File/Dir
+        dirIterator.next();
+
+        // Get FileInfo
+        QFileInfo fileInfo = dirIterator.fileInfo();
+
+        // if not this directory or previous directory
+        if(fileInfo.absoluteFilePath() != ".." && fileInfo.absoluteFilePath() != ".")
+        {
+            // if this is a directory
+            if(fileInfo.isDir())
+            {
+                QStringList dirList = m_watcher->directories();
+
+                // if the directory is not already being watched
+                if (!dirList.contains(fileInfo.absoluteFilePath()))
+                {
+                    // add this directory to the watch list
+                    m_watcher->addPath(fileInfo.absoluteFilePath());
+                }
+            }
+            else
+            {
+                // add this file to the file list
+                fileList.append(fileInfo.absoluteFilePath());
+            }
+        }
+    }
+
+    // update gui with list of files in this directory
+    m_listViewModel->setStringList(fileList);
+}