generic: adjust to KFileItem changes

the camera slave is on the chopping block, libtmp is supposed to be able
to handle PTP too

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-05-31 16:55:01 +03:00
parent 76023a50a7
commit e16eb8e85d
14 changed files with 55 additions and 41 deletions

View file

@ -198,7 +198,7 @@ void InformationPanel::slotFolderStatFinished(KJob* job)
{ {
m_folderStatJob = 0; m_folderStatJob = 0;
const KIO::UDSEntry entry = static_cast<KIO::StatJob*>(job)->statResult(); const KIO::UDSEntry entry = static_cast<KIO::StatJob*>(job)->statResult();
m_content->showItem(KFileItem(entry, m_shownUrl)); m_content->showItem(KFileItem(entry));
} }
void InformationPanel::slotInfoTimeout() void InformationPanel::slotInfoTimeout()

View file

@ -2145,7 +2145,7 @@ bool KateDocument::saveFile()
KIO::UDSEntry fentry; KIO::UDSEntry fentry;
if (KIO::NetAccess::stat (url(), fentry, QApplication::activeWindow())) { if (KIO::NetAccess::stat (url(), fentry, QApplication::activeWindow())) {
// do a evil copy which will overwrite target if possible // do a evil copy which will overwrite target if possible
KFileItem item (fentry, url()); KFileItem item (fentry);
KIO::FileCopyJob *job = KIO::file_copy ( url(), u, item.permissions(), KIO::Overwrite ); KIO::FileCopyJob *job = KIO::file_copy ( url(), u, item.permissions(), KIO::Overwrite );
backupSuccess = KIO::NetAccess::synchronousRun(job, QApplication::activeWindow()); backupSuccess = KIO::NetAccess::synchronousRun(job, QApplication::activeWindow());
} }

View file

