generic: KIO protocols classification optimization

unfortunate as it is the class for getting protocol information is not
part of kio library so generic..

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-04-14 09:49:22 +03:00
parent 649e704698
commit d4fb98cc28
14 changed files with 26 additions and 41 deletions

View file

@ -85,11 +85,8 @@ KProtocolInfo::KProtocolInfo(const QString &path)
} }
d->maxSlavesPerHost = config.readEntry("maxInstancesPerHost", 0); d->maxSlavesPerHost = config.readEntry("maxInstancesPerHost", 0);
d->docPath = config.readPathEntry("X-DocPath", QString()); d->docPath = config.readPathEntry("X-DocPath", QString());
d->protClass = config.readEntry("Class").toLower(); d->local = config.readEntry("local", false);
if (d->protClass[0] != QLatin1Char(':')) { d->showPreviews = config.readEntry("ShowPreviews", d->local);
d->protClass.prepend(QLatin1Char(':'));
}
d->showPreviews = config.readEntry("ShowPreviews", d->protClass == QLatin1String(":local"));
} }
KProtocolInfo::KProtocolInfo(QDataStream &str, int offset) KProtocolInfo::KProtocolInfo(QDataStream &str, int offset)
@ -123,7 +120,7 @@ void KProtocolInfo::load(QDataStream &str)
>> i_supportsMakeDir >> i_supportsDeleting >> i_supportsMakeDir >> i_supportsDeleting
>> i_supportsLinking >> i_supportsMoving >> i_supportsLinking >> i_supportsMoving
>> i_canCopyFromFile >> i_canCopyToFile >> i_canCopyFromFile >> i_canCopyToFile
>> m_config >> m_maxSlaves >> d->docPath >> d->protClass >> m_config >> m_maxSlaves >> d->docPath >> d->local
>> i_showPreviews >> i_showPreviews
>> i_canRenameFromFile >> i_canRenameToFile >> i_canRenameFromFile >> i_canRenameToFile
>> i_canDeleteRecursive >> i_fileNameUsedForCopying >> i_canDeleteRecursive >> i_fileNameUsedForCopying
@ -186,7 +183,7 @@ void KProtocolInfoPrivate::save(QDataStream &str)
<< i_supportsMakeDir << i_supportsDeleting << i_supportsMakeDir << i_supportsDeleting
<< i_supportsLinking << i_supportsMoving << i_supportsLinking << i_supportsMoving
<< i_canCopyFromFile << i_canCopyToFile << i_canCopyFromFile << i_canCopyToFile
<< q->m_config << q->m_maxSlaves << docPath << protClass << q->m_config << q->m_maxSlaves << docPath << local
<< i_showPreviews << i_showPreviews
<< i_canRenameFromFile << i_canRenameToFile << i_canRenameFromFile << i_canRenameToFile
<< i_canDeleteRecursive << i_fileNameUsedForCopying << i_canDeleteRecursive << i_fileNameUsedForCopying
@ -272,13 +269,13 @@ QString KProtocolInfo::docPath(const QString &protocol)
return prot->d_func()->docPath; return prot->d_func()->docPath;
} }
QString KProtocolInfo::protocolClass(const QString &protocol) bool KProtocolInfo::protocolIsLocal(const QString &protocol)
{ {
KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(protocol); KProtocolInfo::Ptr prot = KProtocolInfoFactory::self()->findProtocol(protocol);
if (!prot) { if (!prot) {
return QString(); return false;
} }
return prot->d_func()->protClass; return prot->d_func()->local;
} }
bool KProtocolInfo::showFilePreview(const QString &protocol) bool KProtocolInfo::showFilePreview(const QString &protocol)

View file

