void MainItem::dropEvent(QDropEvent *event) { updateIcon(false); if (event->source()) return; if (event->mimeData()->formats().indexOf("RequestDock") != -1){ //from desktop or launcher QJsonObject dataObj = QJsonDocument::fromJson(event->mimeData()->data("RequestDock")).object(); if (!dataObj.isEmpty()){ QString appKey = dataObj.value("appKey").toString(); QString appName = dataObj.value("appName").toString(); if (appKey.isEmpty()) return; event->ignore(); ConfirmUninstallDialog *dialog = new ConfirmUninstallDialog; //TODO: need real icon name dialog->setIcon(getThemeIconPath(appKey)); QString message = tr("Are you sure to uninstall %1?").arg(appName); dialog->setMessage(message); connect(dialog, &ConfirmUninstallDialog::buttonClicked, [=](int key){ dialog->deleteLater(); if (key == 1){ qWarning() << "Uninstall application:" << appKey << appName; m_launcher->RequestUninstall(appKey, true); } }); dialog->exec(); } } else//File or Dirctory { QStringList files; foreach (QUrl fileUrl, event->mimeData()->urls()) files << fileUrl.path(); QDBusPendingReply<QString, QDBusObjectPath, QString> tmpReply = m_dfo->NewTrashJob(files, false, "", "", ""); QDBusObjectPath op = tmpReply.argumentAt(1).value<QDBusObjectPath>(); DBusTrashJob * dtj = new DBusTrashJob(op.path(), this); connect(dtj, &DBusTrashJob::Done, dtj, &DBusTrashJob::deleteLater); connect(dtj, &DBusTrashJob::Done, [=](){ updateIcon(false); }); if (dtj->isValid()) dtj->Execute(); qWarning()<< op.path() << "Move files to trash: "<< files; } }
void MainItem::trashFiles(const QList<QUrl> &files) { QStringList normalFiles; for (QUrl url : files) { //try to uninstall app by .desktop file if (url.fileName().endsWith(".desktop")) { QSettings ds(url.path(), QSettings::IniFormat); ds.setIniCodec(QTextCodec::codecForName("UTF-8")); ds.beginGroup("Desktop Entry"); QString appKey = ds.value("X-Deepin-AppID").toString(); if (!appKey.isEmpty()) { QString l(qgetenv(QString("LANGUAGE").toUtf8().data())); QString appName = ds.value(QString("Name[%1]").arg(l)).toString(); appName = appName.isEmpty() ? ds.value("Name").toString() : appName; execUninstall(appKey, appName, ds.value("Icon").toString()); } else { normalFiles << url.path(); } ds.endGroup(); } else { normalFiles << url.path(); } } //remove normal files QDBusPendingReply<QString, QDBusObjectPath, QString> tmpReply = m_dfo->NewTrashJob(normalFiles, false, "", "", ""); QDBusObjectPath op = tmpReply.argumentAt(1).value<QDBusObjectPath>(); DBusTrashJob * dtj = new DBusTrashJob(op.path(), this); connect(dtj, &DBusTrashJob::Done, dtj, &DBusTrashJob::deleteLater); connect(dtj, &DBusTrashJob::Done, [=](){ updateIcon(false); }); if (dtj->isValid()) dtj->Execute(); qWarning()<< op.path() << "Move files to trash: "<< normalFiles; }