@ -344,7 +344,7 @@ void DesktopPathConfig::slotEntries(KIO::Job*, const KIO::UDSEntryList& list)
{ {
QListIterator<KIO::UDSEntry> it(list); QListIterator<KIO::UDSEntry> it(list);
while (it.hasNext()) { while (it.hasNext()) {
KFileItem file(it.next(), m_copyFromSrc); KFileItem file(it.next());
kDebug() << file.url(); kDebug() << file.url();
if (file.url() == m_copyFromSrc || file.url().fileName() == "..") { if (file.url() == m_copyFromSrc || file.url().fileName() == "..") {
continue; continue;

View file

@ -113,7 +113,7 @@ void KQuery::slotListEntries(KIO::Job*, const KIO::UDSEntryList& list)
const KIO::UDSEntryList::ConstIterator end = list.constEnd(); const KIO::UDSEntryList::ConstIterator end = list.constEnd();
for (KIO::UDSEntryList::ConstIterator it = list.constBegin(); it != end; ++it) for (KIO::UDSEntryList::ConstIterator it = list.constBegin(); it != end; ++it)
m_fileItems.enqueue(KFileItem(*it, m_url)); m_fileItems.enqueue(KFileItem(*it));
checkEntries(); checkEntries();
} }

View file

@ -382,6 +382,7 @@ void KameraProtocol::statRoot(void)
{ {
KIO::UDSEntry entry; KIO::UDSEntry entry;
entry.insert(KIO::UDSEntry::UDS_NAME, QString::fromLatin1("/")); entry.insert(KIO::UDSEntry::UDS_NAME, QString::fromLatin1("/"));
entry.insert(KIO::UDSEntry::UDS_URL, "camera:/");
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
entry.insert(KIO::UDSEntry::UDS_ACCESS, (S_IRUSR | S_IRGRP | S_IROTH)); entry.insert(KIO::UDSEntry::UDS_ACCESS, (S_IRUSR | S_IRGRP | S_IROTH));
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, QString::fromLatin1("inode/directory")); entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, QString::fromLatin1("inode/directory"));
@ -392,7 +393,7 @@ void KameraProtocol::statRoot(void)
idletime = MAXIDLETIME; idletime = MAXIDLETIME;
} }
void KameraProtocol::split_url2camerapath(QString url, QString &directory, QString &file) { void KameraProtocol::split_url2camerapath(const QString &url, QString &directory, QString &file) {
QStringList components, camarr; QStringList components, camarr;
QString cam, camera, port; QString cam, camera, port;
@ -436,6 +437,7 @@ void KameraProtocol::statRegular(const KUrl &xurl)
QString xname = current_camera + "@" + current_port; QString xname = current_camera + "@" + current_port;
entry.insert(KIO::UDSEntry::UDS_NAME, path_quote(xname)); entry.insert(KIO::UDSEntry::UDS_NAME, path_quote(xname));
entry.insert(KIO::UDSEntry::UDS_URL, xurl.url());
entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, current_camera); entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, current_camera);
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
entry.insert(KIO::UDSEntry::UDS_ACCESS, (S_IRUSR | S_IRGRP | S_IROTH)); entry.insert(KIO::UDSEntry::UDS_ACCESS, (S_IRUSR | S_IRGRP | S_IROTH));
@ -539,12 +541,12 @@ void KameraProtocol::del(const KUrl &url, bool isFile)
} }
// The KIO slave "listDir" function. // The KIO slave "listDir" function.
void KameraProtocol::listDir(const KUrl &yurl) void KameraProtocol::listDir(const KUrl &xurl)
{ {
QString directory, file; QString directory, file;
kDebug(7123) << "KameraProtocol::listDir(" << yurl.path() << ")"; kDebug(7123) << "KameraProtocol::listDir(" << xurl.path() << ")";
split_url2camerapath(yurl.path(), directory, file); split_url2camerapath(xurl.path(), directory, file);
if (!file.isEmpty()) { if (!file.isEmpty()) {
if (directory == "/") { if (directory == "/") {
@ -554,8 +556,7 @@ void KameraProtocol::listDir(const KUrl &yurl)
} }
} }
if (yurl.path() == "/") { if (xurl.path() == "/") {
KUrl xurl;
// List the available cameras // List the available cameras
QStringList groupList = m_config->groupList(); QStringList groupList = m_config->groupList();
kDebug(7123) << "Found cameras: " << groupList.join(", "); kDebug(7123) << "Found cameras: " << groupList.join(", ");
@ -640,6 +641,7 @@ void KameraProtocol::listDir(const KUrl &yurl)
entry.insert(KIO::UDSEntry::UDS_ACCESS,(S_IRUSR | S_IRGRP | S_IROTH |S_IWUSR | S_IWGRP | S_IWOTH)); entry.insert(KIO::UDSEntry::UDS_ACCESS,(S_IRUSR | S_IRGRP | S_IROTH |S_IWUSR | S_IWGRP | S_IWOTH));
xname = (*it) + "@" + m_cfgPath; xname = (*it) + "@" + m_cfgPath;
entry.insert(KIO::UDSEntry::UDS_NAME, path_quote(xname)); entry.insert(KIO::UDSEntry::UDS_NAME, path_quote(xname));
// TODO: entry.insert(KIO::UDSEntry::UDS_URL, xurl.url());
// do not confuse regular users with the @usb... // do not confuse regular users with the @usb...
entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, *it); entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, *it);
listEntry(entry, false); listEntry(entry, false);
@ -648,10 +650,11 @@ void KameraProtocol::listDir(const KUrl &yurl)
QMap<QString,QString>::iterator portsit; QMap<QString,QString>::iterator portsit;
for (portsit = ports.begin(); portsit != ports.end(); portsit++) { for (portsit = ports.begin(); portsit != ports.end(); portsit++) {
entry.clear(); entry.clear();
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE,S_IFDIR); entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
// do not confuse regular users with the @usb... // do not confuse regular users with the @usb...
entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME,portsit.value()); entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, portsit.value());
entry.insert(KIO::UDSEntry::UDS_NAME, path_quote(portsit.value() + "@" + portsit.key())); entry.insert(KIO::UDSEntry::UDS_NAME, path_quote(portsit.value() + "@" + portsit.key()));
// TODO: entry.insert(KIO::UDSEntry::UDS_URL, xurl.url());
entry.insert(KIO::UDSEntry::UDS_ACCESS,(S_IRUSR | S_IRGRP | S_IROTH |S_IWUSR | S_IWGRP | S_IWOTH)); entry.insert(KIO::UDSEntry::UDS_ACCESS,(S_IRUSR | S_IRGRP | S_IROTH |S_IWUSR | S_IWGRP | S_IWOTH));
listEntry(entry, false); listEntry(entry, false);
@ -663,7 +666,7 @@ void KameraProtocol::listDir(const KUrl &yurl)
} }
if (directory.isEmpty()) { if (directory.isEmpty()) {
KUrl rooturl(yurl); KUrl rooturl(xurl);
kDebug(7123) << "redirecting to /"; kDebug(7123) << "redirecting to /";
if (!current_camera.isEmpty() && !current_port.isEmpty()) { if (!current_camera.isEmpty() && !current_port.isEmpty()) {
@ -677,7 +680,7 @@ void KameraProtocol::listDir(const KUrl &yurl)
} }
if (!openCamera()) { if (!openCamera()) {
error(KIO::ERR_COULD_NOT_READ, yurl.path()); error(KIO::ERR_COULD_NOT_READ, xurl.path());
return; return;
} }
@ -860,8 +863,9 @@ void KameraProtocol::translateTextToUDS(KIO::UDSEntry &udsEntry, const QString &
udsEntry.clear(); udsEntry.clear();
udsEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); udsEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
udsEntry.insert(KIO::UDSEntry::UDS_NAME,path_quote(fn)); udsEntry.insert(KIO::UDSEntry::UDS_NAME, path_quote(fn));
udsEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME,fn); // TODO: udsEntry.insert(KIO::UDSEntry::UDS_URL, path_quote(fn));
udsEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, fn);
udsEntry.insert(KIO::UDSEntry::UDS_SIZE,strlen(text)); udsEntry.insert(KIO::UDSEntry::UDS_SIZE,strlen(text));
udsEntry.insert(KIO::UDSEntry::UDS_ACCESS,(S_IRUSR | S_IRGRP | S_IROTH)); udsEntry.insert(KIO::UDSEntry::UDS_ACCESS,(S_IRUSR | S_IRGRP | S_IROTH));
} }
@ -874,6 +878,7 @@ void KameraProtocol::translateFileToUDS(KIO::UDSEntry &udsEntry, const CameraFil
udsEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); udsEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
udsEntry.insert(KIO::UDSEntry::UDS_NAME, path_quote(name)); udsEntry.insert(KIO::UDSEntry::UDS_NAME, path_quote(name));
// TODO: udsEntry.insert(KIO::UDSEntry::UDS_URL, path_quote(fn));
udsEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, name); udsEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, name);
if (info.file.fields & GP_FILE_INFO_SIZE) { if (info.file.fields & GP_FILE_INFO_SIZE) {
@ -907,6 +912,7 @@ void KameraProtocol::translateDirectoryToUDS(KIO::UDSEntry &udsEntry, const QStr
udsEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); udsEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
udsEntry.insert(KIO::UDSEntry::UDS_NAME, path_quote(dirname)); udsEntry.insert(KIO::UDSEntry::UDS_NAME, path_quote(dirname));
// TODO: udsEntry.insert(KIO::UDSEntry::UDS_URL, path_quote(dirname));
udsEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, dirname); udsEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, dirname);
udsEntry.insert(KIO::UDSEntry::UDS_ACCESS,S_IRUSR | S_IRGRP | S_IROTH |S_IWUSR | S_IWGRP | S_IWOTH | S_IXUSR | S_IXOTH | S_IXGRP); udsEntry.insert(KIO::UDSEntry::UDS_ACCESS,S_IRUSR | S_IRGRP | S_IROTH |S_IWUSR | S_IWGRP | S_IWOTH | S_IXUSR | S_IXOTH | S_IXGRP);
udsEntry.insert(KIO::UDSEntry::UDS_MIME_TYPE, QString("inode/directory")); udsEntry.insert(KIO::UDSEntry::UDS_MIME_TYPE, QString("inode/directory"));

