D15277: [RFC] kio_mtp: Move MTP device handling from kioslave to kiod-module
David Faure
noreply at phabricator.kde.org
Sat Sep 22 16:42:55 BST 2018
dfaure requested changes to this revision.
dfaure added a comment.
This revision now requires changes to proceed.
This is excellent work, thanks a lot for doing this. I just have "a few" minor comments... ;)
INLINE COMMENTS
> kio_mtp.cpp:107
> {
> - qCDebug(LOG_KIO_MTP) << url.path();
> + qCDebug(LOG_KIO_MTP) << Q_FUNC_INFO << url.path();
>
Don't use Q_FUNC_INFO in code.
Instead, set up your environment with %{function} in QT_MESSAGE_PATTERN.
For instance, mine says
'%{time h:mm:ss.zzz} %{appname}(%{pid}) %{if-category}%{category}: %{endif}%{if-debug}%{function}%{endif}%{if-warning}%{backtrace depth=3}%{endif}%{if-critical}%{backtrace depth=3}%{endif}%{if-fatal}%{backtrace depth=3}%{endif} %{message}'
See https://woboq.com/blog/nice-debug-output-with-qt.html for more info.
> kio_mtp.cpp:139
>
> - getEntry(entry, device);
> -
> - listEntry(entry);
> - entry.clear();
> + for (const KMTPDeviceInterface *device : m_kmtpDaemon.devices()) {
> + listEntry(getEntry(device));
move m_kmtpDaemon.devices to a const local variable, to avoid a detach. Yes this is annoying.
> kio_mtp.cpp:320
> + const KMTPDeviceInterface *mtpDevice = m_kmtpDaemon.deviceFromName(pathItems.first());
> + if (mtpDevice) {
> + KMTPStorageInterface *storage = mtpDevice->storageFromDescription(pathItems.at(1));
and if mtpDevice is nullptr? This code doesn't seem to emit either error or finished, which is a bug.
Or if it can't be null, use Q_ASSERT instead of if() ;)
(Same in most other SlaveBase methods, please check that they all end up with either error() or finished())
> kio_mtp.cpp:338
> + });
> + connect(storage, &KMTPStorageInterface::copyFinished, &loop, &QEventLoop::exit);
> + const int result = loop.exec();
Let's hope this signal is always ALWAYS emitted, including in all error cases...
> kio_mtp.h:79
> +
> + static UDSEntry getEntry(const KMTPDeviceInterface *device);
> + static UDSEntry getEntry(const KMTPStorageInterface *storage);
class-static private functions pollute the header file for no benefit, they might as well become file-static functions (i.e. remove the declarations from here, and remove the classname from the implementation, and ensure they're at the top of the file).
> kmtpd.cpp:59
> + // Release devices
> + for (const MTPDevice *device : m_devices) {
> + deviceRemoved(device->udi());
qAsConst(m_devices) to avoid a detach
> kmtpd.cpp:128
> +
> +MTPDevice *KMTPd::deviceFromUdi(const QString &udi)
> +{
this method could probably be const?
> kmtpd.cpp:153
> + if (device.isDeviceInterface(Solid::DeviceInterface::PortableMediaPlayer)) {
> + qCDebug(LOG_KIOD_KMTPD) << "SOLID: New Device with udi=" << udi << "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||";
> +
please clean up the "||||" stuff
> kmtpd.cpp:163
> + if (device) {
> + qCDebug(LOG_KIOD_KMTPD) << "SOLID: Device with udi=" << udi << " removed. ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||";
> +
same
> kmtpd.cpp:165
> +
> + m_devices.removeAt(m_devices.indexOf(device));
> + delete device;
There's removeOne(device)
> mtpstorage.cpp:206
> +{
> + QDateTime dateTime = QDateTime::currentDateTime();
> + dateTime = dateTime.addSecs(timeToLive);
Any chance currentDateTimeUtc could be used everywhere? It's much faster than currentDateTime because it doesn't need to do timezone conversions (which use the awful process-global tzset()).
Just a thought, maybe you do need local times.
> mtpstorage.cpp:225
> + path.append(QLatin1Char('/'));
> + path.append(pathItems.at(i));
> + }
This method could be made much faster by locating the Nth slash and then using left(), to avoid the many reallocations due to multiple appends. Not sure it matters though.
> mtpstorage.cpp:256
> +
> + emit const_cast<MTPStorage *>(static_cast<const MTPStorage *>(priv))->copyProgress(sent, total);
> + return LIBMTP_HANDLER_RETURN_OK;
Minor: this would be more readable with a MTPStorage * local variable, i.e. splitting this over two lines.
> mtpstorage.cpp:473
> +{
> + qCDebug(LOG_KIOD_KMTPD) << Q_FUNC_INFO << path;
> +
Please remove Q_FUNC_INFO everywhere.
> mtpstorage.cpp:499
> +
> + // big files take some time to copy, and this may lead into D-Bus timeouts.
> + // therefore the actual copying is not done within the D-Bus method itself but right after we return to the event loop
DBus timeouts are actually configurable, if you need to block until the copy is done, btw.
> mtpstorage.h:116
> + */
> + static uint16_t onDataPut(void *, void *priv, uint32_t sendlen, unsigned char *data, uint32_t *putlen);
> + static int onDataProgress(const uint64_t sent, const uint64_t total, const void * const priv);
you know what I think of private class-static methods ;-)
> kmtpstorageinterface.cpp:76
> + argumentList << QVariant::fromValue(path);
> + return callWithArgumentList(QDBus::Block, QStringLiteral("getFileToHandler"), argumentList);
> +}
As others said, this file should really be generated by qdbusxml2cpp instead.
REPOSITORY
R320 KIO Extras
REVISION DETAIL
https://phabricator.kde.org/D15277
To: akrutzler, elvisangelaccio, ltoscano, hetzenecker, dfaure
Cc: kde-frameworks-devel, kfm-devel, feverfew, michaelh, spoorun, navarromorales, firef, ngraham, andrebarros, bruns, emmanuelp
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.kde.org/mailman/private/kfm-devel/attachments/20180922/80dc45db/attachment.htm>
More information about the kfm-devel
mailing list