Minor improvements

Signed-off-by: Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
This commit is contained in:
Dominique Fuchs 2020-01-13 11:46:49 +01:00
parent 1ebcd3a0fb
commit 96a74d9ef0
3 changed files with 94 additions and 58 deletions

View file

@ -33,7 +33,7 @@ namespace OCC {
Q_LOGGING_CATEGORY(lcActivity, "nextcloud.gui.activity", QtInfoMsg)
ActivityListModel::ActivityListModel(AccountState *accountState, QObject* parent)
ActivityListModel::ActivityListModel(AccountState *accountState, QObject *parent)
: QAbstractListModel()
, _accountState(accountState)
{
@ -42,7 +42,9 @@ ActivityListModel::ActivityListModel(AccountState *accountState, QObject* parent
QHash<int, QByteArray> ActivityListModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[DisplayPathRole] = "displaypath";
roles[PathRole] = "path";
roles[LinkRole] = "link";
roles[MessageRole] = "message";
roles[ActionRole] = "type";
roles[ActionIconRole] = "icon";
@ -65,18 +67,32 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
QStringList list;
switch (role) {
case PathRole:
if(!a._file.isEmpty()){
case DisplayPathRole:
if (!a._file.isEmpty()) {
auto folder = FolderMan::instance()->folder(a._folder);
QString relPath(a._file);
if(folder) relPath.prepend(folder->remotePath());
if (folder) {
relPath.prepend(folder->remotePath());
}
list = FolderMan::instance()->findFileInLocalFolders(relPath, ast->account());
if (list.count() > 0) {
return list.at(0);
}
}
return QString();
case PathRole:
if (!a._file.isEmpty()) {
auto folder = FolderMan::instance()->folder(a._folder);
QString relPath(a._file);
if (folder)
relPath.prepend(folder->remotePath());
list = FolderMan::instance()->findFileInLocalFolders(relPath, ast->account());
if (list.count() > 0) {
QString path = "file:///" + QString(list.at(0));
return QUrl(path);
}
// File does not exist anymore? Let's try to open its path
if(QFileInfo(relPath).exists()) {
if (QFileInfo(relPath).exists()) {
list = FolderMan::instance()->findFileInLocalFolders(QFileInfo(relPath).path(), ast->account());
if (list.count() > 0) {
return QVariant(list.at(0));
@ -84,7 +100,7 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
}
}
return QString();
case ActionsLinksRole:{
case ActionsLinksRole: {
QList<QVariant> customList;
foreach (ActivityLink customItem, a._links) {
QVariant customVariant;
@ -93,23 +109,23 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
}
return customList;
}
case ActionIconRole:{
if(a._type == Activity::NotificationType){
case ActionIconRole: {
if (a._type == Activity::NotificationType) {
return "qrc:///client/resources/bell.svg";
} else if(a._type == Activity::SyncResultType){
} else if (a._type == Activity::SyncResultType) {
return "qrc:///client/resources/state-error.svg";
} else if(a._type == Activity::SyncFileItemType){
if(a._status == SyncFileItem::NormalError
} else if (a._type == Activity::SyncFileItemType) {
if (a._status == SyncFileItem::NormalError
|| a._status == SyncFileItem::FatalError
|| a._status == SyncFileItem::DetailError
|| a._status == SyncFileItem::BlacklistedError) {
return "qrc:///client/resources/state-error.svg";
} else if(a._status == SyncFileItem::SoftError
} else if (a._status == SyncFileItem::SoftError
|| a._status == SyncFileItem::Conflict
|| a._status == SyncFileItem::Restoration
|| a._status == SyncFileItem::FileLocked){
|| a._status == SyncFileItem::FileLocked) {
return "qrc:///client/resources/state-warning.svg";
} else if(a._status == SyncFileItem::FileIgnored){
} else if (a._status == SyncFileItem::FileIgnored) {
return "qrc:///client/resources/state-info.svg";
} else {
return "qrc:///client/resources/state-sync.svg";
@ -120,7 +136,7 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
}
case ObjectTypeRole:
return a._objectType;
case ActionRole:{
case ActionRole: {
switch (a._type) {
case Activity::ActivityType:
return "Activity";
@ -141,8 +157,13 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
return QString("No description available.");
}
return a._message;
case LinkRole:
case LinkRole: {
if (a._link.isEmpty()) {
return "";
} else {
return a._link;
}
}
case AccountRole:
return a._accName;
case PointInTimeRole:
@ -231,76 +252,86 @@ void ActivityListModel::slotActivitiesReceived(const QJsonDocument &json, int st
combineActivityLists();
}
void ActivityListModel::addErrorToActivityList(Activity activity) {
void ActivityListModel::addErrorToActivityList(Activity activity)
{
qCInfo(lcActivity) << "Error successfully added to the notification list: " << activity._subject;
_notificationErrorsLists.prepend(activity);
combineActivityLists();
}
void ActivityListModel::addIgnoredFileToList(Activity newActivity) {
void ActivityListModel::addIgnoredFileToList(Activity newActivity)
{
qCInfo(lcActivity) << "First checking for duplicates then add file to the notification list of ignored files: " << newActivity._file;
bool duplicate = false;
if(_listOfIgnoredFiles.size() == 0){
if (_listOfIgnoredFiles.size() == 0) {
_notificationIgnoredFiles = newActivity;
_notificationIgnoredFiles._subject = tr("Files from the ignore list as well as symbolic links are not synced. This includes:");
_listOfIgnoredFiles.append(newActivity);
return;
}
foreach(Activity activity, _listOfIgnoredFiles){
if(activity._file == newActivity._file){
foreach (Activity activity, _listOfIgnoredFiles) {
if (activity._file == newActivity._file) {
duplicate = true;
break;
}
}
if(!duplicate){
if (!duplicate) {
_notificationIgnoredFiles._message.append(", " + newActivity._file);
}
}
void ActivityListModel::addNotificationToActivityList(Activity activity) {
void ActivityListModel::addNotificationToActivityList(Activity activity)
{
qCInfo(lcActivity) << "Notification successfully added to the notification list: " << activity._subject;
_notificationLists.prepend(activity);
combineActivityLists();
}
void ActivityListModel::clearNotifications() {
void ActivityListModel::clearNotifications()
{
qCInfo(lcActivity) << "Clear the notifications";
_notificationLists.clear();
combineActivityLists();
}
void ActivityListModel::removeActivityFromActivityList(int row) {
void ActivityListModel::removeActivityFromActivityList(int row)
{
Activity activity = _finalList.at(row);
removeActivityFromActivityList(activity);
combineActivityLists();
}
void ActivityListModel::addSyncFileItemToActivityList(Activity activity) {
void ActivityListModel::addSyncFileItemToActivityList(Activity activity)
{
qCInfo(lcActivity) << "Successfully added to the activity list: " << activity._subject;
_syncFileItemLists.prepend(activity);
combineActivityLists();
}
void ActivityListModel::removeActivityFromActivityList(Activity activity) {
void ActivityListModel::removeActivityFromActivityList(Activity activity)
{
qCInfo(lcActivity) << "Activity/Notification/Error successfully dismissed: " << activity._subject;
qCInfo(lcActivity) << "Trying to remove Activity/Notification/Error from view... ";
int index = -1;
if(activity._type == Activity::ActivityType){
if (activity._type == Activity::ActivityType) {
index = _activityLists.indexOf(activity);
if(index != -1) _activityLists.removeAt(index);
} else if(activity._type == Activity::NotificationType){
if (index != -1)
_activityLists.removeAt(index);
} else if (activity._type == Activity::NotificationType) {
index = _notificationLists.indexOf(activity);
if(index != -1) _notificationLists.removeAt(index);
if (index != -1)
_notificationLists.removeAt(index);
} else {
index = _notificationErrorsLists.indexOf(activity);
if(index != -1) _notificationErrorsLists.removeAt(index);
if (index != -1)
_notificationErrorsLists.removeAt(index);
}
if(index != -1){
if (index != -1) {
qCInfo(lcActivity) << "Activity/Notification/Error successfully removed from the list.";
qCInfo(lcActivity) << "Updating Activity/Notification/Error view.";
combineActivityLists();
@ -311,24 +342,24 @@ void ActivityListModel::combineActivityLists()
{
ActivityList resultList;
if(_notificationErrorsLists.count() > 0) {
if (_notificationErrorsLists.count() > 0) {
std::sort(_notificationErrorsLists.begin(), _notificationErrorsLists.end());
resultList.append(_notificationErrorsLists);
}
if(_listOfIgnoredFiles.size() > 0)
if (_listOfIgnoredFiles.size() > 0)
resultList.append(_notificationIgnoredFiles);
if(_notificationLists.count() > 0) {
if (_notificationLists.count() > 0) {
std::sort(_notificationLists.begin(), _notificationLists.end());
resultList.append(_notificationLists);
}
if(_syncFileItemLists.count() > 0) {
if (_syncFileItemLists.count() > 0) {
std::sort(_syncFileItemLists.begin(), _syncFileItemLists.end());
resultList.append(_syncFileItemLists);
}
if(_activityLists.count() > 0) {
if (_activityLists.count() > 0) {
std::sort(_activityLists.begin(), _activityLists.end());
resultList.append(_activityLists);
}
@ -342,7 +373,8 @@ void ActivityListModel::combineActivityLists()
endInsertRows();
}
bool ActivityListModel::canFetchActivities() const {
bool ActivityListModel::canFetchActivities() const
{
return _accountState->isConnected() && _accountState->account()->capabilities().hasActivities();
}

View file

@ -47,6 +47,7 @@ public:
ActionTextRole,
ActionRole,
MessageRole,
DisplayPathRole,
PathRole,
LinkRole,
PointInTimeRole,

View file

@ -61,7 +61,6 @@ Window {
trayWindow.setX( systrayBackend.calcTrayWindowX());
trayWindow.setY( systrayBackend.calcTrayWindowY());
systrayBackend.setOpened();
userModelBackend.fetchCurrentActivityModel();
}
onHideWindow: {
trayWindow.hide();
@ -470,7 +469,7 @@ Window {
}
Column {
id: activityTextColumn
Layout.leftMargin: 6
Layout.leftMargin: 4
spacing: 4
Layout.alignment: Qt.AlignLeft
Text {
@ -482,7 +481,7 @@ Window {
}
Text {
id: activityTextInfo
text: path
text: displaypath
width: 220
elide: Text.ElideRight
font.pointSize: 8
@ -499,13 +498,12 @@ Window {
Layout.alignment: Qt.AlignRight
flat: true
hoverEnabled: false
visible: (path === "") ? false : true
visible: (path !== "") ? true : false
display: AbstractButton.IconOnly
icon.source: "qrc:///client/resources/files.svg"
icon.color: "transparent"
onClicked:
{
onClicked: {
Qt.openUrlExternally(path)
}
}
@ -515,14 +513,19 @@ Window {
Layout.alignment: Qt.AlignRight
flat: true
hoverEnabled: false
visible: (link !== "") ? true : false
display: AbstractButton.IconOnly
icon.source: "qrc:///client/resources/public.svg"
icon.color: "transparent"
onClicked: {
Qt.openUrlExternally(link)
}
}
}
populate: Transition {
NumberAnimation { properties: "y"; from: -60; duration: 100; easing.type: Easing.Linear }
// prevent animations on initial list population
}
add: Transition {