]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/revisioncontrolplugin.cpp
SVN_SILENT made messages (.desktop file)
[dolphin.git] / src / revisioncontrolplugin.cpp
index 6c0f82fb8294500246c9a5e1885ac84891c04d38..5e6783335ca7dd6c4ac95e71b19d8bda85cf603a 100644 (file)
 
 #include "revisioncontrolplugin.h"
 
+#include <kfileitem.h>
 #include <QDir>
+#include <QString>
+#include <QTextStream>
 
 RevisionControlPlugin::RevisionControlPlugin()
 {
@@ -33,7 +36,7 @@ RevisionControlPlugin::~RevisionControlPlugin()
 
 SubversionPlugin::SubversionPlugin() :
     m_directory(),
-    m_fileInfoHash()
+    m_revisionInfoHash()
 {
 }
 
@@ -49,6 +52,7 @@ QString SubversionPlugin::fileName() const
 bool SubversionPlugin::beginRetrieval(const QString& directory)
 {
     Q_ASSERT(directory.endsWith('/'));
+    m_directory = directory;
     const QString path = directory + ".svn/text-base/";
 
     QDir dir(path);
@@ -61,7 +65,10 @@ bool SubversionPlugin::beginRetrieval(const QString& directory)
         // in a fast way in SubversionPlugin::revisionState().
         fileName.chop(sizeof(".svn-base") / sizeof(char) - 1);
         if (!fileName.isEmpty()) {
-            m_fileInfoHash.insert(fileName, fileInfoList.at(i));
+            RevisionInfo info;
+            info.size = fileInfoList.at(i).size();
+            info.timeStamp = fileInfoList.at(i).lastModified();            
+            m_revisionInfoHash.insert(fileName, info);
         }
     }
     return size > 0;
@@ -71,11 +78,33 @@ void SubversionPlugin::endRetrieval()
 {
 }
 
-RevisionControlPlugin::RevisionState SubversionPlugin::revisionState(const QString& fileName)
+RevisionControlPlugin::RevisionState SubversionPlugin::revisionState(const KFileItem& item)
 {
-    if (m_fileInfoHash.contains(fileName)) {
-        // TODO...
-        return RevisionControlPlugin::LatestRevision;
+    const QString name = item.name();
+    if (item.isDir()) {
+        QFile file(m_directory + name + "/.svn");
+        if (file.open(QIODevice::ReadOnly)) {
+            file.close();
+            // TODO...
+            return RevisionControlPlugin::LatestRevision;
+        }
+    } else if (m_revisionInfoHash.contains(name)) {
+        const RevisionInfo info = m_revisionInfoHash.value(item.name());
+        const QDateTime localTimeStamp = item.time(KFileItem::ModificationTime).dateTime();
+        const QDateTime versionedTimeStamp = info.timeStamp;
+
+        if (localTimeStamp > versionedTimeStamp) {
+            if (info.size != item.size()) {
+                return RevisionControlPlugin::EditingRevision;
+            }
+            // TODO: a comparison of the content is required
+        } else if (localTimeStamp < versionedTimeStamp) {
+            if (info.size != item.size()) {
+                return RevisionControlPlugin::UpdateRequiredRevision;
+            }
+            // TODO: a comparison of the content is required
+        }
+        return  RevisionControlPlugin::LatestRevision;
     }
 
     return RevisionControlPlugin::LocalRevision;