View file

@ -52,7 +52,7 @@ private:
GPContext *m_context; GPContext *m_context;
void split_url2camerapath(QString url, QString &directory, QString &file); void split_url2camerapath(const QString &url, QString &directory, QString &file);
void setCamera(const QString &cam, const QString &port); void setCamera(const QString &cam, const QString &port);
void reparseConfiguration(void); void reparseConfiguration(void);
bool openCamera(QString& str); bool openCamera(QString& str);

View file

@ -262,7 +262,7 @@ void MTPSlave::listDir(const KUrl& url)
{ {
LIBMTP_mtpdevice_t *device = cachedDevice->getDevice(); LIBMTP_mtpdevice_t *device = cachedDevice->getDevice();
getEntry(entry, device); getEntry(entry, device, url.url());
listEntry(entry, false); listEntry(entry, false);
entry.clear(); entry.clear();
@ -289,7 +289,7 @@ void MTPSlave::listDir(const KUrl& url)
if (storages.size() > 0) { if (storages.size() > 0) {
foreach (const QString &storageName, storages.keys()) { foreach (const QString &storageName, storages.keys()) {
getEntry(entry, storages.value(storageName)); getEntry(entry, storages.value(storageName), url.url());
listEntry(entry, false); listEntry(entry, false);
entry.clear(); entry.clear();
@ -327,7 +327,7 @@ void MTPSlave::listDir(const KUrl& url)
QString filePath = url.path(KUrl::AddTrailingSlash).append(it.key()); QString filePath = url.path(KUrl::AddTrailingSlash).append(it.key());
fileCache->addPath(filePath, file->item_id); fileCache->addPath(filePath, file->item_id);
getEntry(entry, file); getEntry(entry, file, url.url());
listEntry(entry, false); listEntry(entry, false);
entry.clear(); entry.clear();
@ -380,18 +380,19 @@ void MTPSlave::stat(const KUrl& url)
// Root // Root
if (pathItems.size() < 1) { if (pathItems.size() < 1) {
entry.insert(UDSEntry::UDS_NAME, QLatin1String("mtp:///")); entry.insert(UDSEntry::UDS_NAME, QLatin1String("mtp:///"));
entry.insert(UDSEntry::UDS_URL, QLatin1String("mtp:///"));
entry.insert(UDSEntry::UDS_FILE_TYPE, S_IFDIR ); entry.insert(UDSEntry::UDS_FILE_TYPE, S_IFDIR );
entry.insert(UDSEntry::UDS_ACCESS, S_IRUSR | S_IRGRP | S_IROTH | S_IXUSR | S_IXGRP | S_IXOTH); entry.insert(UDSEntry::UDS_ACCESS, S_IRUSR | S_IRGRP | S_IROTH | S_IXUSR | S_IXGRP | S_IXOTH);
entry.insert(UDSEntry::UDS_MIME_TYPE, QLatin1String("inode/directory")); entry.insert(UDSEntry::UDS_MIME_TYPE, QLatin1String("inode/directory"));
// Device // Device
} else if (pathItems.size() < 2) { } else if (pathItems.size() < 2) {
getEntry(entry, pair.second); getEntry(entry, pair.second, url.url());
// Storage // Storage
} else if (pathItems.size() < 3) { } else if (pathItems.size() < 3) {
getEntry (entry, (LIBMTP_devicestorage_t*)pair.first); getEntry (entry, (LIBMTP_devicestorage_t*)pair.first, url.url());
// Folder/File // Folder/File
} else { } else {
getEntry(entry, (LIBMTP_file_t*)pair.first); getEntry(entry, (LIBMTP_file_t*)pair.first, url.url());
} }
} }
statEntry(entry); statEntry(entry);

View file

@ -292,7 +292,7 @@ QMap<QString, LIBMTP_file_t*> getFiles(LIBMTP_mtpdevice_t *&device, uint32_t sto
return fileMap; return fileMap;
} }
void getEntry(UDSEntry &entry, LIBMTP_mtpdevice_t* device) void getEntry(UDSEntry &entry, LIBMTP_mtpdevice_t* device, const QString &url)
{ {
char *charName = LIBMTP_Get_Friendlyname(device); char *charName = LIBMTP_Get_Friendlyname(device);
char *charModel = LIBMTP_Get_Modelname(device); char *charModel = LIBMTP_Get_Modelname(device);
@ -306,13 +306,14 @@ void getEntry(UDSEntry &entry, LIBMTP_mtpdevice_t* device)
} }
entry.insert(UDSEntry::UDS_NAME, deviceName); entry.insert(UDSEntry::UDS_NAME, deviceName);
entry.insert(UDSEntry::UDS_URL, url);
entry.insert(UDSEntry::UDS_ICON_NAME, QLatin1String("multimedia-player")); entry.insert(UDSEntry::UDS_ICON_NAME, QLatin1String("multimedia-player"));
entry.insert(UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.insert(UDSEntry::UDS_FILE_TYPE, S_IFDIR);
entry.insert(UDSEntry::UDS_ACCESS, S_IRUSR | S_IRGRP | S_IROTH | S_IXUSR | S_IXGRP | S_IXOTH); entry.insert(UDSEntry::UDS_ACCESS, S_IRUSR | S_IRGRP | S_IROTH | S_IXUSR | S_IXGRP | S_IXOTH);
entry.insert(UDSEntry::UDS_MIME_TYPE, QLatin1String("inode/directory")); entry.insert(UDSEntry::UDS_MIME_TYPE, QLatin1String("inode/directory"));
} }
void getEntry(UDSEntry &entry, const LIBMTP_devicestorage_t* storage) void getEntry(UDSEntry &entry, const LIBMTP_devicestorage_t* storage, const QString &url)
{ {
// char *charIdentifier = storage->VolumeIdentifier; // char *charIdentifier = storage->VolumeIdentifier;
char *charDescription = storage->StorageDescription; char *charDescription = storage->StorageDescription;
@ -325,15 +326,17 @@ void getEntry(UDSEntry &entry, const LIBMTP_devicestorage_t* storage)
// } // }
entry.insert(UDSEntry::UDS_NAME, storageName); entry.insert(UDSEntry::UDS_NAME, storageName);
entry.insert(UDSEntry::UDS_URL, url);
entry.insert(UDSEntry::UDS_ICON_NAME, QLatin1String("drive-removable-media")); entry.insert(UDSEntry::UDS_ICON_NAME, QLatin1String("drive-removable-media"));
entry.insert(UDSEntry::UDS_FILE_TYPE, S_IFDIR ); entry.insert(UDSEntry::UDS_FILE_TYPE, S_IFDIR );
entry.insert(UDSEntry::UDS_ACCESS, S_IRUSR | S_IRGRP | S_IROTH | S_IXUSR | S_IXGRP | S_IXOTH); entry.insert(UDSEntry::UDS_ACCESS, S_IRUSR | S_IRGRP | S_IROTH | S_IXUSR | S_IXGRP | S_IXOTH);
entry.insert(UDSEntry::UDS_MIME_TYPE, QLatin1String("inode/directory")); entry.insert(UDSEntry::UDS_MIME_TYPE, QLatin1String("inode/directory"));
} }
void getEntry(UDSEntry &entry, const LIBMTP_file_t* file) void getEntry(UDSEntry &entry, const LIBMTP_file_t* file, const QString &url)
{ {
entry.insert(UDSEntry::UDS_NAME, QString::fromUtf8(file->filename)); entry.insert(UDSEntry::UDS_NAME, QString::fromUtf8(file->filename));
entry.insert(UDSEntry::UDS_URL, url);
if (file->filetype == LIBMTP_FILETYPE_FOLDER) { if (file->filetype == LIBMTP_FILETYPE_FOLDER) {
entry.insert(UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.insert(UDSEntry::UDS_FILE_TYPE, S_IFDIR);
entry.insert(UDSEntry::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO); entry.insert(UDSEntry::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO);

View file

@ -38,9 +38,9 @@ LIBMTP_filetype_t getFiletype(const QString &filename);
QMap<QString, LIBMTP_devicestorage_t*> getDevicestorages(LIBMTP_mtpdevice_t *&device); QMap<QString, LIBMTP_devicestorage_t*> getDevicestorages(LIBMTP_mtpdevice_t *&device);
QMap<QString, LIBMTP_file_t*> getFiles(LIBMTP_mtpdevice_t *&device, uint32_t storage_id, uint32_t parent_id = 0xFFFFFFFF); QMap<QString, LIBMTP_file_t*> getFiles(LIBMTP_mtpdevice_t *&device, uint32_t storage_id, uint32_t parent_id = 0xFFFFFFFF);
void getEntry(UDSEntry &entry, LIBMTP_mtpdevice_t* device); void getEntry(UDSEntry &entry, LIBMTP_mtpdevice_t* device, const QString &url);
void getEntry(UDSEntry &entry, const LIBMTP_devicestorage_t* storage); void getEntry(UDSEntry &entry, const LIBMTP_devicestorage_t* storage, const QString &url);
void getEntry(UDSEntry &entry, const LIBMTP_file_t* file); void getEntry(UDSEntry &entry, const LIBMTP_file_t* file, const QString &url);
void resetDeviceStack(LIBMTP_mtpdevice_t* device); void resetDeviceStack(LIBMTP_mtpdevice_t* device);

View file

@ -102,6 +102,7 @@ void NetworkSlave::stat(const KUrl &url)
// fake the root entry, whenever listed it will list all services // fake the root entry, whenever listed it will list all services
KIO::UDSEntry kioudsentry; KIO::UDSEntry kioudsentry;
kioudsentry.insert(KIO::UDSEntry::UDS_NAME, "."); kioudsentry.insert(KIO::UDSEntry::UDS_NAME, ".");
kioudsentry.insert(KIO::UDSEntry::UDS_URL, "network:/");
kioudsentry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); kioudsentry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
kioudsentry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO); kioudsentry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO);
kioudsentry.insert(KIO::UDSEntry::UDS_MIME_TYPE, "inode/directory"); kioudsentry.insert(KIO::UDSEntry::UDS_MIME_TYPE, "inode/directory");
@ -123,12 +124,11 @@ void NetworkSlave::stat(const KUrl &url)
const QString serviceurl = urlForService(kdnssdservice); const QString serviceurl = urlForService(kdnssdservice);
KIO::UDSEntry kioudsentry; KIO::UDSEntry kioudsentry;
kioudsentry.insert(KIO::UDSEntry::UDS_NAME, kdnssdservice.name); kioudsentry.insert(KIO::UDSEntry::UDS_NAME, kdnssdservice.name);
kioudsentry.insert(KIO::UDSEntry::UDS_URL, serviceurl);
kioudsentry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFLNK); kioudsentry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFLNK);
kioudsentry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO); kioudsentry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO);
kioudsentry.insert(KIO::UDSEntry::UDS_ICON_NAME, iconForService(servicemimetype)); kioudsentry.insert(KIO::UDSEntry::UDS_ICON_NAME, iconForService(servicemimetype));
kioudsentry.insert(KIO::UDSEntry::UDS_MIME_TYPE, servicemimetype); kioudsentry.insert(KIO::UDSEntry::UDS_MIME_TYPE, servicemimetype);
// NOTE: UDS_URL is set because KFileItem concats UDS_NAME with itself otherwise
kioudsentry.insert(KIO::UDSEntry::UDS_URL, serviceurl);
kioudsentry.insert(KIO::UDSEntry::UDS_TARGET_URL, serviceurl); kioudsentry.insert(KIO::UDSEntry::UDS_TARGET_URL, serviceurl);
statEntry(kioudsentry); statEntry(kioudsentry);
finished(); finished();
@ -163,11 +163,11 @@ void NetworkSlave::listDir(const KUrl &url)
const QString serviceurl = urlForService(kdnssdservice); const QString serviceurl = urlForService(kdnssdservice);
kioudsentry.clear(); kioudsentry.clear();
kioudsentry.insert(KIO::UDSEntry::UDS_NAME, kdnssdservice.name); kioudsentry.insert(KIO::UDSEntry::UDS_NAME, kdnssdservice.name);
kioudsentry.insert(KIO::UDSEntry::UDS_URL, serviceurl);
kioudsentry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFLNK); kioudsentry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFLNK);
kioudsentry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO); kioudsentry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IRWXO);
kioudsentry.insert(KIO::UDSEntry::UDS_ICON_NAME, iconForService(servicemimetype)); kioudsentry.insert(KIO::UDSEntry::UDS_ICON_NAME, iconForService(servicemimetype));
kioudsentry.insert(KIO::UDSEntry::UDS_MIME_TYPE, servicemimetype); kioudsentry.insert(KIO::UDSEntry::UDS_MIME_TYPE, servicemimetype);
kioudsentry.insert(KIO::UDSEntry::UDS_URL, serviceurl);
kioudsentry.insert(KIO::UDSEntry::UDS_TARGET_URL, serviceurl); kioudsentry.insert(KIO::UDSEntry::UDS_TARGET_URL, serviceurl);
listEntry(kioudsentry, false); listEntry(kioudsentry, false);
} }

