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
}
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();
// 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
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)
--- /dev/null
+#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;
+}
--- /dev/null
+// -*- 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 */
#include "imports/plugin.h"
#include "settings.h"
+#include "filenaming.h"
Q_DECL_EXPORT int main(int argc, char *argv[]) {
XInitThreads();
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);
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