#include "dolphin_directoryviewpropertysettings.h"
#include "dolphin_generalsettings.h"
-
-#include <QUrl>
#include "dolphindebug.h"
#include <QCryptographicHash>
-#include <QDate>
-#include <QFile>
-#include <QFileInfo>
-#include <QStandardPaths>
+
+#include <KFileItem>
namespace {
const int AdditionalInfoViewPropertiesVersion = 1;
ViewProperties::ViewProperties(const QUrl& url) :
m_changedProps(false),
m_autoSave(true),
- m_node(0)
+ m_node(nullptr)
{
GeneralSettings* settings = GeneralSettings::self();
const bool useGlobalViewProps = settings->globalViewProps() || url.isEmpty();
bool useDetailsViewWithPath = false;
+ bool useRecentDocumentsView = false;
+ bool useDownloadsView = false;
// We try and save it to the file .directory in the directory being viewed.
// If the directory is not writable by the user or the directory is not local,
} else if (url.scheme() == QLatin1String("trash")) {
m_filePath = destinationDir(QStringLiteral("trash"));
useDetailsViewWithPath = true;
+ } else if (url.scheme() == QLatin1String("recentdocuments")) {
+ m_filePath = destinationDir(QStringLiteral("recentdocuments"));
+ useRecentDocumentsView = true;
} else if (url.isLocalFile()) {
m_filePath = url.toLocalFile();
- const QFileInfo dirInfo(m_filePath);
- const QFileInfo fileInfo(m_filePath + QDir::separator() + ViewPropertiesFileName);
- // Check if the directory is writable and check if the ".directory" file exists and
- // is read- and writable.
- if (!dirInfo.isWritable()
- || (fileInfo.exists() && !(fileInfo.isReadable() && fileInfo.isWritable()))
- || !isPartOfHome(m_filePath)) {
-#ifdef Q_OS_WIN
- // m_filePath probably begins with C:/ - the colon is not a valid character for paths though
- m_filePath = QDir::separator() + m_filePath.remove(QLatin1Char(':'));
-#endif
+
+ bool useDestinationDir = !isPartOfHome(m_filePath);
+ if (!useDestinationDir) {
+ const KFileItem fileItem(url);
+ useDestinationDir = fileItem.isSlow();
+ }
+
+ if (!useDestinationDir) {
+ const QFileInfo dirInfo(m_filePath);
+ const QFileInfo fileInfo(m_filePath + QDir::separator() + ViewPropertiesFileName);
+ useDestinationDir = !dirInfo.isWritable() || (dirInfo.size() > 0 && fileInfo.exists() && !(fileInfo.isReadable() && fileInfo.isWritable()));
+ }
+
+ if (useDestinationDir) {
+ #ifdef Q_OS_WIN
+ // m_filePath probably begins with C:/ - the colon is not a valid character for paths though
+ m_filePath = QDir::separator() + m_filePath.remove(QLatin1Char(':'));
+ #endif
m_filePath = destinationDir(QStringLiteral("local")) + m_filePath;
}
+
+ if (m_filePath == QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)) {
+ useDownloadsView = true;
+ }
} else {
m_filePath = destinationDir(QStringLiteral("remote")) + m_filePath;
}
if (useDetailsViewWithPath) {
setViewMode(DolphinView::DetailsView);
setVisibleRoles({"path"});
+ } else if (useRecentDocumentsView || useDownloadsView) {
+ setSortRole(QByteArrayLiteral("modificationtime"));
+ setSortOrder(Qt::DescendingOrder);
+
+ if (useRecentDocumentsView) {
+ setViewMode(DolphinView::DetailsView);
+ setVisibleRoles({QByteArrayLiteral("path")});
+ } else if (useDownloadsView) {
+ setSortFoldersFirst(false);
+ setGroupedSorting(true);
+ }
} else {
// The global view-properties act as default for directories without
// any view-property configuration. Constructing a ViewProperties
}
delete m_node;
- m_node = 0;
+ m_node = nullptr;
}
void ViewProperties::setViewMode(DolphinView::Mode mode)
//
// For the details-view a special case must be respected: Per default the size
// and date should be shown without creating a .directory file. Only if
- // the user explictly has modified the properties of the details view (marked
+ // the user explicitly has modified the properties of the details view (marked
// by "CustomizedDetails"), also a details-view with no additional information
// is accepted.