View file

@ -152,6 +152,7 @@ void RemoteImpl::createTopLevelEntry(KIO::UDSEntry &entry) const
{ {
entry.clear(); entry.clear();
entry.insert( KIO::UDSEntry::UDS_NAME, QString::fromLatin1(".")); entry.insert( KIO::UDSEntry::UDS_NAME, QString::fromLatin1("."));
entry.insert( KIO::UDSEntry::UDS_URL, QString::fromLatin1("remote:/"));
entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
entry.insert( KIO::UDSEntry::UDS_ACCESS, 0777); entry.insert( KIO::UDSEntry::UDS_ACCESS, 0777);
entry.insert( KIO::UDSEntry::UDS_MIME_TYPE, QString::fromLatin1("inode/directory")); entry.insert( KIO::UDSEntry::UDS_MIME_TYPE, QString::fromLatin1("inode/directory"));
@ -187,8 +188,8 @@ bool RemoteImpl::createWizardEntry(KIO::UDSEntry &entry) const
} }
entry.insert( KIO::UDSEntry::UDS_NAME, i18n("Add Network Folder")); entry.insert( KIO::UDSEntry::UDS_NAME, i18n("Add Network Folder"));
entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
entry.insert( KIO::UDSEntry::UDS_URL, QString::fromLatin1(WIZARD_URL) ); entry.insert( KIO::UDSEntry::UDS_URL, QString::fromLatin1(WIZARD_URL) );
entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
entry.insert( KIO::UDSEntry::UDS_TARGET_URL, url.path()); entry.insert( KIO::UDSEntry::UDS_TARGET_URL, url.path());
entry.insert( KIO::UDSEntry::UDS_ACCESS, 0500); entry.insert( KIO::UDSEntry::UDS_ACCESS, 0500);
entry.insert( KIO::UDSEntry::UDS_MIME_TYPE, QString::fromLatin1("application/x-desktop")); entry.insert( KIO::UDSEntry::UDS_MIME_TYPE, QString::fromLatin1("application/x-desktop"));