@ -181,28 +181,21 @@ public:
static QString docPath(const QString &protocol); static QString docPath(const QString &protocol);
/** /**
* Returns the protocol class for the specified protocol. * Returns whether the specified protocol is local.
* *
* This corresponds to the "Class=" field in the protocol description file. * This corresponds to the "local=" field in the protocol description file.
*
* The following classes are defined:
* @li ":internet" for common internet protocols
* @li ":local" for protocols that access local resources
*
* Protocol classes always start with a ':' so that they can not be confused with
* the protocols themselves.
* *
* @param protocol the protocol to check * @param protocol the protocol to check
* @return the class of the protocol, or an empty string if unknown * @return true if protocol is local, false otherwise
*/ */
static QString protocolClass(const QString &protocol); static bool protocolIsLocal(const QString &protocol);
/** /**
* Returns whether file previews should be shown for the specified protocol. * Returns whether file previews should be shown for the specified protocol.
* *
* This corresponds to the "ShowPreviews=" field in the protocol description file. * This corresponds to the "ShowPreviews=" field in the protocol description file.
* *
* By default previews are shown if protocolClass is :local. * By default previews are shown if protocol is local.
* *
* @param protocol the protocol to check * @param protocol the protocol to check
* @return true if previews should be shown by default, false otherwise * @return true if previews should be shown by default, false otherwise

View file

@ -47,7 +47,7 @@ public:
KProtocolInfo *q; KProtocolInfo *q;
QString docPath; QString docPath;
QString protClass; bool local;
bool showPreviews; bool showPreviews;
bool canRenameFromFile; bool canRenameFromFile;
bool canRenameToFile; bool canRenameToFile;

View file

@ -401,7 +401,7 @@ KIO_EXPORT QByteArray KIO::rawErrorDetail(int errorCode, const QString &errorTex
path = reqUrl->path(); path = reqUrl->path();
// detect if protocol is a network protocol... // detect if protocol is a network protocol...
isSlaveNetwork = KProtocolInfo::protocolClass(protocol) == ":internet"; isSlaveNetwork = !KProtocolInfo::protocolIsLocal(protocol);
} else { } else {
// assume that the errorText has the location we are interested in // assume that the errorText has the location we are interested in
url = host = domain = path = filename = errorText; url = host = domain = path = filename = errorText;

View file

@ -686,7 +686,7 @@ static KUrl::List resolveURLs(const KUrl::List& _urls, const KService& _service)
const KUrl url = *it; const KUrl url = *it;
bool supported = isProtocolInSupportedList(url, appSupportedProtocols); bool supported = isProtocolInSupportedList(url, appSupportedProtocols);
kDebug(7010) << "Looking at url=" << url << " supported=" << supported; kDebug(7010) << "Looking at url=" << url << " supported=" << supported;
if (!supported && KProtocolInfo::protocolClass(url.protocol()) == ":local") { if (!supported && KProtocolInfo::protocolIsLocal(url.protocol())) {
// Maybe we can resolve to a local URL? // Maybe we can resolve to a local URL?
KUrl localURL = KIO::NetAccess::mostLocalUrl(url, 0); KUrl localURL = KIO::NetAccess::mostLocalUrl(url, 0);
if (localURL != url) { if (localURL != url) {

View file

@ -997,15 +997,10 @@ bool KUrlCompletionPrivate::fileCompletion(const KUrlCompletionPrivate::MyURL& u
// URLs not handled elsewhere... // URLs not handled elsewhere...
// //
static bool isLocalProtocol(const QString& protocol)
{
return (KProtocolInfo::protocolClass(protocol) == QLatin1String(":local"));
}
bool KUrlCompletionPrivate::urlCompletion(const KUrlCompletionPrivate::MyURL& url, QString* pMatch) bool KUrlCompletionPrivate::urlCompletion(const KUrlCompletionPrivate::MyURL& url, QString* pMatch)
{ {
//kDebug() << *url.kurl(); //kDebug() << *url.kurl();
if (onlyLocalProto && isLocalProtocol(url.protocol())) if (onlyLocalProto && KProtocolInfo::protocolIsLocal(url.protocol()))
return false; return false;
// Use d->cwd as base url in case url is not absolute // Use d->cwd as base url in case url is not absolute
@ -1021,7 +1016,7 @@ bool KUrlCompletionPrivate::urlCompletion(const KUrlCompletionPrivate::MyURL& ur
return false; return false;
// non local urls // non local urls
if (!isLocalProtocol(url.protocol())) { if (!KProtocolInfo::protocolIsLocal(url.protocol())) {
// url does not specify host // url does not specify host
if (url_dir.host().isEmpty()) if (url_dir.host().isEmpty())
return false; return false;

View file

@ -400,7 +400,7 @@ void PreviewJob::slotResult(KJob *job)
const KIO::filesize_t size = (KIO::filesize_t)entry.numberValue(KIO::UDSEntry::UDS_SIZE, 0); const KIO::filesize_t size = (KIO::filesize_t)entry.numberValue(KIO::UDSEntry::UDS_SIZE, 0);
const KUrl itemUrl = d->currentItem.item.mostLocalUrl(); const KUrl itemUrl = d->currentItem.item.mostLocalUrl();
if (itemUrl.isLocalFile() || KProtocolInfo::protocolClass(itemUrl.protocol()) == QLatin1String(":local")) { if (itemUrl.isLocalFile() || KProtocolInfo::protocolIsLocal(itemUrl.protocol())) {
skipCurrentItem = !d->ignoreMaximumSize && size > d->maximumLocalSize skipCurrentItem = !d->ignoreMaximumSize && size > d->maximumLocalSize
&& !d->currentItem.plugin->property("IgnoreMaximumSize").toBool(); && !d->currentItem.plugin->property("IgnoreMaximumSize").toBool();
} else { } else {

View file

@ -13,4 +13,4 @@ Icon=folder-remote
maxInstances=20 maxInstances=20
maxInstancesPerHost=5 maxInstancesPerHost=5
X-DocPath=kioslave/curl/index.html X-DocPath=kioslave/curl/index.html
Class=:internet local=false

View file

@ -15,4 +15,4 @@ maxInstancesPerHost=5
defaultMimetype=application/octet-stream defaultMimetype=application/octet-stream
determineMimetypeFromExtension=false determineMimetypeFromExtension=false
X-DocPath=kioslave/curl/index.html X-DocPath=kioslave/curl/index.html
Class=:internet local=false

View file

@ -15,4 +15,4 @@ maxInstancesPerHost=5
defaultMimetype=application/octet-stream defaultMimetype=application/octet-stream
determineMimetypeFromExtension=false determineMimetypeFromExtension=false
X-DocPath=kioslave/curl/index.html X-DocPath=kioslave/curl/index.html
Class=:internet local=false

View file

@ -13,4 +13,4 @@ Icon=folder-remote
maxInstances=20 maxInstances=20
maxInstancesPerHost=5 maxInstancesPerHost=5
X-DocPath=kioslave/curl/index.html X-DocPath=kioslave/curl/index.html
Class=:internet local=false

View file

@ -12,4 +12,4 @@ moving=true
deleteRecursive=true deleteRecursive=true
maxInstances=5 maxInstances=5
X-DocPath=kioslave/file/index.html X-DocPath=kioslave/file/index.html
Class=:local local=true

View file

@ -422,7 +422,7 @@ bool ReadOnlyPart::openUrl(const KUrl &url)
if (d->m_url.isLocalFile()) { if (d->m_url.isLocalFile()) {
d->m_file = d->m_url.toLocalFile(); d->m_file = d->m_url.toLocalFile();
return d->openLocalFile(); return d->openLocalFile();
} else if (KProtocolInfo::protocolClass(url.protocol()) == ":local") { } else if (KProtocolInfo::protocolIsLocal(url.protocol())) {
// Maybe we can use a "local path", to avoid a temp copy? // Maybe we can use a "local path", to avoid a temp copy?
KIO::JobFlags flags = (d->m_showProgressInfo ? KIO::DefaultFlags : KIO::HideProgressInfo); KIO::JobFlags flags = (d->m_showProgressInfo ? KIO::DefaultFlags : KIO::HideProgressInfo);
d->m_statJob = KIO::mostLocalUrl(d->m_url, flags); d->m_statJob = KIO::mostLocalUrl(d->m_url, flags);

View file

@ -192,10 +192,10 @@ class RunnerContextPrivate : public QSharedData
} else { } else {
KUrl url(term); KUrl url(term);
// check for a normal URL first // check for a normal URL first
//kDebug() << url << KProtocolInfo::protocolClass(url.protocol()) << url.hasHost() << // kDebug() << url << KProtocolInfo::protocolIsLocal(url.protocol()) << url.hasHost() <<
// url.host() << url.isLocalFile() << path << path.indexOf('/'); // url.host() << url.isLocalFile() << path << path.indexOf('/');
const bool hasProtocol = !url.protocol().isEmpty(); const bool hasProtocol = !url.protocol().isEmpty();
const bool isLocalProtocol = KProtocolInfo::protocolClass(url.protocol()) == ":local"; const bool isLocalProtocol = KProtocolInfo::protocolIsLocal(url.protocol());
if (hasProtocol && if (hasProtocol &&
((!isLocalProtocol && url.hasHost()) || ((!isLocalProtocol && url.hasHost()) ||
(isLocalProtocol && url.protocol() != "file"))) { (isLocalProtocol && url.protocol() != "file"))) {