X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ff239e9297b6a71d330e1f991bb6d75c2a2353ae..727fd64e121f97b32d645e2fb26c4e93c413a849:/src/views/viewproperties.cpp diff --git a/src/views/viewproperties.cpp b/src/views/viewproperties.cpp index 8588bb238..125ac749e 100644 --- a/src/views/viewproperties.cpp +++ b/src/views/viewproperties.cpp @@ -28,18 +28,23 @@ #include #include +#include #include #include #include namespace { - const int CurrentViewPropertiesVersion = 2; const int AdditionalInfoViewPropertiesVersion = 1; + const int NameRolePropertiesVersion = 2; + const int CurrentViewPropertiesVersion = 3; // String representation to mark the additional properties of // the details view as customized by the user. See // ViewProperties::visibleRoles() for more information. const char* CustomizedDetailsString = "CustomizedDetails"; + + // Filename that is used for storing the properties + const char* ViewPropertiesFileName = ".directory"; } ViewProperties::ViewProperties(const KUrl& url) : @@ -57,7 +62,7 @@ ViewProperties::ViewProperties(const KUrl& url) : if (useGlobalViewProps) { m_filePath = destinationDir("global"); } else if (url.protocol().contains("search")) { - m_filePath = destinationDir("search"); + m_filePath = destinationDir("search/") + directoryHashForUrl(url); useDetailsViewWithPath = true; } else if (url.protocol() == QLatin1String("trash")) { m_filePath = destinationDir("trash"); @@ -76,13 +81,13 @@ ViewProperties::ViewProperties(const KUrl& url) : m_filePath = destinationDir("remote") + m_filePath; } - const QString file = m_filePath + QDir::separator() + QLatin1String(".directory"); + const QString file = m_filePath + QDir::separator() + ViewPropertiesFileName; m_node = new ViewPropertySettings(KSharedConfig::openConfig(file)); // If the .directory file does not exist or the timestamp is too old, // use default values instead. const bool useDefaultProps = (!useGlobalViewProps || useDetailsViewWithPath) && - (!QFileInfo(file).exists() || + (!QFile::exists(file) || (m_node->timestamp() < settings->viewPropsTimestamp())); if (useDefaultProps) { if (useDetailsViewWithPath) { @@ -175,6 +180,10 @@ void ViewProperties::setSortRole(const QByteArray& role) QByteArray ViewProperties::sortRole() const { + if (m_node->version() <= NameRolePropertiesVersion) { + const_cast(this)->convertNameRoleToTextRole(); + } + return m_node->sortRole().toLatin1(); } @@ -256,7 +265,7 @@ QList ViewProperties::visibleRoles() const // is accepted. QList roles; - roles.append("name"); + roles.append("text"); // Iterate through all stored keys and append all roles that match to // the curren view mode. @@ -264,16 +273,21 @@ QList ViewProperties::visibleRoles() const const int prefixLength = prefix.length(); QStringList visibleRoles = m_node->visibleRoles(); - if (visibleRoles.isEmpty() && m_node->version() <= AdditionalInfoViewPropertiesVersion) { + const int version = m_node->version(); + if (visibleRoles.isEmpty() && version <= AdditionalInfoViewPropertiesVersion) { // Convert the obsolete additionalInfo-property from older versions into the // visibleRoles-property - visibleRoles = const_cast(this)->convertAdditionalInfo(); + const_cast(this)->convertAdditionalInfo(); + visibleRoles = m_node->visibleRoles(); + } else if (version <= NameRolePropertiesVersion) { + const_cast(this)->convertNameRoleToTextRole(); + visibleRoles = m_node->visibleRoles(); } foreach (const QString& visibleRole, visibleRoles) { if (visibleRole.startsWith(prefix)) { const QByteArray role = visibleRole.right(visibleRole.length() - prefixLength).toLatin1(); - if (role != "name") { + if (role != "text") { roles.append(role); } } @@ -281,7 +295,7 @@ QList ViewProperties::visibleRoles() const // For the details view the size and date should be shown per default // until the additional information has been explicitly changed by the user - const bool useDefaultValues = roles.count() == 1 // "name" + const bool useDefaultValues = roles.count() == 1 // "text" && (m_node->viewMode() == DolphinView::DetailsView) && !visibleRoles.contains(CustomizedDetailsString); if (useDefaultValues) { @@ -292,6 +306,19 @@ QList ViewProperties::visibleRoles() const return roles; } +void ViewProperties::setHeaderColumnWidths(const QList& widths) +{ + if (m_node->headerColumnWidths() != widths) { + m_node->setHeaderColumnWidths(widths); + update(); + } +} + +QList ViewProperties::headerColumnWidths() const +{ + return m_node->headerColumnWidths(); +} + void ViewProperties::setDirProperties(const ViewProperties& props) { setViewMode(props.viewMode()); @@ -302,6 +329,7 @@ void ViewProperties::setDirProperties(const ViewProperties& props) setSortOrder(props.sortOrder()); setSortFoldersFirst(props.sortFoldersFirst()); setVisibleRoles(props.visibleRoles()); + setHeaderColumnWidths(props.headerColumnWidths()); } void ViewProperties::setAutoSaveEnabled(bool autoSave) @@ -328,11 +356,10 @@ void ViewProperties::save() m_changedProps = false; } -KUrl ViewProperties::mirroredDirectory() +bool ViewProperties::exist() const { - QString basePath = KGlobal::mainComponent().componentName(); - basePath.append("/view_properties/"); - return KUrl(KStandardDirs::locateLocal("data", basePath)); + const QString file = m_filePath + QDir::separator() + ViewPropertiesFileName; + return QFile::exists(file); } QString ViewProperties::destinationDir(const QString& subDir) const @@ -356,7 +383,7 @@ QString ViewProperties::viewModePrefix() const return prefix; } -QStringList ViewProperties::convertAdditionalInfo() +void ViewProperties::convertAdditionalInfo() { QStringList visibleRoles; @@ -385,8 +412,26 @@ QStringList ViewProperties::convertAdditionalInfo() m_node->setAdditionalInfo(QStringList()); m_node->setVisibleRoles(visibleRoles); update(); +} - return visibleRoles; +void ViewProperties::convertNameRoleToTextRole() +{ + QStringList visibleRoles = m_node->visibleRoles(); + for (int i = 0; i < visibleRoles.count(); ++i) { + if (visibleRoles[i].endsWith("_name")) { + const int leftLength = visibleRoles[i].length() - 5; + visibleRoles[i] = visibleRoles[i].left(leftLength) + "_text"; + } + } + + QString sortRole = m_node->sortRole(); + if (sortRole == QLatin1String("name")) { + sortRole = QLatin1String("text"); + } + + m_node->setVisibleRoles(visibleRoles); + m_node->setSortRole(sortRole); + update(); } bool ViewProperties::isPartOfHome(const QString& filePath) @@ -401,3 +446,19 @@ bool ViewProperties::isPartOfHome(const QString& filePath) return filePath.startsWith(homePath); } + +QString ViewProperties::directoryHashForUrl(const KUrl& url) +{ + const QByteArray hashValue = QCryptographicHash::hash(url.prettyUrl().toLatin1(), + QCryptographicHash::Sha1); + QString hashString = hashValue.toBase64(); + hashString.replace('/', '-'); + return hashString; +} + +KUrl ViewProperties::mirroredDirectory() +{ + QString basePath = KGlobal::mainComponent().componentName(); + basePath.append("/view_properties/"); + return KUrl(KStandardDirs::locateLocal("data", basePath)); +}