View file

@ -232,6 +232,7 @@ void TrashProtocol::createTopLevelDirEntry(KIO::UDSEntry& entry)
{ {
entry.clear(); entry.clear();
entry.insert( KIO::UDSEntry::UDS_NAME, QString::fromLatin1(".")); entry.insert( KIO::UDSEntry::UDS_NAME, QString::fromLatin1("."));
entry.insert( KIO::UDSEntry::UDS_URL, QString::fromLatin1("trash:/"));
entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
entry.insert( KIO::UDSEntry::UDS_ACCESS, 0700); entry.insert( KIO::UDSEntry::UDS_ACCESS, 0700);
entry.insert( KIO::UDSEntry::UDS_MIME_TYPE, QString::fromLatin1("inode/directory")); entry.insert( KIO::UDSEntry::UDS_MIME_TYPE, QString::fromLatin1("inode/directory"));
@ -284,7 +285,7 @@ void TrashProtocol::stat(const KUrl& url)
TrashedFileInfo info; TrashedFileInfo info;
ok = impl.infoForFile( trashId, fileId, info ); ok = impl.infoForFile( trashId, fileId, info );
if ( ok ) if ( ok )
ok = createUDSEntry( filePath, fileDisplayName, fileURL.fileName(), entry, info ); ok = createUDSEntry( filePath, fileDisplayName, fileURL.fileName(), url.url(), entry, info );
if ( !ok ) { if ( !ok ) {
error( KIO::ERR_COULD_NOT_STAT, url.prettyUrl() ); error( KIO::ERR_COULD_NOT_STAT, url.prettyUrl() );
@ -373,7 +374,8 @@ void TrashProtocol::listDir(const KUrl& url)
infoForItem.origPath += QLatin1Char('/'); infoForItem.origPath += QLatin1Char('/');
infoForItem.origPath += fileName; infoForItem.origPath += fileName;
if (createUDSEntry(filePath, fileName, fileName, entry, infoForItem)) { const QString fileUrl = url.url(KUrl::AddTrailingSlash) + fileName;
if (createUDSEntry(filePath, fileName, fileName, fileUrl, entry, infoForItem)) {
listEntry( entry, false ); listEntry( entry, false );
} }
} }
@ -382,7 +384,9 @@ void TrashProtocol::listDir(const KUrl& url)
finished(); finished();
} }
bool TrashProtocol::createUDSEntry( const QString& physicalPath, const QString& displayFileName, const QString& internalFileName, KIO::UDSEntry& entry, const TrashedFileInfo& info ) bool TrashProtocol::createUDSEntry( const QString& physicalPath, const QString& displayFileName,
const QString& internalFileName, const QString& compeleteUrl,
KIO::UDSEntry& entry, const TrashedFileInfo& info )
{ {
QByteArray physicalPath_c = QFile::encodeName( physicalPath ); QByteArray physicalPath_c = QFile::encodeName( physicalPath );
KDE_struct_stat buff; KDE_struct_stat buff;
@ -416,10 +420,9 @@ bool TrashProtocol::createUDSEntry( const QString& physicalPath, const QString&
access &= 07555; // make it readonly, since it's in the trashcan access &= 07555; // make it readonly, since it's in the trashcan
Q_ASSERT(!internalFileName.isEmpty()); Q_ASSERT(!internalFileName.isEmpty());
entry.insert( KIO::UDSEntry::UDS_NAME, internalFileName ); // internal filename, like "0-foo" entry.insert( KIO::UDSEntry::UDS_NAME, internalFileName ); // internal filename, like "0-foo"
entry.insert( KIO::UDSEntry::UDS_URL, compeleteUrl);
entry.insert( KIO::UDSEntry::UDS_DISPLAY_NAME, displayFileName ); // user-visible filename, like "foo" entry.insert( KIO::UDSEntry::UDS_DISPLAY_NAME, displayFileName ); // user-visible filename, like "foo"
entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, type ); entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, type );
//if ( !url.isEmpty() )
// entry.insert( KIO::UDSEntry::UDS_URL, url );
KMimeType::Ptr mt = KMimeType::findByUrl( KUrl(physicalPath), buff.st_mode ); KMimeType::Ptr mt = KMimeType::findByUrl( KUrl(physicalPath), buff.st_mode );
if ( mt ) if ( mt )
@ -453,7 +456,7 @@ void TrashProtocol::listRoot()
origURL.setPath( (*it).origPath ); origURL.setPath( (*it).origPath );
entry.clear(); entry.clear();
const QString fileDisplayName = (*it).fileId; const QString fileDisplayName = (*it).fileId;
if ( createUDSEntry( (*it).physicalPath, fileDisplayName, url.fileName(), entry, *it ) ) if ( createUDSEntry( (*it).physicalPath, fileDisplayName, url.fileName(), url.url(), entry, *it ) )
listEntry( entry, false ); listEntry( entry, false );
} }
entry.clear(); entry.clear();

