Added a monitor for MyDocs availability
authorMohammed Sameer <msameer@foolab.org>
Tue, 11 Sep 2012 21:00:59 +0000 (00:00 +0300)
committerMohammed Sameer <msameer@foolab.org>
Tue, 11 Sep 2012 21:00:59 +0000 (00:00 +0300)
Show warnings if we start recording or capturing while it's not available

qml/ImagePage.qml
qml/VideoPage.qml
qml/main.qml
src/fsmonitor.cpp [new file with mode: 0644]
src/fsmonitor.h [new file with mode: 0644]
src/main.cpp
src/src.pro

index d96e665..724c73e 100644 (file)
@@ -18,8 +18,11 @@ CameraPage {
                 height: 75
                 opacity: 0.5
                 onClicked: {
-                        if (!imageMode.capture(fileNaming.imageFileName())) {
-                                showError("Failed to capture image. Please restart the camera.");
+                        if (!fileSystem.available) {
+                                showError(qsTr("Camera cannot capture images in mass storage mode."));
+                        }
+                        else if (!imageMode.capture(fileNaming.imageFileName())) {
+                                showError(qsTr("Failed to capture image. Please restart the camera."));
                         }
                 }
 
index f6dddfc..8dc4b2a 100644 (file)
@@ -26,8 +26,11 @@ CameraPage {
                 opacity: 0.5
                 onClicked: {
                         if (!videoMode.recording) {
-                                if (!videoMode.startRecording(fileNaming.videoFileName())) {
-                                        showError("Failed to record video. Please restart the camera.");
+                                if (!fileSystem.available) {
+                                        showError(qsTr("Camera cannot record videos in mass storage mode."));
+                                }
+                                else if (!videoMode.startRecording(fileNaming.videoFileName())) {
+                                        showError(qsTr("Failed to record video. Please restart the camera."));
                                 }
                         }
                         else {
index 58e15f5..0a3acb3 100644 (file)
@@ -16,7 +16,6 @@ import CameraPlus 1.0
 // TODO: portrait/landscape
 // TODO: record video in a hidden directory and then copy the video to avoid tracker indexing it.
 // TODO: stop viewfinder in postcapture and settings pages ?
-// TODO: mass storage
 // TODO: resource policy
 // TODO: prevent going to mass storage while recording and capturing
 // TODO: sounds
@@ -50,6 +49,10 @@ PageStackWindow {
                 error.show();
         }
 
+        FSMonitor {
+                id: fileSystem
+        }
+
         InfoBanner {
                 id: error
         }
diff --git a/src/fsmonitor.cpp b/src/fsmonitor.cpp
new file mode 100644 (file)
index 0000000..141e9c6
--- /dev/null
@@ -0,0 +1,33 @@
+#include "fsmonitor.h"
+#include <qmusbmode.h>
+
+FSMonitor::FSMonitor(QObject *parent) :
+  QObject(parent), m_mode(new MeeGo::QmUSBMode(this)) {
+
+  QObject::connect(m_mode, SIGNAL(modeChanged(MeeGo::QmUSBMode::Mode)),
+                  this, SLOT(modeChanged()));
+
+  m_available =
+    m_mode->mountStatus(MeeGo::QmUSBMode::DocumentDirectoryMount)
+    .testFlag(MeeGo::QmUSBMode::ReadWriteMount);
+}
+
+FSMonitor::~FSMonitor() {
+
+}
+
+bool FSMonitor::isAvailable() const {
+  return m_available;
+}
+
+void FSMonitor::setAvailable(bool available) {
+  if (m_available != available) {
+    m_available = available;
+    emit availabilityChanged();
+  }
+}
+
+void FSMonitor::modeChanged() {
+  setAvailable(m_mode->mountStatus(MeeGo::QmUSBMode::DocumentDirectoryMount)
+              .testFlag(MeeGo::QmUSBMode::ReadWriteMount));
+}
diff --git a/src/fsmonitor.h b/src/fsmonitor.h
new file mode 100644 (file)
index 0000000..badbc97
--- /dev/null
@@ -0,0 +1,35 @@
+// -*- c++ -*-
+
+#ifndef FS_MONITOR_H
+#define FS_MONITOR_H
+
+#include <QObject>
+
+namespace MeeGo {
+  class QmUSBMode;
+};
+
+class FSMonitor : public QObject {
+  Q_OBJECT
+  Q_PROPERTY(bool available READ isAvailable NOTIFY availabilityChanged)
+
+public:
+  FSMonitor(QObject *parent = 0);
+  ~FSMonitor();
+
+  bool isAvailable() const;
+
+  void setAvailable(bool available);
+
+signals:
+  void availabilityChanged();
+
+private slots:
+  void modeChanged();
+
+private:
+  bool m_available;
+  MeeGo::QmUSBMode *m_mode;
+};
+
+#endif /* FS_MONITOR_H */
index bbfb23f..8184457 100644 (file)
@@ -11,6 +11,7 @@
 #include "filenaming.h"
 #include "quillitem.h"
 #include "displaystate.h"
+#include "fsmonitor.h"
 
 Q_DECL_EXPORT int main(int argc, char *argv[]) {
   QApplication::setAttribute(Qt::AA_X11InitThreads, true);
@@ -26,6 +27,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) {
   qmlRegisterType<FileNaming>("CameraPlus", 1, 0, "FileNaming");
   qmlRegisterType<QuillItem>("CameraPlus", 1, 0, "QuillItem");
   qmlRegisterType<DisplayState>("CameraPlus", 1, 0, "DisplayState");
+  qmlRegisterType<FSMonitor>("CameraPlus", 1, 0, "FSMonitor");
 
   QUrl sourceUrl = QUrl::fromLocalFile(QDir::currentPath() + "/main.qml");
   view.setSource(sourceUrl);
index 200bba5..de19a5f 100644 (file)
@@ -12,5 +12,5 @@ PKGCONFIG = gstreamer-0.10 gstreamer-interfaces-0.10 gstreamer-video-0.10 gstrea
 
 LIBS +=  -L../imports/ -limports -L../lib/ -lqtcamera
 
-SOURCES += main.cpp settings.cpp filenaming.cpp quillitem.cpp displaystate.cpp
-HEADERS += settings.h filenaming.h quillitem.h displaystate.h
+SOURCES += main.cpp settings.cpp filenaming.cpp quillitem.cpp displaystate.cpp fsmonitor.cpp
+HEADERS += settings.h filenaming.h quillitem.h displaystate.h fsmonitor.h