Changeset View
Changeset View
Standalone View
Standalone View
applets/kicker/plugin/recentusagemodel.cpp
Show First 20 Lines • Show All 241 Lines • ▼ Show 20 Line(s) | |||||
242 | QVariant RecentUsageModel::docData(const QString &resource, int role) const | 242 | QVariant RecentUsageModel::docData(const QString &resource, int role) const | ||
243 | { | 243 | { | ||
244 | QUrl url(resource); | 244 | QUrl url(resource); | ||
245 | 245 | | |||
246 | if (url.scheme().isEmpty()) { | 246 | if (url.scheme().isEmpty()) { | ||
247 | url.setScheme(QStringLiteral("file")); | 247 | url.setScheme(QStringLiteral("file")); | ||
248 | } | 248 | } | ||
249 | 249 | | |||
250 | #if KIO_VERSION >= QT_VERSION_CHECK(5,57,0) | 250 | auto getFileItem = [=] () { | ||
251 | // Avoid calling QT_LSTAT and accessing recent documents | 251 | // Avoid calling QT_LSTAT and accessing recent documents | ||
apol: I'm pretty sure we can/should depend on newer KF5. I'd say just update to 5.57 as the… | |||||
252 | const KFileItem fileItem(url, KFileItem::SkipMimeTypeFromContent); | 252 | return KFileItem(url, KFileItem::SkipMimeTypeFromContent); | ||
253 | #else | 253 | }; | ||
254 | const KFileItem fileItem(url); | | |||
255 | #endif | | |||
256 | 254 | | |||
257 | if (!url.isValid()) { | 255 | if (!url.isValid()) { | ||
258 | return QVariant(); | 256 | return QVariant(); | ||
259 | } | 257 | } | ||
260 | 258 | | |||
261 | if (role == Qt::DisplayRole) { | 259 | if (role == Qt::DisplayRole) { | ||
260 | auto fileItem = getFileItem(); | ||||
262 | const auto index = m_placesModel->closestItem(fileItem.url()); | 261 | const auto index = m_placesModel->closestItem(fileItem.url()); | ||
263 | if (index.isValid()) { | 262 | if (index.isValid()) { | ||
264 | const auto parentUrl = m_placesModel->url(index); | 263 | const auto parentUrl = m_placesModel->url(index); | ||
265 | if (parentUrl == fileItem.url()) { | 264 | if (parentUrl == fileItem.url()) { | ||
266 | return m_placesModel->text(index); | 265 | return m_placesModel->text(index); | ||
267 | } | 266 | } | ||
268 | } | 267 | } | ||
269 | return fileItem.text(); | 268 | return fileItem.text(); | ||
270 | } else if (role == Qt::DecorationRole) { | 269 | } else if (role == Qt::DecorationRole) { | ||
270 | auto fileItem = getFileItem(); | ||||
271 | return QIcon::fromTheme(fileItem.iconName(), QIcon::fromTheme(QStringLiteral("unknown"))); | 271 | return QIcon::fromTheme(fileItem.iconName(), QIcon::fromTheme(QStringLiteral("unknown"))); | ||
272 | } else if (role == Kicker::GroupRole) { | 272 | } else if (role == Kicker::GroupRole) { | ||
273 | return i18n("Documents"); | 273 | return i18n("Documents"); | ||
274 | } else if (role == Kicker::FavoriteIdRole || role == Kicker::UrlRole) { | 274 | } else if (role == Kicker::FavoriteIdRole || role == Kicker::UrlRole) { | ||
275 | return url.toString(); | 275 | return url.toString(); | ||
276 | } else if (role == Kicker::DescriptionRole) { | 276 | } else if (role == Kicker::DescriptionRole) { | ||
277 | auto fileItem = getFileItem(); | ||||
277 | QString desc = fileItem.localPath(); | 278 | QString desc = fileItem.localPath(); | ||
278 | 279 | | |||
279 | const auto index = m_placesModel->closestItem(fileItem.url()); | 280 | const auto index = m_placesModel->closestItem(fileItem.url()); | ||
280 | if (index.isValid()) { | 281 | if (index.isValid()) { | ||
281 | // the current file has a parent in placesModel | 282 | // the current file has a parent in placesModel | ||
282 | const auto parentUrl = m_placesModel->url(index); | 283 | const auto parentUrl = m_placesModel->url(index); | ||
283 | if (parentUrl == fileItem.url()) { | 284 | if (parentUrl == fileItem.url()) { | ||
284 | // if the current item is a place | 285 | // if the current item is a place | ||
285 | return QString(); | 286 | return QString(); | ||
286 | } | 287 | } | ||
287 | desc.truncate(desc.lastIndexOf(QChar('/'))); | 288 | desc.truncate(desc.lastIndexOf(QChar('/'))); | ||
288 | const auto text = m_placesModel->text(index); | 289 | const auto text = m_placesModel->text(index); | ||
289 | desc.replace(0, parentUrl.path().length(), text); | 290 | desc.replace(0, parentUrl.path().length(), text); | ||
290 | } else { | 291 | } else { | ||
291 | // remove filename | 292 | // remove filename | ||
292 | desc.truncate(desc.lastIndexOf(QChar('/'))); | 293 | desc.truncate(desc.lastIndexOf(QChar('/'))); | ||
293 | } | 294 | } | ||
294 | return desc; | 295 | return desc; | ||
295 | } else if (role == Kicker::UrlRole) { | 296 | } else if (role == Kicker::UrlRole) { | ||
296 | return url; | 297 | return url; | ||
297 | } else if (role == Kicker::HasActionListRole) { | 298 | } else if (role == Kicker::HasActionListRole) { | ||
298 | return true; | 299 | return true; | ||
299 | } else if (role == Kicker::ActionListRole) { | 300 | } else if (role == Kicker::ActionListRole) { | ||
301 | auto fileItem = getFileItem(); | ||||
300 | QVariantList actionList = Kicker::createActionListForFileItem(fileItem); | 302 | QVariantList actionList = Kicker::createActionListForFileItem(fileItem); | ||
301 | 303 | | |||
302 | actionList << Kicker::createSeparatorActionItem(); | 304 | actionList << Kicker::createSeparatorActionItem(); | ||
303 | 305 | | |||
304 | const QVariantMap &openParentFolder = Kicker::createActionItem(i18n("Open Containing Folder"), QStringLiteral("openParentFolder")); | 306 | const QVariantMap &openParentFolder = Kicker::createActionItem(i18n("Open Containing Folder"), QStringLiteral("openParentFolder")); | ||
305 | actionList << openParentFolder; | 307 | actionList << openParentFolder; | ||
306 | 308 | | |||
307 | const QVariantMap &forgetAction = Kicker::createActionItem(i18n("Forget Document"), QStringLiteral("forget")); | 309 | const QVariantMap &forgetAction = Kicker::createActionItem(i18n("Forget Document"), QStringLiteral("forget")); | ||
▲ Show 20 Lines • Show All 219 Lines • Show Last 20 Lines |
I'm pretty sure we can/should depend on newer KF5. I'd say just update to 5.57 as the dependency on the root CMakeLists.txt.