View file

@ -61,7 +61,7 @@ private:
void copyOrMove( const KUrl& src, const KUrl& dest, bool overwrite, CopyOrMove action ); void copyOrMove( const KUrl& src, const KUrl& dest, bool overwrite, CopyOrMove action );
void createTopLevelDirEntry(KIO::UDSEntry& entry); void createTopLevelDirEntry(KIO::UDSEntry& entry);
bool createUDSEntry( const QString& physicalPath, const QString& displayFileName, const QString& internalFileName, bool createUDSEntry( const QString& physicalPath, const QString& displayFileName, const QString& internalFileName,
KIO::UDSEntry& entry, const TrashedFileInfo& info ); const QString &completeUrl, KIO::UDSEntry& entry, const TrashedFileInfo& info );
void listRoot(); void listRoot();
void restore( const KUrl& trashURL ); void restore( const KUrl& trashURL );
void enterLoop(); void enterLoop();

View file

@ -767,7 +767,7 @@ void KonqOperations::slotStatResult( KJob * job )
else else
{ {
KIO::StatJob * statJob = static_cast<KIO::StatJob*>(job); KIO::StatJob * statJob = static_cast<KIO::StatJob*>(job);
KFileItem item( statJob->statResult(), statJob->url() ); KFileItem item( statJob->statResult() );
emit statFinished( item ); emit statFinished( item );
} }
// If we're only here for a stat, we're done. But not if we used _statUrl internally // If we're only here for a stat, we're done. But not if we used _statUrl internally