[Pkg-owncloud-commits] [owncloud-client] 104/332: Socket API: move the code that gets the status out of the folder

Sandro Knauß hefee-guest at moszumanska.debian.org
Thu Aug 14 21:06:45 UTC 2014


This is an automated email from the git hooks/post-receive script.

hefee-guest pushed a commit to branch master
in repository owncloud-client.

commit da0bd14bf3d46826aec903932924cd75ae93544f
Author: Olivier Goffart <ogoffart at woboq.com>
Date:   Thu Jun 19 14:08:30 2014 +0200

    Socket API:  move the code that gets the status out of the folder
    
    Move the code in socketapi.cpp where it belongs
---
 src/mirall/folder.cpp    | 117 --------------------------------------
 src/mirall/folder.h      |  27 +++------
 src/mirall/socketapi.cpp | 144 +++++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 147 insertions(+), 141 deletions(-)

diff --git a/src/mirall/folder.cpp b/src/mirall/folder.cpp
index 91e7ba0..bc27738 100644
--- a/src/mirall/folder.cpp
+++ b/src/mirall/folder.cpp
@@ -30,21 +30,6 @@
 
 #include "creds/abstractcredentials.h"
 
-extern "C" {
-
-enum csync_exclude_type_e {
-  CSYNC_NOT_EXCLUDED   = 0,
-  CSYNC_FILE_SILENTLY_EXCLUDED,
-  CSYNC_FILE_EXCLUDE_AND_REMOVE,
-  CSYNC_FILE_EXCLUDE_LIST,
-  CSYNC_FILE_EXCLUDE_INVALID_CHAR
-};
-typedef enum csync_exclude_type_e CSYNC_EXCLUDE_TYPE;
-
-CSYNC_EXCLUDE_TYPE csync_excluded(CSYNC *ctx, const char *path, int filetype);
-
-}
-
 #include <QDebug>
 #include <QTimer>
 #include <QUrl>
@@ -749,107 +734,5 @@ void Folder::slotAboutToRemoveAllFiles(SyncFileItem::Direction direction, bool *
     }
 #endif
 }
