mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-23 05:25:50 +03:00
SocketAPI: Enhance SyncFileStatus to have share information.
Added a new class SyncFileStatus to reflect that properly.
This commit is contained in:
parent
9dacad99fa
commit
c6deb392fd
6 changed files with 177 additions and 76 deletions
|
@ -87,6 +87,7 @@ set(libsync_SRCS
|
|||
mirall/clientproxy.cpp
|
||||
mirall/syncrunfilelog.cpp
|
||||
mirall/cookiejar.cpp
|
||||
mirall/syncfilestatus.cpp
|
||||
creds/dummycredentials.cpp
|
||||
creds/abstractcredentials.cpp
|
||||
creds/credentialsfactory.cpp
|
||||
|
|
|
@ -373,17 +373,17 @@ void Folder::bubbleUpSyncResult()
|
|||
qDebug() << "Processing result list and logging took " << timer.elapsed() << " Milliseconds.";
|
||||
_syncResult.setWarnCount(ignoredItems);
|
||||
|
||||
createGuiLog( firstItemNew._file, FILE_STATUS_NEW, newItems );
|
||||
createGuiLog( firstItemDeleted._file, FILE_STATUS_REMOVE, removedItems );
|
||||
createGuiLog( firstItemUpdated._file, FILE_STATUS_UPDATED, updatedItems );
|
||||
createGuiLog( firstItemNew._file, SyncFileStatus(SyncFileStatus::STATUS_NEW), newItems );
|
||||
createGuiLog( firstItemDeleted._file, SyncFileStatus(SyncFileStatus::STATUS_REMOVE), removedItems );
|
||||
createGuiLog( firstItemUpdated._file, SyncFileStatus(SyncFileStatus::STATUS_UPDATED), updatedItems );
|
||||
|
||||
if( !firstItemRenamed.isEmpty() ) {
|
||||
SyncFileStatus status = FILE_STATUS_RENAME;
|
||||
SyncFileStatus status(SyncFileStatus::STATUS_RENAME);
|
||||
// if the path changes it's rather a move
|
||||
QDir renTarget = QFileInfo(firstItemRenamed._renameTarget).dir();
|
||||
QDir renSource = QFileInfo(firstItemRenamed._file).dir();
|
||||
if(renTarget != renSource) {
|
||||
status = FILE_STATUS_MOVE;
|
||||
status.set(SyncFileStatus::STATUS_MOVE);
|
||||
}
|
||||
createGuiLog( firstItemRenamed._file, status, renamedItems, firstItemRenamed._renameTarget );
|
||||
}
|
||||
|
@ -402,36 +402,36 @@ void Folder::createGuiLog( const QString& filename, SyncFileStatus status, int c
|
|||
|
||||
// not all possible values of status are evaluated here because the others
|
||||
// are not used in the calling function. Please check there.
|
||||
switch (status) {
|
||||
case FILE_STATUS_REMOVE:
|
||||
switch (status.tag()) {
|
||||
case SyncFileStatus::STATUS_REMOVE:
|
||||
if( count > 1 ) {
|
||||
text = tr("%1 and %2 other files have been removed.", "%1 names a file.").arg(file).arg(count-1);
|
||||
} else {
|
||||
text = tr("%1 has been removed.", "%1 names a file.").arg(file);
|
||||
}
|
||||
break;
|
||||
case FILE_STATUS_NEW:
|
||||
case SyncFileStatus::STATUS_NEW:
|
||||
if( count > 1 ) {
|
||||
text = tr("%1 and %2 other files have been downloaded.", "%1 names a file.").arg(file).arg(count-1);
|
||||
} else {
|
||||
text = tr("%1 has been downloaded.", "%1 names a file.").arg(file);
|
||||
}
|
||||
break;
|
||||
case FILE_STATUS_UPDATED:
|
||||
case SyncFileStatus::STATUS_UPDATED:
|
||||
if( count > 1 ) {
|
||||
text = tr("%1 and %2 other files have been updated.").arg(file).arg(count-1);
|
||||
} else {
|
||||
text = tr("%1 has been updated.", "%1 names a file.").arg(file);
|
||||
}
|
||||
break;
|
||||
case FILE_STATUS_RENAME:
|
||||
case SyncFileStatus::STATUS_RENAME:
|
||||
if( count > 1 ) {
|
||||
text = tr("%1 has been renamed to %2 and %3 other files have been renamed.").arg(file).arg(renameTarget).arg(count-1);
|
||||
} else {
|
||||
text = tr("%1 has been renamed to %2.", "%1 and %2 name files.").arg(file).arg(renameTarget);
|
||||
}
|
||||
break;
|
||||
case FILE_STATUS_MOVE:
|
||||
case SyncFileStatus::STATUS_MOVE:
|
||||
if( count > 1 ) {
|
||||
text = tr("%1 has been moved to %2 and %3 other files have been moved.").arg(file).arg(renameTarget).arg(count-1);
|
||||
} else {
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "mirall/progressdispatcher.h"
|
||||
#include "mirall/syncjournaldb.h"
|
||||
#include "mirall/clientproxy.h"
|
||||
#include "mirall/syncfilestatus.h"
|
||||
|
||||
#include <csync.h>
|
||||
|
||||
|
@ -42,23 +43,7 @@ class SyncEngine;
|
|||
|
||||
class FolderWatcher;
|
||||
|
||||
enum SyncFileStatus {
|
||||
FILE_STATUS_NONE,
|
||||
FILE_STATUS_EVAL,
|
||||
FILE_STATUS_REMOVE,
|
||||
FILE_STATUS_RENAME,
|
||||
FILE_STATUS_MOVE,
|
||||
FILE_STATUS_NEW,
|
||||
FILE_STATUS_CONFLICT,
|
||||
FILE_STATUS_IGNORE,
|
||||
FILE_STATUS_SYNC,
|
||||
FILE_STATUS_STAT_ERROR,
|
||||
FILE_STATUS_ERROR,
|
||||
FILE_STATUS_UPDATED,
|
||||
FILE_STATUS_SHARED
|
||||
};
|
||||
|
||||
class Folder : public QObject
|
||||
class OWNCLOUDSYNC_EXPORT Folder : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ SyncFileStatus recursiveFolderStatus(Folder *folder, const QString& fileName )
|
|||
|
||||
const QStringList dirEntries = dir.entryList( QDir::AllEntries | QDir::NoDotAndDotDot );
|
||||
|
||||
SyncFileStatus result = FILE_STATUS_SYNC;
|
||||
SyncFileStatus result(SyncFileStatus::STATUS_SYNC);
|
||||
|
||||
foreach( const QString entry, dirEntries ) {
|
||||
QFileInfo fi(entry);
|
||||
|
@ -88,10 +88,10 @@ SyncFileStatus recursiveFolderStatus(Folder *folder, const QString& fileName )
|
|||
sfs = fileStatus(folder, fs );
|
||||
}
|
||||
|
||||
if( sfs == FILE_STATUS_STAT_ERROR || sfs == FILE_STATUS_ERROR ) {
|
||||
return FILE_STATUS_ERROR;
|
||||
} else if( sfs == FILE_STATUS_EVAL || sfs == FILE_STATUS_NEW) {
|
||||
result = FILE_STATUS_EVAL;
|
||||
if( sfs.tag() == SyncFileStatus::STATUS_STAT_ERROR || sfs.tag() == SyncFileStatus::STATUS_ERROR ) {
|
||||
return SyncFileStatus::STATUS_ERROR;
|
||||
} else if( sfs.tag() == SyncFileStatus::STATUS_EVAL || sfs.tag() == SyncFileStatus::STATUS_NEW) {
|
||||
result.set(SyncFileStatus::STATUS_EVAL);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
@ -112,12 +112,12 @@ SyncFileStatus fileStatus(Folder *folder, const QString& fileName )
|
|||
QFileInfo fi(file);
|
||||
|
||||
if( !fi.exists() ) {
|
||||
return FILE_STATUS_STAT_ERROR;
|
||||
return SyncFileStatus(SyncFileStatus::STATUS_STAT_ERROR);
|
||||
}
|
||||
|
||||
// file is ignored?
|
||||
if( fi.isSymLink() ) {
|
||||
return FILE_STATUS_IGNORE;
|
||||
return SyncFileStatus(SyncFileStatus::STATUS_IGNORE);
|
||||
}
|
||||
int type = CSYNC_FTW_TYPE_FILE;
|
||||
if( fi.isDir() ) {
|
||||
|
@ -126,28 +126,28 @@ SyncFileStatus fileStatus(Folder *folder, const QString& fileName )
|
|||
|
||||
CSYNC_EXCLUDE_TYPE excl = csync_excluded(folder->csyncContext(), file.toUtf8(), type);
|
||||
if( excl != CSYNC_NOT_EXCLUDED ) {
|
||||
return FILE_STATUS_IGNORE;
|
||||
return SyncFileStatus(SyncFileStatus::STATUS_IGNORE);
|
||||
}
|
||||
|
||||
SyncFileStatus stat = FILE_STATUS_NONE;
|
||||
SyncJournalFileRecord rec = folder->journalDb()->getFileRecord(fileName);
|
||||
if( !rec.isValid() ) {
|
||||
return FILE_STATUS_NEW;
|
||||
return SyncFileStatus(SyncFileStatus::STATUS_NEW);
|
||||
}
|
||||
|
||||
SyncFileStatus stat(SyncFileStatus::STATUS_NONE);
|
||||
if( type == CSYNC_FTW_TYPE_DIR ) {
|
||||
// compute recursive status of the directory
|
||||
stat = recursiveFolderStatus( folder, fileName );
|
||||
} else if(fi.lastModified() != rec._modtime ) {
|
||||
// file was locally modified.
|
||||
stat = FILE_STATUS_EVAL;
|
||||
stat.set(SyncFileStatus::STATUS_EVAL);
|
||||
} else {
|
||||
stat = FILE_STATUS_SYNC;
|
||||
stat.set(SyncFileStatus::STATUS_SYNC);
|
||||
}
|
||||
|
||||
if (rec._remotePerm.contains("S")) {
|
||||
// FIXME! that should be an additional flag
|
||||
stat = FILE_STATUS_SHARED;
|
||||
stat.setSharedWithMe(true);
|
||||
}
|
||||
|
||||
return stat;
|
||||
|
@ -294,44 +294,16 @@ void SocketApi::command_RETRIEVE_FILE_STATUS(const QString& argument, QLocalSock
|
|||
|
||||
QString statusString;
|
||||
|
||||
Folder* folder = FolderMan::instance()->folderForPath( argument );
|
||||
// this can happen in offline mode e.g.: nothing to worry about
|
||||
if (!folder) {
|
||||
Folder* syncFolder = FolderMan::instance()->folderForPath( argument );
|
||||
if (!syncFolder) {
|
||||
// this can happen in offline mode e.g.: nothing to worry about
|
||||
DEBUG << "folder offline or not watched:" << argument;
|
||||
statusString = QLatin1String("NOP");
|
||||
}
|
||||
} else {
|
||||
const QString file = argument.mid(syncFolder->path().length());
|
||||
SyncFileStatus fileStatus = SocketApiHelper::fileStatus(syncFolder, file);
|
||||
|
||||
if( statusString.isEmpty() ) {
|
||||
SyncFileStatus fileStatus = SocketApiHelper::fileStatus(folder, argument.mid(folder->path().length()) );
|
||||
|
||||
switch(fileStatus)
|
||||
{
|
||||
case FILE_STATUS_NONE:
|
||||
statusString = QLatin1String("NONE");
|
||||
break;
|
||||
case FILE_STATUS_EVAL:
|
||||
case FILE_STATUS_NEW:
|
||||
statusString = QLatin1String("NEED_SYNC");
|
||||
break;
|
||||
case FILE_STATUS_IGNORE:
|
||||
statusString = QLatin1String("IGNORE");
|
||||
break;
|
||||
case FILE_STATUS_SYNC:
|
||||
case FILE_STATUS_UPDATED:
|
||||
statusString = QLatin1String("OK");
|
||||
break;
|
||||
case FILE_STATUS_STAT_ERROR:
|
||||
case FILE_STATUS_ERROR:
|
||||
statusString = QLatin1String("ERROR");
|
||||
break;
|
||||
case FILE_STATUS_SHARED:
|
||||
statusString = QLatin1String("SHARED");
|
||||
break;
|
||||
default:
|
||||
qWarning() << "This status should not be there" << fileStatus;
|
||||
Q_ASSERT(false);
|
||||
statusString = QLatin1String("NONE");
|
||||
}
|
||||
statusString = fileStatus.toSocketAPIString();
|
||||
}
|
||||
|
||||
QString message = QLatin1String("STATUS:")+statusString+QLatin1Char(':')+argument;
|
||||
|
|
87
src/mirall/syncfilestatus.cpp
Normal file
87
src/mirall/syncfilestatus.cpp
Normal file
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include "mirall/syncfilestatus.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
namespace Mirall {
|
||||
SyncFileStatus::SyncFileStatus()
|
||||
:_tag(STATUS_NONE), _sharedWithMe(false)
|
||||
{
|
||||
}
|
||||
|
||||
SyncFileStatus::SyncFileStatus(SyncFileStatusTag tag)
|
||||
:_tag(tag), _sharedWithMe(false)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void SyncFileStatus::set(SyncFileStatusTag tag)
|
||||
{
|
||||
_tag = tag;
|
||||
}
|
||||
|
||||
SyncFileStatus::SyncFileStatusTag SyncFileStatus::tag()
|
||||
{
|
||||
return _tag;
|
||||
}
|
||||
|
||||
void SyncFileStatus::setSharedWithMe(bool isShared)
|
||||
{
|
||||
_sharedWithMe = isShared;
|
||||
}
|
||||
|
||||
bool SyncFileStatus::sharedWithMe()
|
||||
{
|
||||
return _sharedWithMe;
|
||||
}
|
||||
|
||||
QString SyncFileStatus::toSocketAPIString() const
|
||||
{
|
||||
QString statusString;
|
||||
|
||||
switch(_tag)
|
||||
{
|
||||
case STATUS_NONE:
|
||||
statusString = QLatin1String("NONE");
|
||||
break;
|
||||
case STATUS_EVAL:
|
||||
statusString = QLatin1String("SYNC");
|
||||
break;
|
||||
case STATUS_NEW:
|
||||
statusString = QLatin1String("NEW");
|
||||
break;
|
||||
case STATUS_IGNORE:
|
||||
statusString = QLatin1String("IGNORE");
|
||||
break;
|
||||
case STATUS_SYNC:
|
||||
case STATUS_UPDATED:
|
||||
statusString = QLatin1String("OK");
|
||||
break;
|
||||
case STATUS_STAT_ERROR:
|
||||
case STATUS_ERROR:
|
||||
statusString = QLatin1String("ERROR");
|
||||
break;
|
||||
default:
|
||||
qWarning() << "This status should not be here:" << _tag;
|
||||
Q_ASSERT(false);
|
||||
statusString = QLatin1String("NONE");
|
||||
}
|
||||
if(_sharedWithMe) {
|
||||
statusString += QLatin1String("+SWM");
|
||||
}
|
||||
|
||||
return statusString;
|
||||
}
|
||||
}
|
56
src/mirall/syncfilestatus.h
Normal file
56
src/mirall/syncfilestatus.h
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#ifndef SYNCFILESTATUS_H
|
||||
#define SYNCFILESTATUS_H
|
||||
|
||||
#include <QString>
|
||||
|
||||
namespace Mirall {
|
||||
|
||||
class SyncFileStatus
|
||||
{
|
||||
public:
|
||||
enum SyncFileStatusTag {
|
||||
STATUS_NONE,
|
||||
STATUS_EVAL,
|
||||
STATUS_REMOVE,
|
||||
STATUS_RENAME,
|
||||
STATUS_MOVE,
|
||||
STATUS_NEW,
|
||||
STATUS_CONFLICT,
|
||||
STATUS_IGNORE,
|
||||
STATUS_SYNC,
|
||||
STATUS_STAT_ERROR,
|
||||
STATUS_ERROR,
|
||||
STATUS_UPDATED
|
||||
};
|
||||
|
||||
SyncFileStatus();
|
||||
SyncFileStatus(SyncFileStatusTag);
|
||||
|
||||
void set(SyncFileStatusTag tag);
|
||||
SyncFileStatusTag tag();
|
||||
|
||||
void setSharedWithMe( bool isShared );
|
||||
bool sharedWithMe();
|
||||
|
||||
QString toSocketAPIString() const;
|
||||
private:
|
||||
SyncFileStatusTag _tag;
|
||||
bool _sharedWithMe;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif // SYNCFILESTATUS_H
|
Loading…
Reference in a new issue