From f35981c42be67bd2f591fe61d0d2d7a427f7dbe6 Mon Sep 17 00:00:00 2001 From: Mohammed Sameer Date: Mon, 10 Sep 2012 01:36:12 +0300 Subject: [PATCH] Added a class to generate filenames for images and videos --- qml/ImagePage.qml | 4 +-- qml/VideoPage.qml | 4 +-- qml/main.qml | 7 ++++- src/filenaming.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++++++ src/filenaming.h | 31 ++++++++++++++++++++++ src/main.cpp | 2 ++ src/src.pro | 4 +-- 7 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 src/filenaming.cpp create mode 100644 src/filenaming.h diff --git a/qml/ImagePage.qml b/qml/ImagePage.qml index 9a36699..b6cdba2 100644 --- a/qml/ImagePage.qml +++ b/qml/ImagePage.qml @@ -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 } diff --git a/qml/VideoPage.qml b/qml/VideoPage.qml index 792e6ff..d77bd6c 100644 --- a/qml/VideoPage.qml +++ b/qml/VideoPage.qml @@ -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(); diff --git a/qml/main.qml b/qml/main.qml index f50729c..b3f0829 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -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 index 0000000..d652f49 --- /dev/null +++ b/src/filenaming.cpp @@ -0,0 +1,64 @@ +#include "filenaming.h" +#include +#include +#include +#include + +#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 index 0000000..cf902a2 --- /dev/null +++ b/src/filenaming.h @@ -0,0 +1,31 @@ +// -*- c++ -*- + +#ifndef FILE_NAMING_H +#define FILE_NAMING_H + +#include + +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 */ diff --git a/src/main.cpp b/src/main.cpp index 1aac8ab..0c3df6d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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("CameraPlus", 1, 0, "Settings"); + qmlRegisterType("CameraPlus", 1, 0, "FileNaming"); QUrl sourceUrl = QUrl::fromLocalFile(QDir::currentPath() + "/main.qml"); view.setSource(sourceUrl); diff --git a/src/src.pro b/src/src.pro index 82245e4..0b3e059 100644 --- a/src/src.pro +++ b/src/src.pro @@ -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 -- 2.34.1