-
-// compute the file status of a directory recursively. It returns either
-// "all in sync" or "needs update" or "error", no more details.
-SyncFileStatus Folder::recursiveFolderStatus( const QString& fileName )
-{
-    QDir dir(path() + fileName);
-
-    const QStringList dirEntries = dir.entryList( QDir::AllEntries | QDir::NoDotAndDotDot );
-
-    foreach( const QString entry, dirEntries ) {
-        QFileInfo fi(entry);
-        SyncFileStatus sfs;
-        if( fi.isDir() ) {
-            sfs = recursiveFolderStatus( fileName + QLatin1Char('/') + entry );
-        } else {
-            QString fs( fileName + QLatin1Char('/') + entry );
-            if( fileName.isEmpty() ) {
-                // toplevel, no slash etc. needed.
-                fs = entry;
-            }
-            sfs = fileStatus( fs );
-        }
-
-        if( sfs == FILE_STATUS_STAT_ERROR || sfs == FILE_STATUS_ERROR ) {
-            return FILE_STATUS_ERROR;
-        }
-        if( sfs != FILE_STATUS_SYNC) {
-            return FILE_STATUS_EVAL;
-        }
-    }
-    return FILE_STATUS_SYNC;
-}
-
-SyncFileStatus Folder::fileStatus( const QString& fileName )
-{
-    /*
-    STATUS_NONE,
-    + STATUS_EVAL,
-    STATUS_REMOVE, (invalid for this case because it asks for local files)
-    STATUS_RENAME,
-    + STATUS_NEW,
-    STATUS_CONFLICT,(probably also invalid as we know the conflict only with server involvement)
-    + STATUS_IGNORE,
-    + STATUS_SYNC,
-    + STATUS_STAT_ERROR,
-    STATUS_ERROR,
-    STATUS_UPDATED
-    */
-
-    // FIXME: Find a way for STATUS_ERROR
-    SyncFileStatus stat = FILE_STATUS_NONE;
-
-    QString file = fileName;
-    if( path() != QLatin1String("/") ) {
-        file = path() + fileName;
-    }
-
-    QFileInfo fi(file);
-
-    if( !fi.exists() ) {
-        stat = FILE_STATUS_STAT_ERROR; // not really possible.
-    }
-
-    // file is ignored?
-    if( fi.isSymLink() ) {
-        stat = FILE_STATUS_IGNORE;
-    }
-    int type = CSYNC_FTW_TYPE_FILE;
-    if( fi.isDir() ) {
-        type = CSYNC_FTW_TYPE_DIR;
-    }
-
-    if( stat == FILE_STATUS_NONE ) {
-        CSYNC_EXCLUDE_TYPE excl = csync_excluded(_csync_ctx, file.toUtf8(), type);
-
-        if( excl != CSYNC_NOT_EXCLUDED ) {
-            stat = FILE_STATUS_IGNORE;
-        }
-    }
-
-    if( type == CSYNC_FTW_TYPE_DIR ) {
-        // compute recursive status of the directory
-        stat = recursiveFolderStatus( fileName );
-    } else {
-        if( stat == FILE_STATUS_NONE ) {
-            SyncJournalFileRecord rec = _journal.getFileRecord(fileName);
-            if( !rec.isValid() ) {
-                stat = FILE_STATUS_NEW;
-            }
-
-            // file was locally modified.
-            if( stat == FILE_STATUS_NONE && fi.lastModified() != rec._modtime ) {
-                stat = FILE_STATUS_EVAL;
-            }
-        }
-        if( stat == FILE_STATUS_NONE ) {
-            stat = FILE_STATUS_SYNC;
-        }
-    }
-    return stat;
-}
-
 } // namespace Mirall
 
diff --git a/src/mirall/folder.h b/src/mirall/folder.h
index 2615a17..9e14bdb 100644
--- a/src/mirall/folder.h
+++ b/src/mirall/folder.h
@@ -42,8 +42,7 @@ class SyncEngine;
 
 class FolderWatcher;
 
