Ported ShareHelper to ShareUiInterface
[harmattan/cameraplus] / src / filenaming.cpp
index a72fa47..ee86ba1 100644 (file)
 
 #include "filenaming.h"
 #include <QDir>
-#include <QDebug>
 #include <QDate>
 #include <QFile>
+#include <QDeclarativeInfo>
 
 #define PATH QString("%1%2MyDocs%2cameraplus%2").arg(QDir::homePath()).arg(QDir::separator())
+#define TEMP_PATH QString("%1%2MyDocs%2.cameraplus%2").arg(QDir::homePath()).arg(QDir::separator())
 
 FileNaming::FileNaming(QObject *parent) :
-  QObject(parent) {
+  QObject(parent), m_index(-1) {
 
 }
 
@@ -35,12 +36,26 @@ FileNaming::~FileNaming() {
 
 }
 
+QString FileNaming::imageSuffix() const {
+  return m_image;
+}
+
 void FileNaming::setImageSuffix(const QString& suffix) {
-  m_image = suffix;
+  if (m_image != suffix) {
+    m_image = suffix;
+    emit imageSuffixChanged();
+  }
+}
+
+QString FileNaming::videoSuffix() const {
+  return m_video;
 }
 
 void FileNaming::setVideoSuffix(const QString& suffix) {
-  m_video = suffix;
+  if (m_video != suffix) {
+    m_video = suffix;
+    emit videoSuffixChanged();
+  }
 }
 
 QString FileNaming::imageFileName() {
@@ -52,33 +67,88 @@ QString FileNaming::videoFileName() {
 }
 
 QString FileNaming::fileName(const QString& suffix) {
+  QString path = FileNaming::path();
+  QString date = QDate::currentDate().toString("yyyyMMdd");
+  QDir dir(path);
+
   if (suffix.isEmpty()) {
     return QString();
   }
 
-  if (!QDir::root().mkpath(PATH)) {
-    qWarning() << "Failed to create" << PATH;
+  if (path.isEmpty()) {
     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 (date != m_date) {
+    m_index = -1;
+    m_date = date;
+  }
 
-  if (!entries.isEmpty()) {
-    QString name = QFile(entries.last()).fileName();
-    index = name.section('_', 1, 1).section('.', 0, 0).toInt();
+  if (m_index == -1) {
+    QStringList filters(QString("*%1_*").arg(date));
+    QStringList entries = dir.entryList(filters, QDir::Files, QDir::Name);
+    if (entries.isEmpty()) {
+      m_index = 0;
+    }
+    else {
+      QString name = QFile(entries.last()).fileName();
+      m_index = name.section('_', 1, 1).section('.', 0, 0).toInt();
+    }
   }
 
-  ++index;
+  ++m_index;
 
-  QString name = QString("%1%2_%3.%4").arg(PATH).arg(date).arg(QString().sprintf("%03i", index)).
+  QString name = QString("%1%2_%3.%4").arg(path).arg(date).arg(QString().sprintf("%03i", m_index)).
     arg(suffix);
 
+  if (QFile(name).exists()) {
+    return QString();
+  }
+
   return name;
 }
+
+QString FileNaming::path() {
+  if (m_path.isEmpty()) {
+    m_path = canonicalPath(PATH);
+  }
+
+  return m_path;
+}
+
+QString FileNaming::temporaryPath() {
+  if (m_temp.isEmpty()) {
+    m_temp = canonicalPath(TEMP_PATH);
+  }
+
+  return m_temp;
+}
+
+QString FileNaming::canonicalPath(const QString& path) {
+  if (!QDir::root().mkpath(path)) {
+    qmlInfo(this) << "Failed to create path" << path;
+    return QString();
+  }
+
+  QString newPath = QFileInfo(path).canonicalFilePath();
+
+  if (newPath.isEmpty()) {
+    return newPath;
+  }
+
+  if (!newPath.endsWith(QDir::separator())) {
+    newPath.append(QDir::separator());
+  }
+
+  return newPath;
+}
+
+QString FileNaming::temporaryVideoFileName() {
+  QString path = temporaryPath();
+
+  if (path.isEmpty()) {
+    return path;
+  }
+
+  return QString("%1.cameraplus_video.tmp").arg(path);
+}