From 3e30e23709d9d08d976f1a2247f8db8f89c202a7 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Mon, 19 Nov 2018 06:18:54 +0000 Subject: [PATCH 01/24] Add Shared checkbox. --- src/item_model.cpp | 4 ++-- src/remote_widget.cpp | 8 ++++++++ src/remote_widget.ui | 12 +++++++++++- src/transfer_dialog.cpp | 2 ++ src/utils.cpp | 10 ++++++++++ src/utils.h | 2 ++ 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/item_model.cpp b/src/item_model.cpp index 676970f3..fbec6a80 100644 --- a/src/item_model.cpp +++ b/src/item_model.cpp @@ -618,8 +618,8 @@ void ItemModel::load(const QPersistentModelIndex& parentIndex, Item* parent) else if (path.at(0) != '/') { path = "/" + path; } - lsd->start(GetRclone(), QStringList() << "lsd" << GetRcloneConf() << mRemote + ":" + path, QIODevice::ReadOnly); - lsl->start(GetRclone(), QStringList() << "lsl" << GetRcloneConf() << "--max-depth" << "1" << mRemote + ":" + path, QIODevice::ReadOnly); + lsd->start(GetRclone(), QStringList() << "lsd" << GetRcloneConf() << GetDriveSharedWithMe() << mRemote + ":" + path, QIODevice::ReadOnly); + lsl->start(GetRclone(), QStringList() << "lsl" << GetRcloneConf() << GetDriveSharedWithMe() << "--max-depth" << "1" << mRemote + ":" + path, QIODevice::ReadOnly); } void ItemModel::sortRecursive(Item* item, const ItemSorter& sorter) diff --git a/src/remote_widget.cpp b/src/remote_widget.cpp index f5796555..6c607cd1 100644 --- a/src/remote_widget.cpp +++ b/src/remote_widget.cpp @@ -18,6 +18,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL #endif auto settings = GetSettings(); ui.tree->setAlternatingRowColors(settings->value("Settings/rowColors", false).toBool()); + ui.checkBoxShared->setChecked(settings->value("Settings/driveShared", false).toBool()); QStyle* style = QApplication::style(); ui.refresh->setIcon(style->standardIcon(QStyle::SP_BrowserReload)); @@ -268,6 +269,13 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL emit addStream(remote + ":" + path, stream); }); + QObject::connect(ui.checkBoxShared, &QCheckBox::toggled, this, [=]() { + auto settings = GetSettings(); + bool driveShared = settings->value("Settings/driveShared", true).toBool(); + settings->setValue("Settings/driveShared", !driveShared); + + }); + QObject::connect(ui.upload, &QAction::triggered, this, [=]() { QModelIndex index = ui.tree->selectionModel()->selectedRows().front(); diff --git a/src/remote_widget.ui b/src/remote_widget.ui index a66d58fe..fd78e8ec 100644 --- a/src/remote_widget.ui +++ b/src/remote_widget.ui @@ -6,7 +6,7 @@ 0 0 - 784 + 867 552 @@ -161,6 +161,16 @@ + + + + Shared with Me (Google Drive) + + + S&hared + + + diff --git a/src/transfer_dialog.cpp b/src/transfer_dialog.cpp index cddc4b4b..97c5d21f 100644 --- a/src/transfer_dialog.cpp +++ b/src/transfer_dialog.cpp @@ -272,6 +272,8 @@ QStringList TransferDialog::getOptions() const } } + list << GetDriveSharedWithMe(); + list << "--stats" << "1s"; list << ui.textSource->text(); diff --git a/src/utils.cpp b/src/utils.cpp index 50f18453..0b319b2c 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -181,3 +181,13 @@ void SetRclonePassword(const QString& rclonePassword) { gRclonePassword = rclonePassword; } + +QStringList GetDriveSharedWithMe() { + auto settings = GetSettings(); + bool driveShared = settings->value("Settings/driveShared", false).toBool(); + QStringList driveSharedOption; + if (driveShared) { + driveSharedOption << "--drive-shared-with-me"; + } + return driveSharedOption; +} diff --git a/src/utils.h b/src/utils.h index 28130ccf..35fdd13c 100644 --- a/src/utils.h +++ b/src/utils.h @@ -15,3 +15,5 @@ void SetRcloneConf(const QString& rcloneConf); void UseRclonePassword(QProcess* process); void SetRclonePassword(const QString& rclonePassword); + +QStringList GetDriveSharedWithMe(); From 90e7b655d823f3b7941f1f8a640f7b5f33ad7286 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Mon, 19 Nov 2018 07:12:46 +0000 Subject: [PATCH 02/24] Add GetDriveSharedWithMe() calls. --- src/remote_widget.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/remote_widget.cpp b/src/remote_widget.cpp index 6c607cd1..bf85f43e 100644 --- a/src/remote_widget.cpp +++ b/src/remote_widget.cpp @@ -130,7 +130,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL QProcess process; UseRclonePassword(&process); process.setProgram(GetRclone()); - process.setArguments(QStringList() << "mkdir" << GetRcloneConf() << remote + ":" + folder); + process.setArguments(QStringList() << "mkdir" << GetRcloneConf() << GetDriveSharedWithMe() << remote + ":" + folder); process.setReadChannelMode(QProcess::MergedChannels); ProgressDialog progress("New Folder", "Creating...", folderMsg, &process, this); @@ -158,6 +158,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL process.setArguments(QStringList() << "moveto" << GetRcloneConf() + << GetDriveSharedWithMe() << remote + ":" + path << remote + ":" + model->path(index.parent()).filePath(name)); process.setReadChannelMode(QProcess::MergedChannels); @@ -187,6 +188,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL process.setArguments(QStringList() << "move" << GetRcloneConf() + << GetDriveSharedWithMe() << remote + ":" + path << remote + ":" + name); process.setReadChannelMode(QProcess::MergedChannels); @@ -212,7 +214,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL QProcess process; UseRclonePassword(&process); process.setProgram(GetRclone()); - process.setArguments(QStringList() << (model->isFolder(index) ? "purge" : "delete") << GetRcloneConf() << remote + ":" + path); + process.setArguments(QStringList() << (model->isFolder(index) ? "purge" : "delete") << GetRcloneConf() << GetDriveSharedWithMe() << remote + ":" + path); process.setReadChannelMode(QProcess::MergedChannels); ProgressDialog progress("Delete", "Deleting...", pathMsg, &process, this); @@ -322,7 +324,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL QProcess process; UseRclonePassword(&process); process.setProgram(GetRclone()); - process.setArguments(QStringList() << "size" << GetRcloneConf() << remote + ":" + path); + process.setArguments(QStringList() << "size" << GetRcloneConf() << GetDriveSharedWithMe() << remote + ":" + path); process.setReadChannelMode(QProcess::MergedChannels); ProgressDialog progress("Get Size", "Calculating...", pathMsg, &process, this, false); @@ -355,7 +357,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL QProcess process; UseRclonePassword(&process); process.setProgram(GetRclone()); - process.setArguments(QStringList() << GetRcloneConf() << e.getOptions()); + process.setArguments(QStringList() << GetRcloneConf() << GetDriveSharedWithMe() << e.getOptions()); process.setReadChannelMode(QProcess::MergedChannels); ProgressDialog progress("Export", "Exporting...", dst, &process, this); From 5a2e6524d615049642a23603bbea166d186a98e9 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 01:08:47 +0000 Subject: [PATCH 03/24] Disable Rename, Move, and Delete buttons if Shared is enabled. --- src/remote_widget.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/remote_widget.cpp b/src/remote_widget.cpp index bf85f43e..74022d68 100644 --- a/src/remote_widget.cpp +++ b/src/remote_widget.cpp @@ -92,9 +92,10 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL else { ui.refresh->setDisabled(false); - ui.rename->setDisabled(topLevel); - ui.move->setDisabled(topLevel); - ui.purge->setDisabled(topLevel); + bool driveShared = ui.checkBoxShared->checkState(); + ui.rename->setDisabled(topLevel || driveShared); + ui.move->setDisabled(topLevel || driveShared); + ui.purge->setDisabled(topLevel || driveShared); ui.mount->setDisabled(!isFolder); ui.stream->setDisabled(isFolder); path = model->path(index); From a5f9241905c40b4a5639061ddb048720d21eaa5c Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Thu, 30 Nov 2017 03:14:20 +0100 Subject: [PATCH 04/24] Update .appveyor.yml --- .appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.appveyor.yml b/.appveyor.yml index ee82e927..151cfe48 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -9,5 +9,7 @@ build_script: - cd build - cmake -G "Visual Studio 12 Win64" -DCMAKE_PREFIX_PATH=C:\Qt\5.8\msvc2013_64 .. - cmake --build . +artifacts: +- path: build/build/Debug/RcloneBrowser.exe test: off deploy: off From 0df60b3a5afead7b40c8e6dad8687d0c268a0d50 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Thu, 30 Nov 2017 03:18:12 +0100 Subject: [PATCH 05/24] Update .appveyor.yml --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index 151cfe48..cb4a73fd 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -10,6 +10,6 @@ build_script: - cmake -G "Visual Studio 12 Win64" -DCMAKE_PREFIX_PATH=C:\Qt\5.8\msvc2013_64 .. - cmake --build . artifacts: -- path: build/build/Debug/RcloneBrowser.exe +- path: build/build/Debug test: off deploy: off From ae1320a193a4a590d1f28c4ddb340339d772d2ba Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Thu, 30 Nov 2017 03:32:30 +0100 Subject: [PATCH 06/24] Update .appveyor.yml --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index cb4a73fd..f866bd87 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -10,6 +10,6 @@ build_script: - cmake -G "Visual Studio 12 Win64" -DCMAKE_PREFIX_PATH=C:\Qt\5.8\msvc2013_64 .. - cmake --build . artifacts: -- path: build/build/Debug +- path: build test: off deploy: off From 1a5bb5343f53707ec61061b165ec9ecffe61f868 Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Thu, 30 Nov 2017 03:36:51 +0100 Subject: [PATCH 07/24] Update .appveyor.yml --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index f866bd87..76454e4c 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -7,7 +7,7 @@ clone_depth: 1 build_script: - mkdir build - cd build - - cmake -G "Visual Studio 12 Win64" -DCMAKE_PREFIX_PATH=C:\Qt\5.8\msvc2013_64 .. + - cmake -G "Visual Studio 12 Win64" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=C:\Qt\5.8\msvc2013_64 .. - cmake --build . artifacts: - path: build From 70abc4286304d6403e49c9c8371b16ed7072a63a Mon Sep 17 00:00:00 2001 From: LORDofDOOM Date: Thu, 30 Nov 2017 03:48:52 +0100 Subject: [PATCH 08/24] Update .appveyor.yml --- .appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 76454e4c..007756f6 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -7,8 +7,8 @@ clone_depth: 1 build_script: - mkdir build - cd build - - cmake -G "Visual Studio 12 Win64" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=C:\Qt\5.8\msvc2013_64 .. - - cmake --build . + - cmake -G "Visual Studio 12 Win64" -DCMAKE_CONFIGURATION_TYPES="Release" -DCMAKE_PREFIX_PATH=C:\Qt\5.8\msvc2013_64 .. + - cmake --build . --config Release artifacts: - path: build test: off From 397a2d1895d2f9043eb953790c961a2883bab874 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 03:02:31 +0000 Subject: [PATCH 09/24] Use VS2013 AppVeyor image. --- .appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.appveyor.yml b/.appveyor.yml index 007756f6..eb6e590f 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,4 +1,5 @@ version: '#{build}' +image: 'Visual Studio 2013' branches: only: - master From 748ff1206e05ea014035e5c38ed5a641b2865dcb Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 03:09:43 +0000 Subject: [PATCH 10/24] Only package the exe as an artifact. --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index eb6e590f..bc27c9cc 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -11,6 +11,6 @@ build_script: - cmake -G "Visual Studio 12 Win64" -DCMAKE_CONFIGURATION_TYPES="Release" -DCMAKE_PREFIX_PATH=C:\Qt\5.8\msvc2013_64 .. - cmake --build . --config Release artifacts: -- path: build +- path: build/build/Release/RcloneBrowser.exe test: off deploy: off From 07f009b9c82f341e302bbb74ba840535a085a31b Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 03:35:37 +0000 Subject: [PATCH 11/24] Disable Upload button for Shared. --- src/remote_widget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/remote_widget.cpp b/src/remote_widget.cpp index 74022d68..f84e1def 100644 --- a/src/remote_widget.cpp +++ b/src/remote_widget.cpp @@ -96,6 +96,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL ui.rename->setDisabled(topLevel || driveShared); ui.move->setDisabled(topLevel || driveShared); ui.purge->setDisabled(topLevel || driveShared); + ui.upload->setDisabled(driveShared); ui.mount->setDisabled(!isFolder); ui.stream->setDisabled(isFolder); path = model->path(index); From 9335dc074bdb21efcfa384422842c35036d4ca88 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 07:42:53 +0000 Subject: [PATCH 12/24] Add Mega icon. --- src/images/mega.png | Bin 0 -> 4242 bytes src/resources.qrc | 1 + 2 files changed, 1 insertion(+) create mode 100644 src/images/mega.png diff --git a/src/images/mega.png b/src/images/mega.png new file mode 100644 index 0000000000000000000000000000000000000000..0007bcec2a986a9e942dccde378182d34299f904 GIT binary patch literal 4242 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/google_cloud_storage.png images/hubic.png images/local.png + images/mega.png images/onedrive.png images/s3.png images/swift.png From eb6d08048ff38d459e1d9a2ec46e6af57446b311 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 08:13:41 +0000 Subject: [PATCH 13/24] Add event for toggling Shared. --- src/remote_widget.cpp | 9 +++++---- src/remote_widget.ui | 9 +++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/remote_widget.cpp b/src/remote_widget.cpp index f84e1def..609caef9 100644 --- a/src/remote_widget.cpp +++ b/src/remote_widget.cpp @@ -273,11 +273,12 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL emit addStream(remote + ":" + path, stream); }); - QObject::connect(ui.checkBoxShared, &QCheckBox::toggled, this, [=]() { - auto settings = GetSettings(); - bool driveShared = settings->value("Settings/driveShared", true).toBool(); - settings->setValue("Settings/driveShared", !driveShared); + QObject::connect(ui.checkBoxShared, &QCheckBox::toggled, ui.shared, &QAction::toggled); + QObject::connect(ui.shared, &QAction::toggled, this, [=](const bool checked) { + auto settings = GetSettings(); + settings->setValue("Settings/driveShared", checked); + ui.checkBoxShared->setChecked(checked); }); QObject::connect(ui.upload, &QAction::triggered, this, [=]() diff --git a/src/remote_widget.ui b/src/remote_widget.ui index fd78e8ec..927c1355 100644 --- a/src/remote_widget.ui +++ b/src/remote_widget.ui @@ -6,7 +6,7 @@ 0 0 - 867 + 879 552 @@ -167,7 +167,7 @@ Shared with Me (Google Drive) - S&hared + Shared @@ -300,6 +300,11 @@ M&ove + + + Shared + + buttonRefresh From f3c38d42d2fcc35c400de5c6915e12cd7d30b1fe Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 10:24:50 +0000 Subject: [PATCH 14/24] Refresh when Shared is toggled. --- src/remote_widget.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/remote_widget.cpp b/src/remote_widget.cpp index 609caef9..ada59b77 100644 --- a/src/remote_widget.cpp +++ b/src/remote_widget.cpp @@ -275,10 +275,21 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL QObject::connect(ui.checkBoxShared, &QCheckBox::toggled, ui.shared, &QAction::toggled); - QObject::connect(ui.shared, &QAction::toggled, this, [=](const bool checked) { + QObject::connect(ui.shared, &QAction::toggled, this, [=](const bool checked) + { auto settings = GetSettings(); settings->setValue("Settings/driveShared", checked); ui.checkBoxShared->setChecked(checked); + + QModelIndex index = ui.tree->selectionModel()->selectedRows().front(); + QModelIndex top = index; + while (!model->isTopLevel(top)) + { + top = top.parent(); + } + ui.tree->selectionModel()->clear(); + ui.tree->selectionModel()->select(top, QItemSelectionModel::Select); + model->refresh(top); }); QObject::connect(ui.upload, &QAction::triggered, this, [=]() From e8e6c01bac89daeb0ce99d78787fd94c5f5554b8 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 09:00:14 +0000 Subject: [PATCH 15/24] Add Show Hidden preference box. --- src/main_window.cpp | 1 + src/preferences_dialog.cpp | 6 ++++++ src/preferences_dialog.h | 1 + src/preferences_dialog.ui | 13 ++++++++++--- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main_window.cpp b/src/main_window.cpp index 13b75203..e41faf5c 100644 --- a/src/main_window.cpp +++ b/src/main_window.cpp @@ -48,6 +48,7 @@ MainWindow::MainWindow() settings->setValue("Settings/showFolderIcons", dialog.getShowFolderIcons()); settings->setValue("Settings/showFileIcons", dialog.getShowFileIcons()); settings->setValue("Settings/rowColors", dialog.getRowColors()); + settings->setValue("Settings/showHidden", dialog.getShowHidden()); SetRclone(dialog.getRclone()); SetRcloneConf(dialog.getRcloneConf()); mFirstTime = true; diff --git a/src/preferences_dialog.cpp b/src/preferences_dialog.cpp index abdcb42b..ecc5f597 100644 --- a/src/preferences_dialog.cpp +++ b/src/preferences_dialog.cpp @@ -62,6 +62,7 @@ PreferencesDialog::PreferencesDialog(QWidget* parent) } ui.showFileIcons->setChecked(settings->value("Settings/showFileIcons", true).toBool()); ui.rowColors->setChecked(settings->value("Settings/rowColors", false).toBool()); + ui.showHidden->setChecked(settings->value("Settings/showHidden", true).toBool()); #ifdef Q_OS_WIN32 ui.mount->hide(); @@ -124,3 +125,8 @@ bool PreferencesDialog::getRowColors() const { return ui.rowColors->isChecked(); } + +bool PreferencesDialog::getShowHidden() const +{ + return ui.showHidden->isChecked(); +} diff --git a/src/preferences_dialog.h b/src/preferences_dialog.h index 089dbe29..abbfc852 100644 --- a/src/preferences_dialog.h +++ b/src/preferences_dialog.h @@ -23,6 +23,7 @@ class PreferencesDialog : public QDialog bool getShowFolderIcons() const; bool getShowFileIcons() const; bool getRowColors() const; + bool getShowHidden() const; private: Ui::PreferencesDialog ui; diff --git a/src/preferences_dialog.ui b/src/preferences_dialog.ui index 30d99587..50a9277d 100644 --- a/src/preferences_dialog.ui +++ b/src/preferences_dialog.ui @@ -7,7 +7,7 @@ 0 0 475 - 407 + 547 @@ -128,7 +128,7 @@ User Interface - + Changing these options will require reopening remote tab. @@ -148,7 +148,7 @@ - + Alternating row colors @@ -168,6 +168,13 @@ + + + + Show hidden files and folders + + + From 1fadb15ec4362e50e65eac95782ed75e088f9315 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 11:17:58 +0000 Subject: [PATCH 16/24] Implement Show Hidden preference. --- src/item_model.cpp | 5 +++-- src/utils.cpp | 11 +++++++++++ src/utils.h | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/item_model.cpp b/src/item_model.cpp index fbec6a80..74737a1a 100644 --- a/src/item_model.cpp +++ b/src/item_model.cpp @@ -618,8 +618,9 @@ void ItemModel::load(const QPersistentModelIndex& parentIndex, Item* parent) else if (path.at(0) != '/') { path = "/" + path; } - lsd->start(GetRclone(), QStringList() << "lsd" << GetRcloneConf() << GetDriveSharedWithMe() << mRemote + ":" + path, QIODevice::ReadOnly); - lsl->start(GetRclone(), QStringList() << "lsl" << GetRcloneConf() << GetDriveSharedWithMe() << "--max-depth" << "1" << mRemote + ":" + path, QIODevice::ReadOnly); + + lsd->start(GetRclone(), QStringList() << "lsd" << GetRcloneConf() << GetDriveSharedWithMe() << GetShowHidden() << mRemote + ":" + path, QIODevice::ReadOnly); + lsl->start(GetRclone(), QStringList() << "lsl" << GetRcloneConf() << GetDriveSharedWithMe() << GetShowHidden() << "--max-depth" << "1" << mRemote + ":" + path, QIODevice::ReadOnly); } void ItemModel::sortRecursive(Item* item, const ItemSorter& sorter) diff --git a/src/utils.cpp b/src/utils.cpp index 0b319b2c..9c53ebf5 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -191,3 +191,14 @@ QStringList GetDriveSharedWithMe() { } return driveSharedOption; } + +QStringList GetShowHidden() +{ + auto settings = GetSettings(); + bool showHidden = settings->value("Settings/showHidden", true).toBool(); + QStringList showHiddenOption; + if (!showHidden) { + showHiddenOption << "--exclude" << ".*/**"; + } + return showHiddenOption; +} diff --git a/src/utils.h b/src/utils.h index 35fdd13c..9b7fed6c 100644 --- a/src/utils.h +++ b/src/utils.h @@ -17,3 +17,4 @@ void UseRclonePassword(QProcess* process); void SetRclonePassword(const QString& rclonePassword); QStringList GetDriveSharedWithMe(); +QStringList GetShowHidden(); From f8cebdaf1cf83e7780a68a992258086a81570ca5 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Tue, 20 Nov 2018 11:20:59 +0000 Subject: [PATCH 17/24] Fix crash when toggling Shared due to improper row selection. --- src/remote_widget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/remote_widget.cpp b/src/remote_widget.cpp index ada59b77..7a7e8fb3 100644 --- a/src/remote_widget.cpp +++ b/src/remote_widget.cpp @@ -224,7 +224,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL { QModelIndex parent = index.parent(); QModelIndex next = parent.child(index.row() + 1, 0); - ui.tree->selectionModel()->select(next.isValid() ? next : parent, QItemSelectionModel::SelectCurrent); + ui.tree->selectionModel()->select(next.isValid() ? next : parent, QItemSelectionModel::SelectCurrent| QItemSelectionModel::Rows); model->removeRow(index.row(), parent); } } From 13f545cb9b04fd61c879f372fe82e5ce631c234e Mon Sep 17 00:00:00 2001 From: DinCahill Date: Wed, 21 Nov 2018 00:00:00 +0000 Subject: [PATCH 18/24] Update links and CI badges in README.md. --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 9fa368cf..c3d4f254 100644 --- a/README.md +++ b/README.md @@ -80,21 +80,21 @@ This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. -[1]: https://travis-ci.org/mmozeiko/RcloneBrowser/ -[2]: https://ci.appveyor.com/project/mmozeiko/RcloneBrowser -[3]: https://github.com/mmozeiko/RcloneBrowser/releases -[4]: https://github.com/mmozeiko/RcloneBrowser/releases/latest -[5]: https://github.com/mmozeiko/RcloneBrowser/blob/master/LICENSE +[1]: https://travis-ci.org/DinCahill/RcloneBrowser/ +[2]: https://ci.appveyor.com/project/DinCahill/RcloneBrowser +[3]: https://github.com/DinCahill/RcloneBrowser/releases +[4]: https://github.com/DinCahill/RcloneBrowser/releases/latest +[5]: https://github.com/DinCahill/RcloneBrowser/blob/master/LICENSE [6]: https://mpv.io/ [7]: https://aur.archlinux.org/packages/rclone-browser [8]: https://www.visualstudio.com/en-us/news/releasenotes/vs2013-community-vs [9]: http://www.cmake.org/ [10]: https://www.qt.io/download-open-source/ -[img1]: https://api.travis-ci.org/mmozeiko/RcloneBrowser.svg?branch=master -[img2]: https://ci.appveyor.com/api/projects/status/7s24ixolrk3ueggm/branch/master?svg=true -[img3]: https://img.shields.io/github/downloads/mmozeiko/RcloneBrowser/total.svg?maxAge=3600 -[img4]: https://img.shields.io/github/release/mmozeiko/RcloneBrowser.svg?maxAge=3600 -[img5]: https://img.shields.io/github/license/mmozeiko/RcloneBrowser.svg?maxAge=2592000 +[img1]: https://api.travis-ci.org/DinCahill/RcloneBrowser.svg?branch=master +[img2]: https://ci.appveyor.com/api/projects/status/github/DinCahill/RcloneBrowser?branch=master&svg=true +[img3]: https://img.shields.io/github/downloads/DinCahill/RcloneBrowser/total.svg?maxAge=3600 +[img4]: https://img.shields.io/github/release/DinCahill/RcloneBrowser.svg?maxAge=3600 +[img5]: https://img.shields.io/github/license/DinCahill/RcloneBrowser.svg?maxAge=2592000 [screenshot1]: https://raw.githubusercontent.com/wiki/mmozeiko/RcloneBrowser/screenshot1.png [screenshot2]: https://raw.githubusercontent.com/wiki/mmozeiko/RcloneBrowser/screenshot2.png [screenshot3]: https://raw.githubusercontent.com/wiki/mmozeiko/RcloneBrowser/screenshot3.png From f1742461f5a76bceb766fa0a2484cfe3301759a2 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Thu, 22 Nov 2018 03:07:53 +0000 Subject: [PATCH 19/24] Revert "Merge pull request #3 from fsaimon/master" - Seems fine without it on Windows/Linux. This reverts commit 51c278f6156d05c79c1b9ff2a95d4e02879a5263, reversing changes made to 6594a7d719b330f6db0fa8a05dfc6d0a9113c682. --- src/utils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils.cpp b/src/utils.cpp index 9c53ebf5..ca98b233 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -143,7 +143,7 @@ QStringList GetRcloneConf() { conf = QDir(qApp->applicationDirPath()).filePath(conf); } - return QStringList() << " --config" << conf; + return QStringList() << "--config" << conf; } void SetRcloneConf(const QString& rcloneConf) From dc0a88bb4c2ca792ca23b54fafeebba762f026cf Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Thu, 22 Nov 2018 03:12:08 +0000 Subject: [PATCH 20/24] Revert "Handle changed version output of Rclone 1.38." - Doesn't seem necessary? This reverts commit f7382c9203a293b2bab80ea1cdc1fe46fbc7facc. --- src/main_window.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main_window.cpp b/src/main_window.cpp index e41faf5c..48864bd2 100644 --- a/src/main_window.cpp +++ b/src/main_window.cpp @@ -199,11 +199,6 @@ void MainWindow::rcloneGetVersion() if (code == 0) { QString version = p->readAllStandardOutput().trimmed(); - int lineBreak = version.indexOf('\n'); - if (lineBreak != -1) - { - version.remove(lineBreak, version.length() - lineBreak); - } mStatusMessage->setText(version + " in " + QDir::toNativeSeparators(GetRclone())); rcloneListRemotes(); } From 281add2163b11016f2e0fb8ed3d9713453e13c10 Mon Sep 17 00:00:00 2001 From: DinCahill Date: Thu, 22 Nov 2018 04:34:12 +0000 Subject: [PATCH 21/24] Add Xcode 9.4 to Travis. [skip appveyor] Update Xcode 8.2 to 8.3, as 8.2 is no longer available. --- .travis.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index be8dca61..a227d2e6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,17 @@ matrix: - os: osx language: cpp - osx_image: xcode8.2 + osx_image: xcode8.3 + install: + - brew update + - brew install qt5 + script: + - mkdir build && cd build + - cmake -DCMAKE_PREFIX_PATH=/usr/local/opt/qt5/lib/cmake .. + - cmake --build . + - os: osx + language: cpp + osx_image: xcode9.4 install: - brew update - brew install qt5 From d7299eeff03da249abacc5821d605805bbf698da Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Thu, 22 Nov 2018 05:05:21 +0000 Subject: [PATCH 22/24] Put Shared toggle crashfix in the right place. Oops! --- src/remote_widget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/remote_widget.cpp b/src/remote_widget.cpp index 7a7e8fb3..9ce83469 100644 --- a/src/remote_widget.cpp +++ b/src/remote_widget.cpp @@ -224,7 +224,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL { QModelIndex parent = index.parent(); QModelIndex next = parent.child(index.row() + 1, 0); - ui.tree->selectionModel()->select(next.isValid() ? next : parent, QItemSelectionModel::SelectCurrent| QItemSelectionModel::Rows); + ui.tree->selectionModel()->select(next.isValid() ? next : parent, QItemSelectionModel::SelectCurrent); model->removeRow(index.row(), parent); } } @@ -288,7 +288,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL top = top.parent(); } ui.tree->selectionModel()->clear(); - ui.tree->selectionModel()->select(top, QItemSelectionModel::Select); + ui.tree->selectionModel()->select(top, QItemSelectionModel::Select | QItemSelectionModel::Rows); model->refresh(top); }); From 8f2b5a9649750dfef5e236c89301fe36876e1173 Mon Sep 17 00:00:00 2001 From: Donal Cahill Date: Thu, 22 Nov 2018 06:13:25 +0000 Subject: [PATCH 23/24] Add a Public Link option to the right-click menu. The link doens't have a newline at the end, so you can triple-click to select it. --- src/progress_dialog.cpp | 6 +++++- src/progress_dialog.h | 2 +- src/remote_widget.cpp | 21 +++++++++++++++++++++ src/remote_widget.ui | 5 +++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/progress_dialog.cpp b/src/progress_dialog.cpp index e2ccab57..390bfc5a 100644 --- a/src/progress_dialog.cpp +++ b/src/progress_dialog.cpp @@ -1,6 +1,6 @@ #include "progress_dialog.h" -ProgressDialog::ProgressDialog(const QString& title, const QString& operation, const QString& message, QProcess* process, QWidget* parent, bool close) +ProgressDialog::ProgressDialog(const QString& title, const QString& operation, const QString& message, QProcess* process, QWidget* parent, bool close, bool trim) : QDialog(parent) { ui.setupUi(this); @@ -45,6 +45,10 @@ ProgressDialog::ProgressDialog(const QString& title, const QString& operation, c QObject::connect(process, &QProcess::readyRead, this, [=]() { QString output = process->readAll(); + if (trim) + { + output = output.trimmed(); + } ui.output->appendPlainText(output); emit outputAvailable(output); }); diff --git a/src/progress_dialog.h b/src/progress_dialog.h index b8121246..a8662808 100644 --- a/src/progress_dialog.h +++ b/src/progress_dialog.h @@ -8,7 +8,7 @@ class ProgressDialog : public QDialog Q_OBJECT public: - ProgressDialog(const QString& title, const QString& operation, const QString& message, QProcess* process, QWidget* parent = nullptr, bool close = true); + ProgressDialog(const QString& title, const QString& operation, const QString& message, QProcess* process, QWidget* parent = nullptr, bool close = true, bool trim = false); ~ProgressDialog(); void expand(); diff --git a/src/remote_widget.cpp b/src/remote_widget.cpp index 9ce83469..864c691c 100644 --- a/src/remote_widget.cpp +++ b/src/remote_widget.cpp @@ -33,6 +33,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL ui.download->setIcon(style->standardIcon(QStyle::SP_ArrowDown)); ui.getSize->setIcon(style->standardIcon(QStyle::SP_FileDialogInfoView)); ui.export_->setIcon(style->standardIcon(QStyle::SP_FileDialogDetailedView)); + ui.link->setIcon(style->standardIcon(QStyle::SP_FileLinkIcon)); ui.buttonRefresh->setDefaultAction(ui.refresh); ui.buttonMkdir->setDefaultAction(ui.mkdir); @@ -292,6 +293,25 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL model->refresh(top); }); + QObject::connect(ui.link, &QAction::triggered, this, [=]() + { + QModelIndex index = ui.tree->selectionModel()->selectedRows().front(); + + QString path = model->path(index).path(); + QString pathMsg = isLocal ? QDir::toNativeSeparators(path) : path; + + QProcess process; + UseRclonePassword(&process); + process.setProgram(GetRclone()); + process.setArguments(QStringList() << "link" << GetRcloneConf() << GetDriveSharedWithMe() << remote + ":" + path); + process.setReadChannelMode(QProcess::MergedChannels); + + ProgressDialog progress("Fetch Public Link", "Fetching link for...", pathMsg, &process, this, false, true); + progress.expand(); + progress.allowToClose(); + progress.exec(); + }); + QObject::connect(ui.upload, &QAction::triggered, this, [=]() { QModelIndex index = ui.tree->selectionModel()->selectedRows().front(); @@ -441,6 +461,7 @@ RemoteWidget::RemoteWidget(IconCache* iconCache, const QString& remote, bool isL menu.addAction(ui.stream); menu.addAction(ui.upload); menu.addAction(ui.download); + menu.addAction(ui.link); menu.exec(ui.tree->viewport()->mapToGlobal(pos)); }); diff --git a/src/remote_widget.ui b/src/remote_widget.ui index 927c1355..826530ca 100644 --- a/src/remote_widget.ui +++ b/src/remote_widget.ui @@ -305,6 +305,11 @@ Shared + + + Public Link + + buttonRefresh From 910f3c057b8fd6a1c294c313f74a74481b628e36 Mon Sep 17 00:00:00 2001 From: Jan Hellwig Date: Tue, 3 Oct 2017 14:20:31 +0200 Subject: [PATCH 24/24] Handle changed version output of Rclone 1.38. --- src/main_window.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main_window.cpp b/src/main_window.cpp index 48864bd2..e41faf5c 100644 --- a/src/main_window.cpp +++ b/src/main_window.cpp @@ -199,6 +199,11 @@ void MainWindow::rcloneGetVersion() if (code == 0) { QString version = p->readAllStandardOutput().trimmed(); + int lineBreak = version.indexOf('\n'); + if (lineBreak != -1) + { + version.remove(lineBreak, version.length() - lineBreak); + } mStatusMessage->setText(version + " in " + QDir::toNativeSeparators(GetRclone())); rcloneListRemotes(); }