-
-typedef enum SyncFileStatus_s {
+enum SyncFileStatus {
     FILE_STATUS_NONE,
     FILE_STATUS_EVAL,
     FILE_STATUS_REMOVE,
@@ -56,8 +55,7 @@ typedef enum SyncFileStatus_s {
     FILE_STATUS_STAT_ERROR,
     FILE_STATUS_ERROR,
     FILE_STATUS_UPDATED
-} SyncFileStatus;
-
+};
 
 class OWNCLOUDSYNC_EXPORT Folder : public QObject
 {
@@ -72,22 +70,6 @@ public:
     typedef QHashIterator<QString, Folder*> MapIterator;
 
     /**
-     * Get status about a single file.
-     */
-    SyncFileStatus fileStatus( const QString& );
-
-    /**
-     * @brief recursiveFolderStatus
-     * @param fileName - the relative file name to examine
-     * @return the resulting status
-     *
-     * The resulting status can only be either SYNC which means all files
-     * are in sync, ERROR if an error occured, or EVAL if something needs
-     * to be synced underneath this dir.
-     */
-    SyncFileStatus recursiveFolderStatus( const QString& fileName );
-
-    /**
      * alias or nickname
      */
     QString alias() const;
@@ -149,6 +131,11 @@ public:
 
      void setDirtyNetworkLimits();
 
+     // Used by the Socket API
+     SyncJournalDb *journalDb() { return &_journal; }
+     CSYNC *csyncContext() { return _csync_ctx; }
+
+
 signals:
     void syncStateChange();
     void syncStarted();
diff --git a/src/mirall/socketapi.cpp b/src/mirall/socketapi.cpp
index 231e9e2..b527757 100644
--- a/src/mirall/socketapi.cpp
+++ b/src/mirall/socketapi.cpp
@@ -12,7 +12,6 @@
  * for more details.
  */
 
-
 #include "socketapi.h"
 
 #include "mirall/mirallconfigfile.h"
@@ -20,6 +19,7 @@
 #include "mirall/folder.h"
 #include "mirall/utility.h"
 #include "mirall/theme.h"
+#include "syncjournalfilerecord.h"
 
 #include <QDebug>
 #include <QUrl>
@@ -32,10 +32,146 @@
 #include <QDir>
 #include <QApplication>
 
+extern "C" {
+
+enum csync_exclude_type_e {
+  CSYNC_NOT_EXCLUDED   = 0,
+  CSYNC_FILE_SILENTLY_EXCLUDED,
+  CSYNC_FILE_EXCLUDE_AND_REMOVE,
+  CSYNC_FILE_EXCLUDE_LIST,
+  CSYNC_FILE_EXCLUDE_INVALID_CHAR
+};
+typedef enum csync_exclude_type_e CSYNC_EXCLUDE_TYPE;
+
+CSYNC_EXCLUDE_TYPE csync_excluded(CSYNC *ctx, const char *path, int filetype);
+
+}
+
 namespace Mirall {
 
 #define DEBUG qDebug() << "SocketApi: "
 
+namespace SocketApiHelper {
+
+SyncFileStatus fileStatus(Folder *folder, const QString& fileName );
+
+/**
+ * @brief recursiveFolderStatus
+ * @param fileName - the relative file name to examine
+ * @return the resulting status
+ *
+ * The resulting status can only be either SYNC which means all files
+ * are in sync, ERROR if an error occured, or EVAL if something needs
+ * to be synced underneath this dir.
+ */
+// compute the file status of a directory recursively. It returns either
+// "all in sync" or "needs update" or "error", no more details.
+SyncFileStatus recursiveFolderStatus(Folder *folder, const QString& fileName )
+{
+    QDir dir(folder->path() + fileName);
+
+    const QStringList dirEntries = dir.entryList( QDir::AllEntries | QDir::NoDotAndDotDot );
+
+    foreach( const QString entry, dirEntries ) {
+        QFileInfo fi(entry);
+        SyncFileStatus sfs;
+        if( fi.isDir() ) {
+            sfs = recursiveFolderStatus(folder, fileName + QLatin1Char('/') + entry );
+        } else {
+            QString fs( fileName + QLatin1Char('/') + entry );
+            if( fileName.isEmpty() ) {
+                // toplevel, no slash etc. needed.
+                fs = entry;
+            }
+            sfs = fileStatus(folder, fs );
+        }
+
+        if( sfs == FILE_STATUS_STAT_ERROR || sfs == FILE_STATUS_ERROR ) {
+            return FILE_STATUS_ERROR;
+        }
+        if( sfs != FILE_STATUS_SYNC) {
+            return FILE_STATUS_EVAL;
+        }
+    }
+    return FILE_STATUS_SYNC;
+}
+
+/**
+ * Get status about a single file.
+ */
+SyncFileStatus fileStatus(Folder *folder, const QString& fileName )
+{
+    /*
+    STATUS_NONE,
+    + STATUS_EVAL,
+    STATUS_REMOVE, (invalid for this case because it asks for local files)
+    STATUS_RENAME,
+    + STATUS_NEW,
+    STATUS_CONFLICT,(probably also invalid as we know the conflict only with server involvement)
+    + STATUS_IGNORE,
+    + STATUS_SYNC,
+    + STATUS_STAT_ERROR,
+    STATUS_ERROR,
+    STATUS_UPDATED
+    */
+
+    // FIXME: Find a way for STATUS_ERROR
+    SyncFileStatus stat = FILE_STATUS_NONE;
+
+    QString file = fileName;
+    if( folder->path() != QLatin1String("/") ) {
+        file = folder->path() + fileName;
+    }
+
+    QFileInfo fi(file);
+
+    if( !fi.exists() ) {
+        stat = FILE_STATUS_STAT_ERROR; // not really possible.
+    }
+
+    // file is ignored?
+    if( fi.isSymLink() ) {
+        stat = FILE_STATUS_IGNORE;
+    }
+    int type = CSYNC_FTW_TYPE_FILE;
+    if( fi.isDir() ) {
+        type = CSYNC_FTW_TYPE_DIR;
+    }
+
+    if( stat == FILE_STATUS_NONE ) {
+        CSYNC_EXCLUDE_TYPE excl = csync_excluded(folder->csyncContext(), file.toUtf8(), type);
+
+        if( excl != CSYNC_NOT_EXCLUDED ) {
+            stat = FILE_STATUS_IGNORE;
+        }
+    }
+
+    if( type == CSYNC_FTW_TYPE_DIR ) {
+        // compute recursive status of the directory
+        stat = recursiveFolderStatus( folder, fileName );
+    } else {
+        if( stat == FILE_STATUS_NONE ) {
+            SyncJournalFileRecord rec = folder->journalDb()->getFileRecord(fileName);
+            if( !rec.isValid() ) {
+                stat = FILE_STATUS_NEW;
+            }
+
+            // file was locally modified.
+            if( stat == FILE_STATUS_NONE && fi.lastModified() != rec._modtime ) {
+                stat = FILE_STATUS_EVAL;
+            }
+        }
+        if( stat == FILE_STATUS_NONE ) {
+            stat = FILE_STATUS_SYNC;
+        }
+    }
+    return stat;
+}
+
+
+}
+
+
 SocketApi::SocketApi(QObject* parent, const QUrl& localFile)
     : QObject(parent)
     , _localServer(0)
@@ -176,7 +312,7 @@ void SocketApi::command_RETRIEVE_FOLDER_STATUS(const QString& argument, QLocalSo
         const QStringList fileEntries = dir.entryList( QDir::Files );
         foreach(const QString file, fileEntries) {
             const QString absoluteFilePath = dir.absoluteFilePath(file);
-            SyncFileStatus fileStatus = folder->fileStatus( absoluteFilePath.mid(folder->path().length()) );
+            SyncFileStatus fileStatus = SocketApiHelper::fileStatus(folder, absoluteFilePath.mid(folder->path().length()) );
             if( fileStatus == FILE_STATUS_STAT_ERROR ) {
                 qDebug() << "XXXXXXXXXXXX FileStatus is STAT ERROR for " << absoluteFilePath;
             }
@@ -194,7 +330,7 @@ void SocketApi::command_RETRIEVE_FOLDER_STATUS(const QString& argument, QLocalSo
 
         foreach(const QString entry, dirEntries) {
             QString absoluteFilePath = dir.absoluteFilePath(entry);
-            SyncFileStatus sfs = folder->recursiveFolderStatus( absoluteFilePath.mid(folder->path().length()) );
+            SyncFileStatus sfs = SocketApiHelper::recursiveFolderStatus(folder, absoluteFilePath.mid(folder->path().length()) );
             if( sfs != FILE_STATUS_SYNC ) {
                 statusString = QLatin1String("NEED_SYNC");
                 break;
@@ -229,7 +365,7 @@ void SocketApi::command_RETRIEVE_FILE_STATUS(const QString& argument, QLocalSock
     }
 
     if( statusString.isEmpty() ) {
-        SyncFileStatus fileStatus = folder->fileStatus( argument.mid(folder->path().length()) );
+        SyncFileStatus fileStatus = SocketApiHelper::fileStatus(folder, argument.mid(folder->path().length()) );
         if( fileStatus == FILE_STATUS_STAT_ERROR ) {
             qDebug() << "XXXXXXXXXXXX FileStatus is STAT ERROR for " << argument;
         }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git



More information about the Pkg-owncloud-commits mailing list