Added a class to generate filenames for images and videos
authorMohammed Sameer <msameer@foolab.org>
Sun, 9 Sep 2012 22:36:12 +0000 (01:36 +0300)
committerMohammed Sameer <msameer@foolab.org>
Sun, 9 Sep 2012 23:02:07 +0000 (02:02 +0300)
qml/ImagePage.qml
qml/VideoPage.qml
qml/main.qml
src/filenaming.cpp [new file with mode: 0644]
src/filenaming.h [new file with mode: 0644]
src/main.cpp
src/src.pro

index 9a36699..b6cdba2 100644 (file)
@@ -17,8 +17,8 @@ CameraPage {
                 width: 75
                 height: 75
                 opacity: 0.5
-                // TODO:
-                onClicked: imageMode.capture("/home/developer/foo.png");
+                // TODO: Show an error if file is empty or starting fails.
+                onClicked: imageMode.capture(fileNaming.imageFileName());
                 visible: imageMode.canCapture && !cameraMode.animationRunning && !previewAnimationRunning
         }
 
index 792e6ff..d77bd6c 100644 (file)
@@ -21,8 +21,8 @@ CameraPage {
                 opacity: 0.5
                 onClicked: {
                         if (!videoMode.recording) {
-                // TODO:
-                                videoMode.startRecording("/home/developer/foo.mp4");
+                                // TODO: Show an error if file is empty or starting fails.
+                                videoMode.startRecording(fileNaming.videoFileName());
                         }
                         else {
                                 videoMode.stopRecording();
index f50729c..b3f0829 100644 (file)
@@ -7,7 +7,6 @@ import CameraPlus 1.0
 // TODO: metadata creator name, gps, geotags
 // TODO: resolutions and aspect ratios
 // TODO: postcapture
-// TODO: file naming
 // TODO: battery low state
 // TODO: disk space
 // TODO: flash not ready
@@ -37,6 +36,12 @@ PageStackWindow {
                 id: settings
         }
 
+        FileNaming {
+                id: fileNaming
+                imageSuffix: cam.imageSuffix
+                videoSuffix: cam.videoSuffix
+        }
+
         // Stolen from https://qt.gitorious.org/qt-components/qt-components/blobs/master/examples/meego/QmlComponentGallery/qml/ListPage.qml
         function replacePage(file) {
                 var component = Qt.createComponent(file)
diff --git a/src/filenaming.cpp b/src/filenaming.cpp
new file mode 100644 (file)
index 0000000..d652f49
--- /dev/null
@@ -0,0 +1,64 @@
+#include "filenaming.h"
+#include <QDir>
+#include <QDebug>
+#include <QDate>
+#include <QFile>
+
+#define PATH QString("%1%2MyDocs%2cameraplus%2").arg(QDir::homePath()).arg(QDir::separator())
+
+FileNaming::FileNaming(QObject *parent) :
+  QObject(parent) {
+
+}
+
+FileNaming::~FileNaming() {
+
+}
+
+void FileNaming::setImageSuffix(const QString& suffix) {
+  m_image = suffix;
+}
+
+void FileNaming::setVideoSuffix(const QString& suffix) {
+  m_video = suffix;
+}
+
+QString FileNaming::imageFileName() {
+  return fileName(m_image);
+}
+
+QString FileNaming::videoFileName() {
+  return fileName(m_video);
+}
+
+QString FileNaming::fileName(const QString& suffix) {
+  if (suffix.isEmpty()) {
+    return QString();
+  }
+
+  if (!QDir::root().mkpath(PATH)) {
+    qWarning() << "Failed to create" << PATH;
+    return QString();
+  }
+
+  // Shamelessly stolen from Aura
+  QDir dir(PATH);
+  QString date = QDate::currentDate().toString("yyyyMMdd");
+
+  QStringList filters(QString("*%1_*").arg(date));
+  QStringList entries = dir.entryList(filters, QDir::Files, QDir::Name);
+
+  int index = 0;
+
+  if (!entries.isEmpty()) {
+    QString name = QFile(entries.last()).fileName();
+    index = name.section('_', 1, 1).section('.', 0, 0).toInt();
+  }
+
+  ++index;
+
+  QString name = QString("%1%2_%3.%4").arg(PATH).arg(date).arg(QString().sprintf("%03i", index)).
+    arg(suffix);
+
+  return name;
+}
diff --git a/src/filenaming.h b/src/filenaming.h
new file mode 100644 (file)
index 0000000..cf902a2
--- /dev/null
@@ -0,0 +1,31 @@
+// -*- c++ -*-
+
+#ifndef FILE_NAMING_H
+#define FILE_NAMING_H
+
+#include <QObject>
+
+class FileNaming : public QObject {
+  Q_OBJECT
+
+  Q_PROPERTY(QString imageSuffix WRITE setImageSuffix);
+  Q_PROPERTY(QString videoSuffix WRITE setVideoSuffix);
+
+public:
+  FileNaming(QObject *parent = 0);
+  ~FileNaming();
+
+  void setImageSuffix(const QString& suffix);
+  void setVideoSuffix(const QString& suffix);
+
+  Q_INVOKABLE QString imageFileName();
+  Q_INVOKABLE QString videoFileName();
+
+private:
+  QString fileName(const QString& suffix);
+
+  QString m_image;
+  QString m_video;
+};
+
+#endif /* FILE_NAMING_H */
index 1aac8ab..0c3df6d 100644 (file)
@@ -9,6 +9,7 @@
 #include "imports/plugin.h"
 
 #include "settings.h"
+#include "filenaming.h"
 
 Q_DECL_EXPORT int main(int argc, char *argv[]) {
   XInitThreads();
@@ -22,6 +23,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[]) {
 
   Plugin::registerTypes(view.engine());
   qmlRegisterType<Settings>("CameraPlus", 1, 0, "Settings");
+  qmlRegisterType<FileNaming>("CameraPlus", 1, 0, "FileNaming");
 
   QUrl sourceUrl = QUrl::fromLocalFile(QDir::currentPath() + "/main.qml");
   view.setSource(sourceUrl);
index 82245e4..0b3e059 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
-HEADERS += settings.h
+SOURCES += main.cpp settings.cpp filenaming.cpp
+HEADERS += settings.h filenaming.h