diff --git a/CMakeLists.txt b/CMakeLists.txt index a335313c..ddd71b7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -295,7 +295,6 @@ add_subdirectory(kstyles) # Imported from kde-runtime and other sub-projects add_subdirectory(menu) add_subdirectory(knotify) -add_subdirectory(kuiserver) add_subdirectory(soliduiserver) add_subdirectory(solid-hardware) add_subdirectory(kcmshell) diff --git a/kuiserver/CMakeLists.txt b/kuiserver/CMakeLists.txt deleted file mode 100644 index 650a7c85..00000000 --- a/kuiserver/CMakeLists.txt +++ /dev/null @@ -1,45 +0,0 @@ -set(kuiserver_SRCS - main.cpp - jobview.cpp - progresslistmodel.cpp - progresslistdelegate.cpp - requestviewcallwatcher.cpp -) - -# - -# -set(jobview_xml ${KDE4_DBUS_INTERFACES_INSTALL_DIR}/org.kde.JobView.xml) - -qt4_add_dbus_adaptor(kuiserver_SRCS ${jobview_xml} jobview.h JobView jobviewadaptor ) - -qt4_add_dbus_interface(kuiserver_SRCS ${jobview_xml} jobview_interface ) -# - -# -set(jobviewserver_xml ${KDE4_DBUS_INTERFACES_INSTALL_DIR}/org.kde.JobViewServer.xml) - -qt4_add_dbus_adaptor(kuiserver_SRCS ${jobviewserver_xml} progresslistmodel.h ProgressListModel jobviewserveradaptor) - -qt4_add_dbus_interface(kuiserver_SRCS ${jobviewserver_xml} jobviewserver_interface ) -# - -qt4_add_dbus_adaptor(kuiserver_SRCS org.kde.kuiserver.xml progresslistmodel.h ProgressListModel kuiserveradaptor) - -kde4_add_dbus_service(org.kde.kuiserver.service.in) - -# - -add_executable(kuiserver ${kuiserver_SRCS}) - -target_link_libraries(kuiserver KDE4::kio) - -install( - TARGETS kuiserver - DESTINATION ${KDE4_BIN_INSTALL_DIR} -) - -install( - FILES kuiserver.desktop - DESTINATION ${KDE4_SERVICES_INSTALL_DIR} -) diff --git a/kuiserver/Messages.sh b/kuiserver/Messages.sh deleted file mode 100755 index 8328fa97..00000000 --- a/kuiserver/Messages.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -$EXTRACTRC *.ui >> rc.cpp -$XGETTEXT *.cpp -o $podir/kuiserver.pot diff --git a/kuiserver/jobview.cpp b/kuiserver/jobview.cpp deleted file mode 100644 index 7d3c7b48..00000000 --- a/kuiserver/jobview.cpp +++ /dev/null @@ -1,433 +0,0 @@ -/***************************************************************************** -* Copyright (C) 2009 Shaun Reich * -* Copyright (C) 2006-2008 Rafael Fernández López * -* Copyright (C) 2001 George Staikos * -* Copyright (C) 2000 Matej Koss * -* Copyright (C) 2000 David Faure * -* * -* This program is free software; you can redistribute it and/or * -* modify it under the terms of the GNU General Public License as * -* published by the Free Software Foundation; either version 2 of * -* the License, or (at your option) any later version. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with this program. If not, see . * -*****************************************************************************/ - -#include "jobviewadaptor.h" -#include "requestviewcallwatcher.h" -#include "jobview_interface.h" - -#include -#include - -#include - -typedef QPair iFacePair; - -JobView::JobView(uint jobId, QObject *parent) - : QObject(parent), - m_capabilities(-1), - m_percent(-1), - m_totalAmount(0), - m_processAmount(0), - m_jobId(jobId), - m_state(Running), - m_isTerminated(false), - m_currentPendingCalls(0) -{ - new JobViewAdaptor(this); - - m_objectPath.setPath(QString("/JobViewServer/JobView_%1").arg(m_jobId)); - QDBusConnection::sessionBus().registerObject(m_objectPath.path(), this); -} - -JobView::~JobView() -{ -} - -void JobView::terminate(const QString &errorMessage) -{ - QDBusConnection::sessionBus().unregisterObject(m_objectPath.path(), QDBusConnection::UnregisterTree); - - foreach(const iFacePair &pair, m_objectPaths) { - kDebug(7024) << "making async call of terminate for: " << pair.first; - pair.second->asyncCall(QLatin1String("terminate"), errorMessage); - } - - m_error = errorMessage; - - if (m_currentPendingCalls < 1) { - // if hit it means a job exists for *something* but can't be terminated properly - // because the async call to create the job didn't come back fast enough. - // (thus addJobContact wasn't called before this was hit). -// Q_ASSERT(!m_objectPaths.isEmpty()); - - // no more calls waiting. Lets mark ourselves for deletion. - emit finished(this); - } - - m_isTerminated = true; -} - -void JobView::requestSuspend() -{ - emit suspendRequested(); -} - -void JobView::requestResume() -{ - emit resumeRequested(); -} - -void JobView::requestCancel() -{ - emit cancelRequested(); -} - -void JobView::setSuspended(bool suspended) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setSuspended"), suspended); - } - - m_state = suspended ? Suspended : Running; - emit changed(m_jobId); -} - -uint JobView::state() const -{ - return m_state; -} - -void JobView::setTotalAmount(qulonglong amount, const QString &unit) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setTotalAmount"), amount, unit); - } - - m_totalAmount = amount; - m_totalUnit = unit; - - if (unit == "bytes") { - m_sizeTotal = amount ? KGlobal::locale()->formatByteSize(amount) : QString(); - - } else if (unit == "files") { - m_sizeTotal = amount ? i18np("%1 file", "%1 files", amount) : QString(); - - } else if (unit == "dirs") { - m_sizeTotal = amount ? i18np("%1 folder", "%1 folders", amount) : QString(); - - } - emit changed(m_jobId); -} - -QString JobView::sizeTotal() const -{ - return m_sizeTotal; -} - -void JobView::setProcessedAmount(qulonglong amount, const QString &unit) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setProcessedAmount"), amount, unit); - } - - m_processAmount = amount; - m_processUnit = unit; - - if (unit == "bytes") { - m_sizeProcessed = amount ? KGlobal::locale()->formatByteSize(amount) : QString(); - - } else if (unit == "files") { - m_sizeProcessed = amount ? i18np("%1 file", "%1 files", amount) : QString(); - - } else if (unit == "dirs") { - m_sizeProcessed = amount ? i18np("%1 folder", "%1 folders", amount) : QString(); - } - emit changed(m_jobId); -} - -QString JobView::sizeProcessed() const -{ - return m_sizeProcessed; -} - -void JobView::setPercent(uint value) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setPercent"), value); - } - - m_percent = value; - emit changed(m_jobId); -} - -uint JobView::percent() const -{ - return m_percent; -} - -void JobView::setSpeed(qulonglong bytesPerSecond) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setSpeed"), bytesPerSecond); - } - - m_speed = bytesPerSecond ? KGlobal::locale()->formatByteSize(bytesPerSecond) : QString(); - emit changed(m_jobId); -} - -QString JobView::speed() const -{ - return m_speed; -} - -void JobView::setInfoMessage(const QString &infoMessage) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setInfoMessage"), infoMessage); - } - - m_infoMessage = infoMessage; - emit changed(m_jobId); -} - -QString JobView::infoMessage() const -{ - return m_infoMessage; -} - -bool JobView::setDescriptionField(uint number, const QString &name, const QString &value) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setDescriptionField"), number, name, value); - } - - if (m_descFields.contains(number)) { - m_descFields[number].first = name; - m_descFields[number].second = value; - } else { - QPair tempDescField(name, value); - m_descFields.insert(number, tempDescField); - } - emit changed(m_jobId); - return true; -} - -void JobView::clearDescriptionField(uint number) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("clearDescriptionField"), number); - } - - if (m_descFields.contains(number)) { - m_descFields.remove(number); - } - emit changed(m_jobId); -} - -void JobView::setAppName(const QString &appName) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setAppName"), appName); - } - - m_applicationName = appName; -} - -QString JobView::appName() const -{ - return m_appIconName; -} - -void JobView::setAppIconName(const QString &appIconName) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setAppIconName"), appIconName); - } - - m_appIconName = appIconName; -} - -QString JobView::appIconName() const -{ - return m_appIconName; -} - -void JobView::setCapabilities(int capabilities) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setCapabilities"), capabilities); - } - - m_capabilities = capabilities; -} - -int JobView::capabilities() const -{ - return m_capabilities; -} - -QString JobView::error() const -{ - return m_error; -} - -uint JobView::jobId() const -{ - return m_jobId; -} - -QDBusObjectPath JobView::objectPath() const -{ - return m_objectPath; -} - -void JobView::setDestUrl(const QString &destUrl) -{ - foreach(const iFacePair &pair, m_objectPaths) { - pair.second->asyncCall(QLatin1String("setDestUrl"), destUrl); - } - m_destUrl = destUrl; - emit destUrlSet(); -} - -QString JobView::destUrl() const -{ - return m_destUrl; -} - -void JobView::addJobContact(const QString& objectPath, const QString& address) -{ - org::kde::JobView *client = new org::kde::JobView(address, objectPath, QDBusConnection::sessionBus()); - - iFacePair pair(objectPath, client); - - //propagate any request signals from the client's job, up to us, then to the parent KJob - //otherwise e.g. the pause button on plasma's tray would be broken. - connect(client, SIGNAL(suspendRequested()), this, SIGNAL(suspendRequested())); - connect(client, SIGNAL(resumeRequested()), this, SIGNAL(resumeRequested())); - connect(client, SIGNAL(cancelRequested()), this, SIGNAL(cancelRequested())); - Q_ASSERT(!m_objectPaths.contains(address)); - m_objectPaths.insert(address, pair); - - //If the job already has any information, send it to the contact - if (m_capabilities > -1) { - client->asyncCall(QLatin1String("setCapabilities"), m_capabilities); - } - - if (!m_applicationName.isEmpty()) { - client->asyncCall(QLatin1String("setAppName"), m_applicationName); - } - - if (!m_appIconName.isEmpty()) { - client->asyncCall(QLatin1String("setAppIconName"), m_appIconName); - } - - if (m_percent > -1) { - client->asyncCall(QLatin1String("setPercent"), m_percent); - } - - if (!m_infoMessage.isEmpty()) { - client->asyncCall(QLatin1String("setInfoMessage"), m_infoMessage); - } - - if (!m_descFields.isEmpty()) { - QHashIterator > i(m_descFields); - while (i.hasNext()) { - i.next(); - client->asyncCall(QLatin1String("setDescriptionField"), i.key(), i.value().first, i.value().second); - } - } - - if (m_state == Suspended) { - client->asyncCall(QLatin1String("setSuspended"), true); - } - - if (m_processAmount > 0) { - client->asyncCall(QLatin1String("setProcessedAmount"), m_processAmount, m_processUnit); - } - - if (m_totalAmount > 0) { - client->asyncCall(QLatin1String("setTotalAmount"), m_totalAmount, m_totalUnit); - } - - if (!m_destUrl.isEmpty()) { - client->asyncCall(QLatin1String("setDestUrl"), m_destUrl); - } -} - -QStringList JobView::jobContacts() -{ - QStringList output; - QHash::const_iterator it = m_objectPaths.constBegin(); - for (; it != m_objectPaths.constEnd(); ++it) { - //for debug purposes only - output.append("service name of the interface: " + it.key() + "; objectPath for the interface: " + it.value().first); - } - return output; -} - -void JobView::pendingCallStarted() -{ - ++m_currentPendingCalls; -} - -void JobView::pendingCallFinished(RequestViewCallWatcher* watcher) -{ - QDBusPendingReply reply = *watcher; - QString address = watcher->service(); - - if (reply.isError()) { // this happens if plasma crashed meanwhile - kWarning() << "got error from" << address << ":" << reply.error(); - kWarning() << "app name was" << watcher->jobView()->appName(); - return; - } - - // note: this is the *remote* jobview objectpath, not the kuiserver one. - QDBusObjectPath objectPath = reply.argumentAt<0>(); - - Q_ASSERT(reply.isValid()); - - --m_currentPendingCalls; - - if (m_isTerminated) { - - // do basically the same as terminate() except only for service - // since this one missed out. - - org::kde::JobView *client = new org::kde::JobView(address, objectPath.path(), QDBusConnection::sessionBus()); - - kDebug(7024) << "making async terminate call to objectPath: " << objectPath.path(); - kDebug(7024) << "this was because a pending call was finished, but the job was already terminated before it returned."; - kDebug(7024) << "current pending calls left: " << m_currentPendingCalls; - - // forcibly set the percent (should be 100). Since the job missed out on that too. - client->asyncCall(QLatin1String("setPercent"), m_percent); - client->asyncCall(QLatin1String("terminate"), m_error); - - if (m_currentPendingCalls < 1) { - kDebug() << "no more async calls left pending..emitting finished so we can have ourselves deleted."; - emit finished(this); - } - } else { - // add this job contact because we are _not_ just terminating here. - // we'll need it for regular things like speed changes, etc. - kDebug(7024) << "adding job contact for address: " << address << " objectPath: " << objectPath.path(); - addJobContact(objectPath.path(), address); - } -} - -void JobView::serviceDropped(const QString &address) -{ - m_objectPaths.remove(address); - --m_currentPendingCalls; -} - -#include "moc_jobview.cpp" diff --git a/kuiserver/jobview.h b/kuiserver/jobview.h deleted file mode 100644 index 66d897b7..00000000 --- a/kuiserver/jobview.h +++ /dev/null @@ -1,215 +0,0 @@ -/***************************************************************************** -* Copyright (C) 2009 by Shaun Reich * -* Copyright (C) 2006-2008 Rafael Fernández López * -* Copyright (C) 2000 Matej Koss * -* Copyright (C) 2000 David Faure * -* * -* This program is free software; you can redistribute it and/or * -* modify it under the terms of the GNU General Public License as * -* published by the Free Software Foundation; either version 2 of * -* the License, or (at your option) any later version. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with this program. If not, see . * -*****************************************************************************/ - - -#ifndef JOBVIEW_H -#define JOBVIEW_H - -#include -#include - -#include - -class RequestViewCallWatcher; -class OrgKdeJobViewInterface; - -class JobView : public QObject -{ - Q_OBJECT - Q_CLASSINFO("D-Bus Interface", "org.kde.JobView") - -public: - - enum DataType { - Capabilities = 33, - ApplicationName, - Icon, - SizeTotal, - SizeProcessed, - Speed, - Percent, - InfoMessage, - DescFields, - State, - JobViewRole - }; - - enum JobState { - Running = 0, - Suspended = 1, - Stopped = 2 - }; - - JobView(uint jobId, QObject *parent = 0); - ~JobView(); - - void terminate(const QString &errorMessage); - - void setSuspended(bool suspended); - - void setTotalAmount(qulonglong amount, const QString &unit); - QString sizeTotal() const; - - void setProcessedAmount(qulonglong amount, const QString &unit); - QString sizeProcessed() const; - - void setPercent(uint percent); - uint percent() const; - - void setSpeed(qulonglong bytesPerSecond); - QString speed() const; - - void setInfoMessage(const QString &infoMessage); - QString infoMessage() const; - - bool setDescriptionField(uint number, const QString &name, const QString &value); - void clearDescriptionField(uint number); - - void setAppName(const QString &appName); - QString appName() const; - - void setAppIconName(const QString &appIconName); - QString appIconName() const; - - void setCapabilities(int capabilities); - int capabilities() const; - - QString error() const; - - uint state() const; - - uint jobId() const; - - QDBusObjectPath objectPath() const; - - /** - * Set the dest Url of the job... - * sent from the jobtracker (once upon construction) - * @param destUrl will be a QString, likely to have 1 - * dest Url...OR it can be non-existent (only srcUrl would - * be there), in that case it is a delete a directory job - * etc.. - */ - void setDestUrl(const QString& destUrl); - - QString destUrl() const; - - /** - * The below methods force an emission of the respective signal. - * Only use case is kuiserver's delegate, where we need to control - * the state of a job, but can't emit them because they are signals - * - * Note: it isn't used for job's propagating their children jobs - * all the way up to KJob, use the other signals in here for that. - * (although it does the same thing). - */ - void requestSuspend(); - void requestResume(); - void requestCancel(); - - /** - * Called by the model. - * Lets us know that a job at @p objectPath is - * open for business. @p address is only for data-keeping of our - * hash, later on. We will remove it when that address drops, - * due to some signal magic from the model. - */ - void addJobContact(const QString& objectPath, const QString& address); - - /** - * Return the list of job contacts (jobs we are currently forwarding information - * to over the wire). They *should* be valid. If they are not, something is probably - * fishy. - * This method is only for D-BUS debug purposes, for his pleasure. - * So betting on this method and trying to parse it would not be the best of ideas. - */ - QStringList jobContacts(); - - void pendingCallStarted(); - -public Q_SLOTS: - void pendingCallFinished(RequestViewCallWatcher *watcher); - -Q_SIGNALS: - void suspendRequested(); - void resumeRequested(); - void cancelRequested(); - - void finished(JobView*); - - /** - * Triggered when an internal data type changes. It is triggered - * once for each data type of this JobView, that has changed. - * - * @param uint unique job identifier - */ - void changed(uint); - - void destUrlSet(); - -private Q_SLOTS: - - /** - * Called when the model finds out that the client that was - * registered, has just died. Meaning notifications to the - * given path, are no longer required(remove them from the list). - */ - void serviceDropped(const QString &address); - -private: - - int m_capabilities; ///< The capabilities of the job - QString m_applicationName; ///< The application name - QString m_appIconName; ///< The icon name - QString m_sizeTotal; ///< The total size of the operation - QString m_sizeProcessed; ///< The processed size at the moment(amount completed) - QString m_speed; ///< The current speed of the operation (human readable, example, "3Mb/s") - int m_percent; ///< The current percent completed of the job - QString m_infoMessage; ///< The information message to be shown - QString m_error; ///< The error message of the job, set when it's terminated - QString m_totalUnit; ///< The unit used in setTotalAmount - qulonglong m_totalAmount; ///< The amount used in setTotalAmount - QString m_processUnit; ///< The unit used in setProcessedAmount - qulonglong m_processAmount; ///< The processed amount (setProcessedAmount) - - QHash > m_descFields; - - QString m_destUrl; - - QDBusObjectPath m_objectPath; - - /** - * All for the client: - *
> - */ - QHash > m_objectPaths; - - const uint m_jobId; - JobState m_state; ///< Current state of this job - - // if the job has been terminated (but it could still be awaiting a pendingReply) - bool m_isTerminated; - - // number of pending async calls to "requestView" that progresslistmodel has made. - // 0 means that this job can be deleted and all is well. Else it has to kind of wait until it comes back. - int m_currentPendingCalls; -}; - -#endif //JOBVIEW_H diff --git a/kuiserver/kuiserver.desktop b/kuiserver/kuiserver.desktop deleted file mode 100644 index 25068172..00000000 --- a/kuiserver/kuiserver.desktop +++ /dev/null @@ -1,169 +0,0 @@ -[Desktop Entry] -Type=Service -Name=kuiserver -Name[af]=kui-bediener -Name[ast]=kuiserver -Name[be]=kuiserver -Name[be@latin]=kuiserver -Name[bg]=kuiserver -Name[bn]=kuiserver -Name[bn_IN]=kuiserver -Name[bs]=KUI‑server -Name[ca]=kuiserver -Name[ca@valencia]=kuiserver -Name[cs]=kuiserver -Name[csb]=kuiserver -Name[da]=kuiserver -Name[de]=kuiserver -Name[el]=kuiserver -Name[en_GB]=kuiserver -Name[eo]=kuiserver -Name[es]=kuiserver -Name[et]=kuiserver -Name[eu]=kuiserver -Name[fa]=kuiserver -Name[fi]=kuiserver -Name[fr]=kuiserver -Name[fy]=kuiserver -Name[ga]=kuiserver -Name[gl]=kuiserver -Name[gu]=kuiserver -Name[he]=kuiserver -Name[hi]=केयूआईसर्वर -Name[hne]=केयूआईसर्वर -Name[hr]=kuiserver -Name[hsb]=kuiserver -Name[hu]=kuiserver -Name[ia]=kuiserver -Name[id]=kuiserver -Name[is]=kuiserver -Name[it]=kuiserver -Name[ja]=kuiserver -Name[kk]=kuiserver -Name[km]=kuiserver -Name[kn]=ಕೆಯುಐಸರ್ವರ್ -Name[ko]=kuiserver -Name[ku]=kuiserver -Name[lt]=kuiserver -Name[lv]=kuiserver -Name[mai]=केयूआईसर्वर -Name[mk]=kuiserver -Name[ml]=കെയുഐസെര്‍വര്‍ -Name[mr]=kuiserver -Name[nb]=kuiserver -Name[nds]=kuiserver -Name[ne]=कुइसर्भर -Name[nl]=kuiserver -Name[nn]=kuiserver -Name[or]=kuiserver -Name[pa]=kuiserver -Name[pl]=kuiserver -Name[pt]=kuiserver -Name[pt_BR]=kuiserver -Name[ro]=kuiserver -Name[ru]=kuiserver -Name[se]=kuiserver -Name[si]=kuiserver -Name[sk]=kuiserver -Name[sl]=kuiserver -Name[sr]=КУИ‑сервер -Name[sr@ijekavian]=КУИ‑сервер -Name[sr@ijekavianlatin]=KUIServer -Name[sr@latin]=KUIServer -Name[sv]=Gränssnittsserver -Name[ta]=kuiserver -Name[te]=kuiserver -Name[tg]=kuiserver -Name[th]=kuiserver -Name[tr]=kuiserver -Name[ug]=kuiserver -Name[uk]=kuiserver -Name[vi]=kuiserver -Name[wa]=kuiserver -Name[x-test]=xxkuiserverxx -Name[zh_CN]=kuiserver -Name[zh_TW]=介面伺服器 -Exec=kuiserver -Comment=KDE's Progress Info UI server -Comment[af]=KDE se vordering-wys bediener -Comment[ar]=خادم معلومات تقدم واجهة مستخدم كدي -Comment[ast]=Sirvidor d'IU de progresu de KDE -Comment[be]=KDE's Progress Info UI server -Comment[be@latin]=Server źviestak pra čynnaść aperacyj dla hrafičnaha interfejsu „KDE” -Comment[bg]=Сървър за интерфейса на KDE -Comment[bs]=KDE‑ov UI server napretka -Comment[ca]=Servidor d'interfície d'usuari d'informació de progrés del KDE -Comment[ca@valencia]=Servidor d'interfície d'usuari d'informació de progrés del KDE -Comment[cs]=Server informací uživatelského prostředí -Comment[csb]=Wiadło KDE dlô pòstãpù -Comment[da]=KDEs UI-server til fremgangsinformation -Comment[de]=KDE-Dienst zur Fortschrittsanzeige -Comment[el]=Εξυπηρετητής πληροφοριών διεργασιών του KDE -Comment[en_GB]=KDE's Progress Info UI server -Comment[es]=Servidor de IU de desarrollo de KDE -Comment[et]=KDE edenemisinfo graafiline server -Comment[eu]=KDEren aurrerapen-informazioari buruzko erabiltzaile-interfazearen zerbitzaria -Comment[fa]=کارساز واسط کاربر اطلاعات پیشرفت KDE -Comment[fi]=KDE:n edistymistietojen käyttöliittymäpalvelin -Comment[fr]=Serveur d'informations sur les évolutions de KDE -Comment[fy]=KDE's fuortgong ynfo UI tsjinner -Comment[ga]=Freastalaí Faisnéise Dul Chun Cinn KDE -Comment[gl]=Servidor da UI da información de progreso de KDE -Comment[gu]=KDE નું પ્રગતિ માહિતી UI સર્વર -Comment[he]=שרת ממשק המשתמש לדיווח התקדמות של KDE -Comment[hi]=केडीई की प्रगति जानकारी यूआई सर्वर -Comment[hne]=केडीई के प्रगति जानकारी यूआई सर्वर -Comment[hr]=Poslužitelj KDE-ovog grafičkog elementa za prikaz napretka -Comment[hsb]=KDE-serwer za informaciju wo pokročowanju -Comment[hu]=KDE állapotkijelző szolgáltatás -Comment[ia]=Servitor de UI de info de progresso de KDE -Comment[id]=Server UI Info Progres KDE -Comment[is]=Framvinda miðlunar KDE notendviðmóts -Comment[it]=Server UI per le informazioni di avanzamento di KDE -Comment[ja]=KDE 進捗情報 UI サーバ -Comment[kk]=KDE-ның барыс туралы мәлімет интерфейсінің сервері -Comment[km]=ម៉ាស៊ីន​បម្រើ​ចំណុច​ប្រទាក់​អ្នក​ប្រើ​ព័ត៌មាន​វឌ្ឍនភាព​របស់ KDE -Comment[kn]=ಕೆಡಿಇಯ ಪ್ರಗತಿ ಮಾಹಿತಿ UI ಪರಿಚಾರಕ (ಸರ್ವರ್) -Comment[ko]=KDE의 진행 정보 UI 서버 -Comment[ku]=Pêşkêşkerê UI yê Agahiya Pêşketinan ya KDE -Comment[lt]=KDE eigos informacijos UI serveris -Comment[lv]=KDE progresa informācijas saskarnes serveris -Comment[mai]=केडीई की प्रगति सूचना यूआई सर्वर -Comment[ml]=കെഡിഇയുടെ പുരോഗതി വിവര യുഐ സെര്‍വര്‍ -Comment[mr]=केडीई च्या प्रगती माहिती UI सर्व्हर -Comment[nb]=KDEs -tjener for UI med framdriftsinformasjon -Comment[nds]=De KDE-Server för Vörankamen-Infos för Böversieden -Comment[ne]=केडीईको प्रगति सूचना यूआई सर्भर -Comment[nl]=KDE's UI-server voor voortgangsinformatie -Comment[nn]=KDEs framgangsvisartenar -Comment[or]=KDEର ଉନ୍ନତି ସୂଟନା UI ସର୍ଭର -Comment[pa]=KDE ਦਾ ਪਰੋਗਰੈੱਸ ਜਾਣਕਾਰੀ UI ਸਰਵਰ -Comment[pl]=Serwer KDE informacji o postępach -Comment[pt]=Servidor da Interface de Progresso do KDE -Comment[pt_BR]=Servidor da interface de informação de progresso do KDE -Comment[ro]=Serverul KDE de informație progres -Comment[ru]=Уведомление о процессе выполнения -Comment[se]=KDE-ovdánancájehanbálvá -Comment[si]=KDE හී ප්‍රගති තොරතුරු UI ධාරකය -Comment[sk]=KDE UI-server pre informácie o priebehu -Comment[sl]=KDE-jev strežnik za prikaz napredka -Comment[sr]=КДЕ‑ов УИ сервер напретка -Comment[sr@ijekavian]=КДЕ‑ов УИ сервер напретка -Comment[sr@ijekavianlatin]=KDE‑ov UI server napretka -Comment[sr@latin]=KDE‑ov UI server napretka -Comment[sv]=KDE:s gränssnittsserver för förloppsinformation -Comment[ta]=KDE's Progress Info UI server -Comment[te]=KDE యొక్క పురోగతి సమాచార UI సేవిక -Comment[tg]=Хидмати назорати амалҳои KDE -Comment[th]=บริการส่วนติดต่อผู้ใช้แจ้งสำหรับความคืบหน้าของ KDE -Comment[tr]=KDE'nin Süreç Bilgileri Arayüzü sunucusu -Comment[ug]=KDE نىڭ جەريان ئۇچۇرى ئىشلەتكۈچى ئارايۈز مۇلازىمېتىرى -Comment[uk]=Сервер графічного інтерфейсу інформації про поступ KDE -Comment[vi]=Máy chủ giao diện người dùng của thông tin tiến trình KDE -Comment[wa]=Sierveu grafike KDE d' infôrmåcions so l' avançmint. -Comment[x-test]=xxKDE's Progress Info UI serverxx -Comment[zh_CN]=KDE 的进程信息用户界面服务器 -Comment[zh_TW]=KDE 的進度資訊介面伺服器 -X-KDE-ServiceTypes= -# It is a server -StartupNotify=false diff --git a/kuiserver/main.cpp b/kuiserver/main.cpp deleted file mode 100644 index e6d3ef89..00000000 --- a/kuiserver/main.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * This file is part of the KDE project - * Copyright (C) 2009 Shaun Reich - * Copyright (C) 2006-2008 Rafael Fernández López - * Copyright (C) 2001 George Staikos - * Copyright (C) 2000 Matej Koss - * David Faure - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. -*/ - -#include "progresslistmodel.h" - -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, char **argv) -{ - // NOTE: disables session manager entirely, for reference: - // https://www.x.org/releases/X11R7.7/doc/libSM/xsmp.html - ::unsetenv("SESSION_MANAGER"); - - // GS 5/2001 - I changed the name to "KDE" to make it look better - // in the titles of dialogs which are displayed. - KAboutData aboutdata("kuiserver", "kdelibs4", ki18n("Job Manager"), - "0.8", ki18n("KDE Job Manager"), - KAboutData::License_GPL_V2, ki18n("(C) 2000-2009, KDE Team")); - - aboutdata.addAuthor(ki18n("Shaun Reich"), ki18n("Maintainer"), "shaun.reich@kdemail.net"); - aboutdata.addAuthor(ki18n("Rafael Fernández López"), ki18n("Former Maintainer"), "ereslibre@kde.org"); - aboutdata.addAuthor(ki18n("David Faure"), ki18n("Former maintainer"), "faure@kde.org"); - aboutdata.addAuthor(ki18n("Matej Koss"), ki18n("Developer"), "koss@miesto.sk"); - - KCmdLineArgs::init(argc, argv, &aboutdata); - - KApplication app; - // This app is started automatically, no need for session management - app.disableSessionManagement(); - app.setQuitOnLastWindowClosed(false); - - QDBusConnection session = QDBusConnection::sessionBus(); - if (!session.isConnected()) { - kWarning() << "No DBUS session-bus found. Check if you have started the DBUS server."; - return 1; - } - QDBusReply sessionReply = session.interface()->isServiceRegistered("org.kde.kuiserver"); - if (sessionReply.isValid() && sessionReply.value() == true) { - kWarning() << "Another instance of kuiserver is already running!"; - return 2; - } - - ProgressListModel model; - - return app.exec(); -} diff --git a/kuiserver/org.kde.kuiserver.service.in b/kuiserver/org.kde.kuiserver.service.in deleted file mode 100644 index f7df1e39..00000000 --- a/kuiserver/org.kde.kuiserver.service.in +++ /dev/null @@ -1,3 +0,0 @@ -[D-BUS Service] -Name=org.kde.kuiserver -Exec=@KDE4_BIN_INSTALL_DIR@/kuiserver \ No newline at end of file diff --git a/kuiserver/org.kde.kuiserver.xml b/kuiserver/org.kde.kuiserver.xml deleted file mode 100644 index aaa4c455..00000000 --- a/kuiserver/org.kde.kuiserver.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kuiserver/progresslistdelegate.cpp b/kuiserver/progresslistdelegate.cpp deleted file mode 100644 index 9584b116..00000000 --- a/kuiserver/progresslistdelegate.cpp +++ /dev/null @@ -1,365 +0,0 @@ -/* - * This file is part of the KDE project - * Copyright (C) 2009 Shaun Reich - * Copyright (C) 2006-2008 Rafael Fernández López - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. -*/ - -#include "progresslistdelegate.h" -#include "progresslistdelegate_p.h" -#include "progresslistmodel.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define MIN_CONTENT_PIXELS 50 - -QString ProgressListDelegate::Private::getIcon(const QModelIndex &index) const -{ - return index.model()->data(index, JobView::Icon).toString(); -} - -QString ProgressListDelegate::Private::getSizeTotal(const QModelIndex &index) const -{ - return index.model()->data(index, JobView::SizeTotal).toString(); -} - -QString ProgressListDelegate::Private::getSizeProcessed(const QModelIndex &index) const -{ - return index.model()->data(index, JobView::SizeProcessed).toString(); -} - -QString ProgressListDelegate::Private::getSpeed(const QModelIndex &index) const -{ - return index.model()->data(index, JobView::Speed).toString(); -} - -int ProgressListDelegate::Private::getPercent(const QModelIndex &index) const -{ - return index.model()->data(index, JobView::Percent).toInt(); -} - -QString ProgressListDelegate::Private::getInfoMessage(const QModelIndex &index) const -{ - return index.model()->data(index, JobView::InfoMessage).toString(); -} - -int ProgressListDelegate::Private::getCurrentLeftMargin(int fontHeight) const -{ - return leftMargin + separatorPixels + fontHeight; -} - -ProgressListDelegate::ProgressListDelegate(QObject *parent, QListView *listView) - : KWidgetItemDelegate(listView, parent) - , d(new Private(listView)) -{ -} - -ProgressListDelegate::~ProgressListDelegate() -{ - delete d; -} - -void ProgressListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - QApplication::style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, 0); - if (!index.isValid()) { - return; - } - - QFontMetrics fontMetrics = painter->fontMetrics(); - int textHeight = fontMetrics.height(); - - int coordY = d->separatorPixels + option.rect.top(); - - KIcon iconToShow(d->getIcon(index)); - - QColor unselectedTextColor = option.palette.text().color(); - QColor selectedTextColor = option.palette.highlightedText().color(); - QPen currentPen = painter->pen(); - QPen unselectedPen = QPen(currentPen); - QPen selectedPen = QPen(currentPen); - - unselectedPen.setColor(unselectedTextColor); - selectedPen.setColor(selectedTextColor); - - if (option.state & QStyle::State_Selected) { - painter->fillRect(option.rect, option.palette.highlight()); - painter->setPen(selectedPen); - } else { - painter->setPen(unselectedPen); - } - - painter->save(); - painter->setRenderHint(QPainter::Antialiasing, true); - - QRect canvas = option.rect; - int iconWidth = canvas.height() / 2 - d->leftMargin - d->rightMargin; - int iconHeight = iconWidth; - d->iconWidth = iconWidth; - - painter->drawPixmap(option.rect.right() - iconWidth - d->rightMargin, coordY, iconToShow.pixmap(iconWidth, iconHeight)); - - if (!d->getInfoMessage(index).isEmpty()) { - QString textToShow = fontMetrics.elidedText(d->getInfoMessage(index), Qt::ElideRight, canvas.width() - d->getCurrentLeftMargin(textHeight) - d->rightMargin); - - textHeight = fontMetrics.size(Qt::TextSingleLine, textToShow).height(); - - painter->drawText(d->getCurrentLeftMargin(textHeight) + option.rect.left(), coordY, fontMetrics.width(textToShow), textHeight, Qt::AlignLeft, textToShow); - - coordY += textHeight; - } - - if (!d->getSizeProcessed(index).isEmpty() || !d->getSizeTotal(index).isEmpty() || !d->getSpeed(index).isEmpty()) { - QString textToShow; - if (!d->getSizeTotal(index).isEmpty() && !d->getSpeed(index).isEmpty()) - textToShow = fontMetrics.elidedText(i18n("%1 of %2 processed at %3/s", d->getSizeProcessed(index), d->getSizeTotal(index), d->getSpeed(index)), Qt::ElideRight, canvas.width() - d->getCurrentLeftMargin(textHeight) - d->rightMargin); - else if (!d->getSizeTotal(index).isEmpty() && d->getSpeed(index).isEmpty()) - textToShow = fontMetrics.elidedText(i18n("%1 of %2 processed", d->getSizeProcessed(index), d->getSizeTotal(index)), Qt::ElideRight, canvas.width() - d->getCurrentLeftMargin(textHeight) - d->rightMargin); - else if (d->getSizeTotal(index).isEmpty() && !d->getSpeed(index).isEmpty()) - textToShow = fontMetrics.elidedText(i18n("%1 processed at %2/s", d->getSizeProcessed(index), d->getSpeed(index)), Qt::ElideRight, canvas.width() - d->getCurrentLeftMargin(textHeight) - d->rightMargin); - else - textToShow = fontMetrics.elidedText(i18n("%1 processed", d->getSizeProcessed(index)), Qt::ElideRight, canvas.width() - d->getCurrentLeftMargin(textHeight) - d->rightMargin); - - textHeight = fontMetrics.size(Qt::TextSingleLine, textToShow).height(); - - painter->drawText(d->getCurrentLeftMargin(textHeight) + option.rect.left(), coordY, fontMetrics.width(textToShow), textHeight, Qt::AlignLeft, textToShow); - - coordY += textHeight; - } - - painter->restore(); -} - -QSize ProgressListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - QFontMetrics fontMetrics = option.fontMetrics; - - int itemHeight = d->separatorPixels; - int itemWidth = d->leftMargin + d->rightMargin + d->iconWidth + d->separatorPixels * 2 + - fontMetrics.height(); - - int textSize = fontMetrics.height(); - - if (!d->getInfoMessage(index).isEmpty()) { - textSize = fontMetrics.size(Qt::TextSingleLine, d->getInfoMessage(index)).height(); - itemHeight += textSize; - } - - if (!d->getSizeProcessed(index).isEmpty() || !d->getSpeed(index).isEmpty() || - !d->getSizeTotal(index).isEmpty()) { - textSize = fontMetrics.size(Qt::TextSingleLine, d->getSizeProcessed(index)).height(); - itemHeight += textSize; - } - - if (d->getPercent(index) > 0) { - itemHeight += d->progressBar->sizeHint().height(); - } - - if (d->editorHeight > 0) - itemHeight += d->editorHeight; - - if (itemHeight + d->separatorPixels >= d->minimumItemHeight) - itemHeight += d->separatorPixels; - else - itemHeight = d->minimumItemHeight; - - return QSize(itemWidth + MIN_CONTENT_PIXELS, itemHeight); -} - -void ProgressListDelegate::setSeparatorPixels(int separatorPixels) -{ - d->separatorPixels = separatorPixels; -} - -void ProgressListDelegate::setLeftMargin(int leftMargin) -{ - d->leftMargin = leftMargin; -} - -void ProgressListDelegate::setRightMargin(int rightMargin) -{ - d->rightMargin = rightMargin; -} - -void ProgressListDelegate::setMinimumItemHeight(int minimumItemHeight) -{ - d->minimumItemHeight = minimumItemHeight; -} - -void ProgressListDelegate::setMinimumContentWidth(int minimumContentWidth) -{ - d->minimumContentWidth = minimumContentWidth; -} - -void ProgressListDelegate::setEditorHeight(int editorHeight) -{ - d->editorHeight = editorHeight; -} - -QList ProgressListDelegate::createItemWidgets() const -{ - QList widgetList; - - KPushButton *pauseResumeButton = new KPushButton(); - pauseResumeButton->setIcon(KIcon("media-playback-pause")); - - KPushButton *cancelButton = new KPushButton(); - cancelButton->setIcon(KIcon("media-playback-stop")); - - KPushButton *clearButton = new KPushButton(KIcon("edit-clear"), i18n("Clear")); - QProgressBar *progressBar = new QProgressBar(); - - connect(pauseResumeButton, SIGNAL(clicked(bool)), this, SLOT(slotPauseResumeClicked())); - connect(cancelButton, SIGNAL(clicked(bool)), this, SLOT(slotCancelClicked())); - connect(clearButton, SIGNAL(clicked(bool)), this, SLOT(slotClearClicked())); - - setBlockedEventTypes(pauseResumeButton, QList() << QEvent::MouseButtonPress - << QEvent::MouseButtonRelease << QEvent::MouseButtonDblClick); - setBlockedEventTypes(cancelButton, QList() << QEvent::MouseButtonPress - << QEvent::MouseButtonRelease << QEvent::MouseButtonDblClick); - - widgetList << pauseResumeButton << cancelButton << progressBar << clearButton; - - return widgetList; -} - -void ProgressListDelegate::updateItemWidgets(const QList widgets, - const QStyleOptionViewItem &option, - const QPersistentModelIndex &index) const -{ - if (!index.isValid()) { - return; - } - - KPushButton *pauseResumeButton = static_cast(widgets[0]); - - KPushButton *cancelButton = static_cast(widgets[1]); - cancelButton->setToolTip(i18n("Cancel")); - - QProgressBar *progressBar = static_cast(widgets[2]); - KPushButton *clearButton = static_cast(widgets[3]); - - int percent = d->getPercent(index); - - cancelButton->setVisible(percent < 100); - pauseResumeButton->setVisible(percent < 100); - clearButton->setVisible(percent > 99); - - KJob::Capabilities capabilities = (KJob::Capabilities) index.model()->data(index, JobView::Capabilities).toInt(); - cancelButton->setEnabled(capabilities & KJob::Killable); - pauseResumeButton->setEnabled(capabilities & KJob::Suspendable); - - - JobView::JobState state = (JobView::JobState) index.model()->data(index, JobView::State).toInt(); - switch (state) { - case JobView::Running: - pauseResumeButton->setToolTip(i18n("Pause")); - pauseResumeButton->setIcon(KIcon("media-playback-pause")); - break; - case JobView::Suspended: - pauseResumeButton->setToolTip(i18n("Resume")); - pauseResumeButton->setIcon(KIcon("media-playback-start")); - break; - default: - Q_ASSERT(0); - break; - } - - QSize progressBarButtonSizeHint; - - - - if (percent < 100) { - QSize cancelButtonSizeHint = cancelButton->sizeHint(); - - cancelButton->move(option.rect.width() - d->separatorPixels - cancelButtonSizeHint.width(), - option.rect.height() - d->separatorPixels - cancelButtonSizeHint.height()); - - QSize pauseResumeButtonSizeHint = pauseResumeButton->sizeHint(); - - - pauseResumeButton->move(option.rect.width() - d->separatorPixels * 2 - pauseResumeButtonSizeHint.width() - cancelButtonSizeHint.width(), - option.rect.height() - d->separatorPixels - pauseResumeButtonSizeHint.height()); - - progressBarButtonSizeHint = pauseResumeButtonSizeHint; - } else { - progressBarButtonSizeHint = clearButton->sizeHint(); - clearButton->resize(progressBarButtonSizeHint); - - clearButton->move(option.rect.width() - d->separatorPixels - progressBarButtonSizeHint.width(), - option.rect.height() - d->separatorPixels - progressBarButtonSizeHint.height()); - } - progressBar->setValue(percent); - - QFontMetrics fm(QApplication::font()); - QSize progressBarSizeHint = progressBar->sizeHint(); - - progressBar->resize(QSize(option.rect.width() - d->getCurrentLeftMargin(fm.height()) - d->rightMargin, progressBarSizeHint.height())); - - progressBar->move(d->getCurrentLeftMargin(fm.height()), - option.rect.height() - d->separatorPixels * 2 - progressBarButtonSizeHint.height() - progressBarSizeHint.height()); -} - -void ProgressListDelegate::slotPauseResumeClicked() -{ - const QModelIndex index = focusedIndex(); - JobView *jobView = index.model()->data(index, JobView::JobViewRole).value(); - JobView::JobState state = (JobView::JobState) index.model()->data(index, JobView::State).toInt(); - if (jobView) { - switch (state) { - case JobView::Running: - jobView->requestSuspend(); - break; - case JobView::Suspended: - jobView->requestResume(); - break; - default: - Q_ASSERT(0); // this point should have never been reached - break; - } - } -} - -void ProgressListDelegate::slotCancelClicked() -{ - const QModelIndex index = focusedIndex(); - JobView *jobView = index.model()->data(index, JobView::JobViewRole).value(); - if (jobView) { - jobView->requestCancel(); - } -} - -void ProgressListDelegate::slotClearClicked() -{ - const QModelIndex index = focusedIndex(); - JobView *jobView = index.model()->data(index, JobView::JobViewRole).value(); - if (jobView) { - jobView->terminate(QString()); - } -} - -#include "moc_progresslistdelegate.cpp" diff --git a/kuiserver/progresslistdelegate.h b/kuiserver/progresslistdelegate.h deleted file mode 100644 index 438828eb..00000000 --- a/kuiserver/progresslistdelegate.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is part of the KDE project - * Copyright (C) 2006-2008 Rafael Fernández López - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. -*/ - -#ifndef PROGRESSLISTDELEGATE_H -#define PROGRESSLISTDELEGATE_H - -#include - -#include - -#include - -class ProgressListDelegate - : public KWidgetItemDelegate -{ - Q_OBJECT - Q_ENUMS(ProgressItemRole) - -public: - explicit ProgressListDelegate(QObject *parent = 0, QListView *listView = 0); - ~ProgressListDelegate(); - - void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; - QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; - - void setSeparatorPixels(int separatorPixels); - void setLeftMargin(int leftMargin); - void setRightMargin(int rightMargin); - void setMinimumItemHeight(int minimumItemHeight); - void setMinimumContentWidth(int minimumContentWidth); - void setEditorHeight(int editorHeight); - -protected: - virtual QList createItemWidgets() const; - virtual void updateItemWidgets(const QList widgets, - const QStyleOptionViewItem &option, - const QPersistentModelIndex &index) const; - -private Q_SLOTS: - void slotPauseResumeClicked(); - void slotCancelClicked(); - void slotClearClicked(); - -private: - class Private; - Private *d; -}; - -#endif // PROGRESSLISTDELEGATE_H diff --git a/kuiserver/progresslistdelegate_p.h b/kuiserver/progresslistdelegate_p.h deleted file mode 100644 index e3013fec..00000000 --- a/kuiserver/progresslistdelegate_p.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of the KDE project - * Copyright (C) 2007, 2006 Rafael Fernández López - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. -*/ - -#ifndef PROGRESSLISTDELEGATE_P_H -#define PROGRESSLISTDELEGATE_P_H - -#include "progresslistmodel.h" - -#include -#include - -#include -#include -#include - -#include -#include - -class ProgressListDelegate::Private -{ -public: - Private(QListView *listView) - : separatorPixels(0), - leftMargin(0), - rightMargin(0), - minimumItemHeight(0), - minimumContentWidth(0), - editorHeight(0), - iconWidth(0), - listView(listView), - progressBar(new QProgressBar(0)) - { - } - - ~Private() { - delete progressBar; - } - - QString getIcon(const QModelIndex &index) const; - QString getSizeTotal(const QModelIndex &index) const; - QString getSizeProcessed(const QModelIndex &index) const; - QString getSpeed(const QModelIndex &index) const; - int getPercent(const QModelIndex &index) const; - QString getInfoMessage(const QModelIndex &index) const; - int getCurrentLeftMargin(int fontHeight) const; - -public: - int separatorPixels; - int leftMargin; - int rightMargin; - int minimumItemHeight; - int minimumContentWidth; - int editorHeight; - int iconWidth; - QListView *listView; - QProgressBar *progressBar; -}; - -#endif // PROGRESSLISTDELEGATE_P_H diff --git a/kuiserver/progresslistmodel.cpp b/kuiserver/progresslistmodel.cpp deleted file mode 100644 index e4dfcb26..00000000 --- a/kuiserver/progresslistmodel.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/* - * This file is part of the KDE project - * Copyright (C) 2009 Shaun Reich - * Copyright (C) 2006-2008 Rafael Fernández López - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. -*/ - -#include "progresslistmodel.h" -#include "jobviewserveradaptor.h" -#include "kuiserveradaptor.h" -#include "jobviewserver_interface.h" -#include "requestviewcallwatcher.h" - -#include -#include -#include - -ProgressListModel::ProgressListModel(QObject *parent) - : QAbstractItemModel(parent), QDBusContext(), m_jobId(1) -{ - m_serviceWatcher = new QDBusServiceWatcher(this); - m_serviceWatcher->setConnection(QDBusConnection::sessionBus()); - m_serviceWatcher->setWatchMode(QDBusServiceWatcher::WatchForUnregistration); - connect(m_serviceWatcher, SIGNAL(serviceUnregistered(const QString &)), this, SLOT(serviceUnregistered(const QString &))); - - // Register necessary services and D-Bus adaptors. - new JobViewServerAdaptor(this); - new KuiserverAdaptor(this); - - QDBusConnection sessionBus = QDBusConnection::sessionBus(); - - if (!sessionBus.registerService(QLatin1String("org.kde.kuiserver"))) { - kDebug(7024) << "failed to register service org.kde.kuiserver. Perhaps something has already taken it?"; - } - - if (!sessionBus.registerService(QLatin1String("org.kde.JobViewServer"))) { - kDebug(7024) << "failed to register service JobViewServer. Perhaps something already has taken it?"; - } - - if (!sessionBus.registerObject(QLatin1String("/JobViewServer"), this)) { - kDebug(7024) << "failed to register object JobViewServer."; - } -} - -ProgressListModel::~ProgressListModel() -{ - QDBusConnection sessionBus = QDBusConnection::sessionBus(); - sessionBus.unregisterService("org.kde.JobViewServer"); - sessionBus.unregisterService("org.kde.kuiserver"); - - qDeleteAll(m_jobViews); - qDeleteAll(m_registeredServices); -} - -QModelIndex ProgressListModel::parent(const QModelIndex&) const -{ - return QModelIndex(); -} - -QDBusObjectPath ProgressListModel::requestView(const QString &appName, const QString &appIconName, int capabilities) -{ - return newJob(appName, appIconName, capabilities); -} - -Qt::ItemFlags ProgressListModel::flags(const QModelIndex &index) const -{ - Q_UNUSED(index); - return Qt::ItemIsEnabled; -} - -int ProgressListModel::columnCount(const QModelIndex &parent) const -{ - Q_UNUSED(parent); - return 1; -} - -QVariant ProgressListModel::data(const QModelIndex &index, int role) const -{ - QVariant result; - - if (!index.isValid()) { - return result; - } - - JobView *jobView = m_jobViews.at(index.row()); - Q_ASSERT(jobView); - - switch (role) { - case JobView::Capabilities: - result = jobView->capabilities(); - break; - case JobView::ApplicationName: - result = jobView->appName(); - break; - case JobView::Icon: - result = jobView->appIconName(); - break; - case JobView::SizeTotal: - result = jobView->sizeTotal(); - break; - case JobView::SizeProcessed: - result = jobView->sizeProcessed(); - break; - case JobView::Speed: - result = jobView->speed(); - break; - case JobView::Percent: - result = jobView->percent(); - break; - case JobView::InfoMessage: - result = jobView->infoMessage(); - break; - case JobView::DescFields: - - break; - case JobView::State: - result = jobView->state(); - break; - case JobView::JobViewRole: - result = QVariant::fromValue(jobView); - break; - default: - break; - } - - return result; -} - -QModelIndex ProgressListModel::index(int row, int column, const QModelIndex &parent) const -{ - Q_UNUSED(parent); - - if (row >= m_jobViews.count() || column > 0) { - return QModelIndex(); - } - return createIndex(row, column); -} - -QModelIndex ProgressListModel::indexForJob(JobView *jobView) const -{ - int index = m_jobViews.indexOf(jobView); - - if (index == -1) { - return QModelIndex(); - } - return createIndex(index, 0, jobView); -} - -int ProgressListModel::rowCount(const QModelIndex &parent) const -{ - return parent.isValid() ? 0 : m_jobViews.count(); -} - -QDBusObjectPath ProgressListModel::newJob(const QString &appName, const QString &appIcon, int capabilities) -{ - // Since s_jobId is an unsigned int, if we received an overflow and go back to 0, - // be sure we do not assign 0 to a valid job, 0 is reserved only for - // reporting problems. - if (!m_jobId) ++m_jobId; - JobView *newJob = new JobView(m_jobId); - ++m_jobId; - - QString callerService = message().service(); - m_jobViewsOwners.insertMulti(callerService, newJob); - m_serviceWatcher->addWatchedService(callerService); - - newJob->setAppName(appName); - newJob->setAppIconName(appIcon); - newJob->setCapabilities(capabilities); - - beginInsertRows(QModelIndex(), 0, 0); - m_jobViews.prepend(newJob); - endInsertRows(); - - //The model will now get notified when a job changes -- so it can emit dataChanged(..) - connect(newJob, SIGNAL(changed(uint)), this, SLOT(jobChanged(uint))); - connect(newJob, SIGNAL(finished(JobView*)), this, SLOT(jobFinished(JobView*))); - connect(newJob, SIGNAL(destUrlSet()), this, SLOT(emitJobUrlsChanged())); - connect(this, SIGNAL(serviceDropped(const QString&)), newJob, SLOT(serviceDropped(const QString&))); - - //Forward this new job over to existing DBus clients. - foreach(QDBusAbstractInterface* interface, m_registeredServices) { - - newJob->pendingCallStarted(); - QDBusPendingCall pendingCall = interface->asyncCall(QLatin1String("requestView"), appName, appIcon, capabilities); - RequestViewCallWatcher *watcher = new RequestViewCallWatcher(newJob, interface->service(), pendingCall, this); - - connect(watcher, SIGNAL(callFinished(RequestViewCallWatcher*)), - newJob, SLOT(pendingCallFinished(RequestViewCallWatcher*))); - } - - return newJob->objectPath(); -} - -QStringList ProgressListModel::gatherJobUrls() -{ - QStringList jobUrls; - - foreach(JobView* jobView, m_jobViews) { - jobUrls.append(jobView->destUrl()); - } - return jobUrls; -} - -void ProgressListModel::jobFinished(JobView *jobView) -{ - // Job finished, delete it if we are not in self-ui mode, *and* the config option to keep finished jobs is set - kDebug(7024) << "removing jobview from list, it finished"; - m_jobViews.removeOne(jobView); - //job dies, dest. URL's change.. - emit jobUrlsChanged(gatherJobUrls()); -} - -void ProgressListModel::jobChanged(uint jobId) -{ - emit dataChanged(createIndex(jobId - 1, 0), createIndex(jobId + 1, 0)); - layoutChanged(); -} - -void ProgressListModel::emitJobUrlsChanged() -{ - emit jobUrlsChanged(gatherJobUrls()); -} - -void ProgressListModel::registerService(const QString &serviceName, const QString &objectPath) -{ - QDBusConnection sessionBus = QDBusConnection::sessionBus(); - - if (!serviceName.isEmpty() && !objectPath.isEmpty()) { - if (sessionBus.interface()->isServiceRegistered(serviceName).value() && - !m_registeredServices.contains(serviceName)) { - - org::kde::JobViewServer *client = - new org::kde::JobViewServer(serviceName, objectPath, sessionBus); - - if (client->isValid()) { - m_serviceWatcher->addWatchedService(serviceName); - m_registeredServices.insert(serviceName, client); - - - //tell this new client to create all of the same jobs that we currently have. - //also connect them so that when the method comes back, it will return a - //QDBusObjectPath value, which is where we can contact that job, within "org.kde.JobView" - - //TODO: this falls victim to what newJob used to be vulnerable to...async calls returning too slowly and a terminate ensuing before that. - // it may not be a problem (yet), though. - foreach(JobView* jobView, m_jobViews) { - - QDBusPendingCall pendingCall = client->asyncCall(QLatin1String("requestView"), jobView->appName(), jobView->appIconName(), jobView->capabilities()); - - RequestViewCallWatcher *watcher = new RequestViewCallWatcher(jobView, serviceName, pendingCall, this); - connect(watcher, SIGNAL(callFinished(RequestViewCallWatcher*)), - jobView, SLOT(pendingCallFinished(RequestViewCallWatcher*))); - } - } else { - delete client; - } - } - } -} - -bool ProgressListModel::requiresJobTracker() -{ - return m_registeredServices.isEmpty(); -} - -void ProgressListModel::serviceUnregistered(const QString &name) -{ - m_serviceWatcher->removeWatchedService(name); - if (m_registeredServices.contains(name)) { - - emit serviceDropped(name); - m_registeredServices.remove(name); - } - - QList jobs = m_jobViewsOwners.values(name); - if (!jobs.isEmpty()) { - m_jobViewsOwners.remove(name); - Q_FOREACH(JobView *job, jobs) { - job->terminate(QString()); - } - } -} - -QStringList ProgressListModel::registeredJobContacts() -{ - QStringList output; - foreach (JobView* jobView, m_jobViews) { - output.append(jobView->jobContacts()); - } - return output; -} - -#include "moc_progresslistmodel.cpp" diff --git a/kuiserver/progresslistmodel.h b/kuiserver/progresslistmodel.h deleted file mode 100644 index db409b3c..00000000 --- a/kuiserver/progresslistmodel.h +++ /dev/null @@ -1,190 +0,0 @@ -/* - * This file is part of the KDE project - * Copyright (C) 2009 Shaun Reich - * Copyright (C) 2006-2008 Rafael Fernández López - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. -*/ - -#ifndef PROGRESSLISTMODEL_H -#define PROGRESSLISTMODEL_H - -#include "jobview.h" - -#include -#include -#include - -class ProgressListModel: public QAbstractItemModel, protected QDBusContext -{ - Q_OBJECT - Q_CLASSINFO("D-Bus Interface", "org.kde.JobViewServer") -public: - - explicit ProgressListModel(QObject *parent = 0); - ~ProgressListModel(); - - QModelIndex parent(const QModelIndex&) const; - - - /** - * Returns what operations the model/delegate support on the given @p index - * - * @param index the index in which you want to know the allowed operations - * @return the allowed operations on the model/delegate - */ - Qt::ItemFlags flags(const QModelIndex &index) const; - - - /** - * Returns the data on @p index that @p role contains. The result is - * a QVariant, so you may need to cast it to the type you want - * - * @param index the index in which you are accessing - * @param role the role you want to retrieve - * @return the data in a QVariant class - */ - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - - - /** - * Returns the index for the given @p row. Since it is a list, @p column should - * be 0, but it will be ignored. @p parent will be ignored as well. - * - * @param row the row you want to get the index - * @param column will be ignored - * @param parent will be ignored - * @return the index for the given @p row as a QModelIndex - */ - QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const; - - QModelIndex indexForJob(JobView *jobView) const; - - - /** - * Returns the number of columns - * - * @param parent will be ignored - * @return the number of columns. In this case is always 1 - */ - int columnCount(const QModelIndex &parent = QModelIndex()) const; - - - /** - * Returns the number of rows - * - * @param parent will be ignored - * @return the number of rows in the model - */ - int rowCount(const QModelIndex &parent = QModelIndex()) const; - - - /** - * Called by a KJob's DBus connection to this ("JobViewServer"). - * Indicates that the KJob is now in existence (and is a just-created job). - * Returns a QDBusObjectPath that represents a unique dbus path that is a subset - * of the current "org.kde.JobView" address(so there can be multiple jobs, and KJob - * can keep track of them. - */ - QDBusObjectPath requestView(const QString &appName, const QString &appIconName, int capabilities); - -public Q_SLOTS: - /** - * Calling this(within "org.kde.kuiserver") results in all of the - * information that pertains to any KJobs and status updates for - * them, being sent to this DBus address, at the given - * @p objectPath - * Note that you will also receive jobs that existed before this was - * called - */ - void registerService(const QString &service, const QString &objectPath); - - /** - * Forces emission of jobUrlsChanged() signal...exposed to D-BUS (because they need it). - * @see jobUrlsChanged - */ - void emitJobUrlsChanged(); - - /** - * Whether or not a JobTracker will be needed. This will occur if there are no useful registered - * services. For example, this would occur if Plasma has "Show application jobs/file transfers" disabled. - * In which case, returning true here would be expected. This way KDynamicJobTracker can create a - * KWidgetJobTracker for each job (shows a dialog for each job). - * @return if a proper job tracker needs to be created by something. - */ - bool requiresJobTracker(); - - /** - * Only used over D-BUS merely for debugging purposes. - * Lets us know which services and at which paths kuiserver - * thinks should be informed. e.g. Plasma - * (the applicationjobs dataengine), Dolphin, etc. - * @return list of currently registered services - */ - QStringList registeredJobContacts(); - -private Q_SLOTS: - - void jobFinished(JobView *jobView); - void jobChanged(uint jobId); - - - /** - * Implemented to handle the case when a client drops out. - */ - void serviceUnregistered(const QString &name); - -Q_SIGNALS: - void serviceDropped(const QString&); - - /** - * Emits a list of destination URL's that have - * jobs pertaining to them(when it changes). - */ - void jobUrlsChanged(QStringList); - -private: - - QDBusObjectPath newJob(const QString &appName, const QString &appIcon, int capabilities); - - ///< desturls - QStringList gatherJobUrls(); - - /** - * The next available(unused) unique jobId, we can use this one directly, - * just remember to increment it after you construct a job from it. - */ - uint m_jobId; - - QList m_jobViews; - /** - * Stores a relationship between the process that requested the job and - * the job itself by using the dbus service and he jobview. - */ - QHash m_jobViewsOwners; - - /** - * Contains the list of registered services. In other words, the clients - * who have "subscribed" to our D-Bus interface so they can get informed - * about changes to all the jobs. - */ - QHash m_registeredServices; - - QDBusServiceWatcher *m_serviceWatcher; -}; - -Q_DECLARE_METATYPE(JobView*) - -#endif // PROGRESSLISTMODEL_H diff --git a/kuiserver/requestviewcallwatcher.cpp b/kuiserver/requestviewcallwatcher.cpp deleted file mode 100644 index 123ccdef..00000000 --- a/kuiserver/requestviewcallwatcher.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/***************************************************************************** - * Copyright (C) 2009 by Shaun Reich * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 2 of * - * the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - *****************************************************************************/ - -#include -#include "requestviewcallwatcher.h" -#include "jobview.h" - -RequestViewCallWatcher::RequestViewCallWatcher(JobView* jobView, const QString& service, - const QDBusPendingCall& call, QObject* parent) - : QDBusPendingCallWatcher(call, parent), - m_jobView(jobView), - m_service(service) -{ - connect(this, SIGNAL(finished(QDBusPendingCallWatcher*)), - this, SLOT(slotFinished())); -} - - -#include "moc_requestviewcallwatcher.cpp" diff --git a/kuiserver/requestviewcallwatcher.h b/kuiserver/requestviewcallwatcher.h deleted file mode 100644 index 06d256fd..00000000 --- a/kuiserver/requestviewcallwatcher.h +++ /dev/null @@ -1,53 +0,0 @@ -/***************************************************************************** - * Copyright (C) 2009 by Shaun Reich * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 2 of * - * the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - *****************************************************************************/ - - -#ifndef REQUESTVIEWCALLWATCHER_H -#define REQUESTVIEWCALLWATCHER_H - -#include -class JobView; - -class RequestViewCallWatcher : public QDBusPendingCallWatcher -{ - Q_OBJECT - -public: - RequestViewCallWatcher(JobView* jobView, const QString& service, const QDBusPendingCall& call, QObject* parent); - - - JobView* jobView() const { - return m_jobView; - } - QString service() const { - return m_service; - } - -signals: - void callFinished(RequestViewCallWatcher*); - -private slots: - void slotFinished() { - emit callFinished(this); - } - -private: - JobView* m_jobView; - QString m_service; -}; - -#endif /* REQUESTVIEWCALLWATCHER_H */ diff --git a/plasma/applets/notifications/CMakeLists.txt b/plasma/applets/notifications/CMakeLists.txt index 94afbd23..1a207398 100644 --- a/plasma/applets/notifications/CMakeLists.txt +++ b/plasma/applets/notifications/CMakeLists.txt @@ -3,6 +3,7 @@ project(plasma-applet-notifications) set(notifications_SRCS notifications.cpp jobswidget.cpp + jobtrackeradaptor.cpp applicationswidget.cpp ) diff --git a/plasma/applets/notifications/applicationswidget.h b/plasma/applets/notifications/applicationswidget.h index a9ef03a6..d5b5c44f 100644 --- a/plasma/applets/notifications/applicationswidget.h +++ b/plasma/applets/notifications/applicationswidget.h @@ -71,11 +71,11 @@ private Q_SLOTS: private: QMutex m_mutex; - NotificationsWidget *m_notificationswidget; + NotificationsWidget* m_notificationswidget; QGraphicsLinearLayout* m_layout; Plasma::Label* m_label; QList m_frames; - Plasma::DataEngine *m_dataengine; + Plasma::DataEngine* m_dataengine; }; #endif // APPLICATIONSWIDGET_H diff --git a/plasma/applets/notifications/jobswidget.cpp b/plasma/applets/notifications/jobswidget.cpp index 42cb71c1..1315cdd0 100644 --- a/plasma/applets/notifications/jobswidget.cpp +++ b/plasma/applets/notifications/jobswidget.cpp @@ -18,6 +18,7 @@ #include "jobswidget.h" +#include #include #include #include @@ -117,7 +118,7 @@ JobsWidget::JobsWidget(QGraphicsItem *parent, NotificationsWidget *notifications m_notificationswidget(notificationswidget), m_layout(nullptr), m_label(nullptr), - m_dataengine(nullptr) + m_adaptor(nullptr) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_layout = new QGraphicsLinearLayout(Qt::Vertical, this); @@ -129,22 +130,21 @@ JobsWidget::JobsWidget(QGraphicsItem *parent, NotificationsWidget *notifications m_layout->addItem(m_label); setLayout(m_layout); - m_dataengine = Plasma::DataEngineManager::self()->loadEngine("applicationjobs"); - if (!m_dataengine) { - kWarning() << "Could not load applicationjobs data engine"; - return; - } + m_adaptor = new JobTrackerAdaptor(this); connect( - m_dataengine, SIGNAL(sourceAdded(QString)), - this, SLOT(sourceAdded(QString)) + m_adaptor, SIGNAL(jobAdded(QString)), + this, SLOT(slotJobAdded(QString)) ); + connect( + m_adaptor, SIGNAL(jobUpdated(QString,QVariantMap)), + this, SLOT(slotJobUpdated(QString,QVariantMap)) + ); + QDBusConnection session = QDBusConnection::sessionBus(); + session.registerObject("/JobTracker", this); } JobsWidget::~JobsWidget() { - if (m_dataengine) { - Plasma::DataEngineManager::self()->unloadEngine("applicationjobs"); - } } int JobsWidget::count() const @@ -152,7 +152,7 @@ int JobsWidget::count() const return m_frames.size(); } -void JobsWidget::sourceAdded(const QString &name) +void JobsWidget::slotJobAdded(const QString &name) { QMutexLocker locker(&m_mutex); JobFrame* frame = new JobFrame(name, this); @@ -166,11 +166,9 @@ void JobsWidget::sourceAdded(const QString &name) adjustSize(); emit countChanged(); - locker.unlock(); - m_dataengine->connectSource(name, this); } -void JobsWidget::dataUpdated(const QString &name, const Plasma::DataEngine::Data &data) +void JobsWidget::slotJobUpdated(const QString &name, const QVariantMap &data) { QMutexLocker locker(&m_mutex); foreach (JobFrame* frame, m_frames) { @@ -263,20 +261,12 @@ void JobsWidget::slotIcon0Activated() JobFrame* jobframe = qobject_cast(iconwidget0->parentObject()); Q_ASSERT(jobframe != nullptr); if (!stopped) { - Plasma::Service* plasmaservice = m_dataengine->serviceForSource(jobframe->name); - if (!plasmaservice) { - kWarning() << "Could not get service for" << jobframe->name; - } else { - plasmaservice->setParent(this); - QVariantMap plasmaserviceargs = plasmaservice->operationParameters("stop"); - (void)plasmaservice->startOperationCall("stop", plasmaserviceargs); - } + m_adaptor->stopJob(jobframe->name); } else { QMutableListIterator iter(m_frames); while (iter.hasNext()) { JobFrame* frame = iter.next(); if (frame == jobframe) { - m_dataengine->disconnectSource(frame->name, this); iter.remove(); frame->animateRemove(); break; diff --git a/plasma/applets/notifications/jobswidget.h b/plasma/applets/notifications/jobswidget.h index 33c65e2c..1ee6ef6d 100644 --- a/plasma/applets/notifications/jobswidget.h +++ b/plasma/applets/notifications/jobswidget.h @@ -19,6 +19,8 @@ #ifndef JOBSWIDGET_H #define JOBSWIDGET_H +#include "jobtrackeradaptor.h" + #include #include #include @@ -65,16 +67,16 @@ public Q_SLOTS: void slotIcon1Activated(); private Q_SLOTS: - void sourceAdded(const QString &name); - void dataUpdated(const QString &name, const Plasma::DataEngine::Data &data); + void slotJobAdded(const QString &name); + void slotJobUpdated(const QString &name, const QVariantMap &data); private: QMutex m_mutex; - NotificationsWidget *m_notificationswidget; + NotificationsWidget* m_notificationswidget; QGraphicsLinearLayout* m_layout; Plasma::Label* m_label; QList m_frames; - Plasma::DataEngine *m_dataengine; + JobTrackerAdaptor* m_adaptor; }; #endif // JOBSWIDGET_H diff --git a/plasma/applets/notifications/jobtrackeradaptor.cpp b/plasma/applets/notifications/jobtrackeradaptor.cpp new file mode 100644 index 00000000..dca0d6cc --- /dev/null +++ b/plasma/applets/notifications/jobtrackeradaptor.cpp @@ -0,0 +1,46 @@ +/* + This file is part of the KDE project + Copyright (C) 2024 Ivailo Monev + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2, as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "jobtrackeradaptor.h" + +JobTrackerAdaptor::JobTrackerAdaptor(QObject *parent) + : QDBusAbstractAdaptor(parent) +{ +} + +JobTrackerAdaptor::~JobTrackerAdaptor() +{ +} + +void JobTrackerAdaptor::addJob(const QString &name) +{ + emit jobAdded(name); +} + +void JobTrackerAdaptor::updateJob(const QString &name, const QVariantMap &data) +{ + emit jobUpdated(name, data); +} + +void JobTrackerAdaptor::stopJob(const QString &name) +{ + emit stopRequested(name); +} + +#include "moc_jobtrackeradaptor.cpp" diff --git a/plasma/applets/notifications/jobtrackeradaptor.h b/plasma/applets/notifications/jobtrackeradaptor.h new file mode 100644 index 00000000..dd6b6c13 --- /dev/null +++ b/plasma/applets/notifications/jobtrackeradaptor.h @@ -0,0 +1,47 @@ +/* + This file is part of the KDE project + Copyright (C) 2024 Ivailo Monev + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2, as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef JOBTRACKERADAPTOR_H +#define JOBTRACKERADAPTOR_H + +#include +#include + +// Adaptor class for interface org.kde.JobTracker +class JobTrackerAdaptor: public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.kde.JobTracker") +public: + JobTrackerAdaptor(QObject *parent); + ~JobTrackerAdaptor(); + +public Q_SLOTS: + void addJob(const QString &name); + void updateJob(const QString &name, const QVariantMap &data); + void stopJob(const QString &name); + +Q_SIGNALS: + void jobAdded(const QString &name); + void jobUpdated(const QString &name, const QVariantMap &data); + + void stopRequested(const QString &name); +}; + +#endif // JOBTRACKERADAPTOR_H diff --git a/plasma/dataengines/CMakeLists.txt b/plasma/dataengines/CMakeLists.txt index 00d43a5b..83ef43b4 100644 --- a/plasma/dataengines/CMakeLists.txt +++ b/plasma/dataengines/CMakeLists.txt @@ -1,2 +1 @@ -add_subdirectory(applicationjobs) add_subdirectory(notifications) diff --git a/plasma/dataengines/applicationjobs/CMakeLists.txt b/plasma/dataengines/applicationjobs/CMakeLists.txt deleted file mode 100644 index 8b1ccf01..00000000 --- a/plasma/dataengines/applicationjobs/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -project(kuiserver_engine) - -#include (KDE4Defaults) - -set(kuiserver_engine_SRCS - kuiserverengine.cpp - jobcontrol.cpp - jobaction.cpp -) - -qt4_add_dbus_adaptor(kuiserver_engine_SRCS - ${KDE4_DBUS_INTERFACES_INSTALL_DIR}/org.kde.JobView.xml - kuiserverengine.h - JobView - jobviewadaptor -) -qt4_add_dbus_adaptor(kuiserver_engine_SRCS - ${KDE4_DBUS_INTERFACES_INSTALL_DIR}/org.kde.JobViewServer.xml - kuiserverengine.h - KuiserverEngine - jobviewserveradaptor -) - -kde4_add_plugin(plasma_engine_applicationjobs ${kuiserver_engine_SRCS}) -target_link_libraries(plasma_engine_applicationjobs - KDE4::kdeui - KDE4::kio - KDE4::plasma -) - -install( - TARGETS plasma_engine_applicationjobs - DESTINATION ${KDE4_PLUGIN_INSTALL_DIR} -) -install( - FILES plasma-dataengine-applicationjobs.desktop - DESTINATION ${KDE4_SERVICES_INSTALL_DIR} -) diff --git a/plasma/dataengines/applicationjobs/Messages.sh b/plasma/dataengines/applicationjobs/Messages.sh deleted file mode 100755 index 01343d5e..00000000 --- a/plasma/dataengines/applicationjobs/Messages.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -$XGETTEXT *.cpp -o $podir/plasma_engine_kuiserver.pot diff --git a/plasma/dataengines/applicationjobs/jobaction.cpp b/plasma/dataengines/applicationjobs/jobaction.cpp deleted file mode 100644 index 80a25b0b..00000000 --- a/plasma/dataengines/applicationjobs/jobaction.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2008 Rob Scheepmaker - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License version 2 as - * published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "jobaction.h" -#include "kuiserverengine.h" - -#include - -void JobAction::start() -{ - kDebug() << "Trying to perform the action" << operationName(); - - if (!m_jobView) { - setErrorText(i18nc("%1 is the subject (can be anything) upon which the job is performed", - "The JobView for %1 cannot be found", destination())); - setError(-1); - emitResult(); - return; - } - - //TODO: check with capabilities before performing actions. - if (operationName() == "resume") { - m_jobView->requestStateChange(JobView::Running); - } else if (operationName() == "suspend") { - m_jobView->requestStateChange(JobView::Suspended); - } else if (operationName() == "stop") { - m_jobView->requestStateChange(JobView::Stopped); - //in case the app crashed and won't call terminate on the jobview. - m_jobView->terminate(i18n("Job canceled by user.")); - } - - emitResult(); -} - -#include "moc_jobaction.cpp" - diff --git a/plasma/dataengines/applicationjobs/jobaction.h b/plasma/dataengines/applicationjobs/jobaction.h deleted file mode 100644 index 13f88bcf..00000000 --- a/plasma/dataengines/applicationjobs/jobaction.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright © 2008 Rob Scheepmaker - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License version 2 as - * published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef JOBACTION_H -#define JOBACTION_H - -#include "kuiserverengine.h" - -#include - -class JobAction : public Plasma::ServiceJob -{ - Q_OBJECT - - public: - JobAction(JobView *jobView, - const QString& operation, - const QMap& parameters, - QObject* parent = 0) - : ServiceJob(jobView->objectName(), operation, parameters, parent), - m_jobView(jobView) - { - } - - void start(); - - private: - JobView *m_jobView; -}; - -#endif //JOBVIEW_H diff --git a/plasma/dataengines/applicationjobs/jobcontrol.cpp b/plasma/dataengines/applicationjobs/jobcontrol.cpp deleted file mode 100644 index cfe2d5c8..00000000 --- a/plasma/dataengines/applicationjobs/jobcontrol.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright © 2008 Rob Scheepmaker - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License version 2 as - * published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "jobcontrol.h" -#include "jobaction.h" -#include "kuiserverengine.h" - -JobControl::JobControl(QObject* parent, JobView *jobView) - : Plasma::Service(parent), - m_jobView(jobView) -{ - setName("applicationjobs"); - setOperationNames( - QStringList() - << "resume" - << "suspend" - << "stop" - ); - setDestination(jobView->objectName()); -} - -Plasma::ServiceJob* JobControl::createJob(const QString& operation, - const QMap& parameters) -{ - return new JobAction(m_jobView, operation, parameters, this); -} - -#include "moc_jobcontrol.cpp" - diff --git a/plasma/dataengines/applicationjobs/jobcontrol.h b/plasma/dataengines/applicationjobs/jobcontrol.h deleted file mode 100644 index 4d0d02eb..00000000 --- a/plasma/dataengines/applicationjobs/jobcontrol.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright © 2008 Rob Scheepmaker - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License version 2 as - * published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef JOBCONTROL_H -#define JOBCONTROL_H - -#include - -class JobView; - -class JobControl : public Plasma::Service -{ - Q_OBJECT - - public: - JobControl(QObject* parent, JobView *jobview); - - protected: - Plasma::ServiceJob* createJob(const QString& operation, - const QMap& parameters); - - private: - JobView *m_jobView; - -}; - -#endif // JOBCONTROL_H diff --git a/plasma/dataengines/applicationjobs/kuiserverengine.cpp b/plasma/dataengines/applicationjobs/kuiserverengine.cpp deleted file mode 100644 index 838015f0..00000000 --- a/plasma/dataengines/applicationjobs/kuiserverengine.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Copyright © 2008 Rob Scheepmaker - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License version 2 as - * published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "jobviewadaptor.h" -#include "jobviewserveradaptor.h" -#include "kuiserverengine.h" -#include "jobcontrol.h" - -#include -#include -#include - -#include -#include - - -uint JobView::s_jobId = 0; - -static const int UPDATE_INTERVAL = 100; - -JobView::JobView(QObject* parent) - : Plasma::DataContainer(parent), - m_capabilities(-1), - m_percent(0), - m_speed(0), - m_totalBytes(0), - m_processedBytes(0), - m_state(UnknownState), - m_bytesUnitId(-1), - m_unitId(0) -{ - m_jobId = ++s_jobId; - setObjectName(QString("Job %1").arg(s_jobId)); - - new JobViewAdaptor(this); - - m_objectPath.setPath(QString("/DataEngine/applicationjobs/JobView_%1").arg(m_jobId)); - QDBusConnection::sessionBus().registerObject(m_objectPath.path(), this); - - setSuspended(false); -} - -JobView::~JobView() -{ - QDBusConnection::sessionBus().unregisterObject(m_objectPath.path(), QDBusConnection::UnregisterTree); -} - -uint JobView::jobId() const -{ - return m_jobId; -} - -void JobView::scheduleUpdate() -{ - if (!m_updateTimer.isActive()) { - m_updateTimer.start(UPDATE_INTERVAL, this); - } -} - -void JobView::timerEvent(QTimerEvent *event) -{ - if (event->timerId() == m_updateTimer.timerId()) { - m_updateTimer.stop(); - checkForUpdate(); - - if (m_state == Stopped) { - emit becameUnused(objectName()); - } - } else { - Plasma::DataContainer::timerEvent(event); - } -} - -void JobView::terminate(const QString &errorMessage) -{ - setData("error", errorMessage); - QTimer::singleShot(0, this, SLOT(finished())); -} - -void JobView::finished() -{ - if (m_state != Stopped) { - m_state = Stopped; - setData("state", "stopped"); - setData("speed", QVariant()); - setData("numericSpeed", QVariant()); - scheduleUpdate(); - } -} - -JobView::State JobView::state() -{ - return m_state; -} - -void JobView::setSuspended(bool suspended) -{ - if (suspended) { - if (m_state != Suspended) { - m_state = Suspended; - setData("state", "suspended"); - setData("speed", QVariant()); - setData("numericSpeed", QVariant()); - scheduleUpdate(); - } - } else if (m_state != Running) { - m_state = Running; - setData("state", "running"); - setData("speed", speedString()); - setData("numericSpeed", m_speed); - scheduleUpdate(); - } -} - -int JobView::unitId(const QString &unit) -{ - int id = 0; - if (m_unitMap.contains(unit)) { - id = m_unitMap.value(unit); - } else { - id = m_unitId; - setData(QString("totalUnit%1").arg(id), unit); - setData(QString("totalAmount%1").arg(id), 0); - setData(QString("processedUnit%1").arg(id), unit); - setData(QString("processedAmount%1").arg(id), 0); - m_unitMap.insert(unit, m_unitId); - - if (unit == "bytes") { - m_bytesUnitId = id; - } - - ++m_unitId; - scheduleUpdate(); - } - - return id; -} - -void JobView::updateEta() -{ - if (m_speed < 1) { - setData("eta", 0); - return; - } - - if (m_totalBytes < 1) { - setData("eta", 0); - return; - } - - const qlonglong remaining = 1000 * (m_totalBytes - m_processedBytes); - setData("eta", remaining / m_speed); -} - -void JobView::setTotalAmount(qlonglong amount, const QString &unit) -{ - const int id = unitId(unit); - const QString amountString = QString("totalAmount%1").arg(id); - const qlonglong prevTotal = data().value(amountString).toLongLong(); - if (prevTotal != amount) { - if (id == m_bytesUnitId) { - m_totalBytes = amount; - updateEta(); - } - - setData(amountString, amount); - scheduleUpdate(); - } -} - -void JobView::setProcessedAmount(qlonglong amount, const QString &unit) -{ - const int id = unitId(unit); - const QString processedString = QString("processedAmount%1").arg(id); - const qlonglong prevTotal = data().value(processedString).toLongLong(); - if (prevTotal != amount) { - if (id == m_bytesUnitId) { - m_processedBytes = amount; - updateEta(); - } - - setData(processedString, amount); - scheduleUpdate(); - } -} - -void JobView::setDestUrl(const QString &destUrl) -{ - if (m_destUrl != destUrl) { - setData("destUrl", destUrl); - scheduleUpdate(); - } -} - -void JobView::setPercent(uint percent) -{ - if (m_percent != percent) { - m_percent = percent; - setData("percentage", m_percent); - scheduleUpdate(); - } -} - -void JobView::setSpeed(qlonglong bytesPerSecond) -{ - if (m_speed != bytesPerSecond) { - m_speed = bytesPerSecond; - setData("speed", speedString()); - setData("numericSpeed", m_speed); - - if (m_bytesUnitId > -1) { - updateEta(); - } - - scheduleUpdate(); - } -} - -QString JobView::speedString() const -{ - return i18nc("Bytes per second", "%1/s", KGlobal::locale()->formatByteSize(m_speed)); -} - -void JobView::setInfoMessage(const QString &infoMessage) -{ - if (data().value("infoMessage") != infoMessage) { - setData("infoMessage", infoMessage); - scheduleUpdate(); - } -} - -bool JobView::setDescriptionField(uint number, const QString &name, const QString &value) -{ - const QString labelString = QString("label%1").arg(number); - const QString labelNameString = QString("labelName%1").arg(number); - - if (!data().contains(labelNameString) || data().value(labelString) != value) { - setData(labelNameString, name); - setData(labelString, value); - scheduleUpdate(); - } - return true; -} - -void JobView::clearDescriptionField(uint number) -{ - const QString labelString = QString("label%1").arg(number); - const QString labelNameString = QString("labelName%1").arg(number); - - setData(labelNameString, QVariant()); - setData(labelString, QVariant()); - scheduleUpdate(); -} - -void JobView::setAppName(const QString &appName) -{ - // don't need to update, this is only set once at creation - setData("appName", appName); -} - -void JobView::setAppIconName(const QString &appIconName) -{ - // don't need to update, this is only set once at creation - setData("appIconName", appIconName); -} - -void JobView::setCapabilities(int capabilities) -{ - if (m_capabilities != uint(capabilities)) { - m_capabilities = capabilities; - setData("suspendable", m_capabilities & KJob::Suspendable); - setData("killable", m_capabilities & KJob::Killable); - scheduleUpdate(); - } -} - -QDBusObjectPath JobView::objectPath() const -{ - return m_objectPath; -} - -void JobView::requestStateChange(State state) -{ - switch (state) { - case Running: - emit resumeRequested(); - break; - case Suspended: - emit suspendRequested(); - break; - case Stopped: - emit cancelRequested(); - break; - default: - break; - } -} - -KuiserverEngine::KuiserverEngine(QObject* parent, const QVariantList& args) - : Plasma::DataEngine(parent, args) -{ - new JobViewServerAdaptor(this); - - QDBusConnection bus = QDBusConnection::sessionBus(); - bus.registerObject(QLatin1String("/DataEngine/applicationjobs/JobWatcher"), this); - - setMinimumPollingInterval(500); - - m_pendingJobsTimer.setSingleShot(true); - m_pendingJobsTimer.setInterval(500); - connect(&m_pendingJobsTimer, SIGNAL(timeout()), this, SLOT(processPendingJobs())); -} - -KuiserverEngine::~KuiserverEngine() -{ - QDBusConnection::sessionBus() - .unregisterObject(QLatin1String("/DataEngine/applicationjobs/JobWatcher"), QDBusConnection::UnregisterTree); - qDeleteAll(m_pendingJobs); -} - -QDBusObjectPath KuiserverEngine::requestView(const QString &appName, - const QString &appIconName, int capabilities) -{ - JobView *jobView = new JobView(this); - jobView->setAppName(appName); - jobView->setAppIconName(appIconName); - jobView->setCapabilities(capabilities); - connect(jobView, SIGNAL(becameUnused(QString)), this, SLOT(removeSource(QString))); - - m_pendingJobs << jobView; - m_pendingJobsTimer.start(); - - return jobView->objectPath(); -} - -void KuiserverEngine::processPendingJobs() -{ - foreach (JobView *jobView, m_pendingJobs) { - if (jobView->state() == JobView::Stopped) { - delete jobView; - } else { - addSource(jobView); - } - } - - m_pendingJobs.clear(); -} - -Plasma::Service* KuiserverEngine::serviceForSource(const QString& source) -{ - JobView *jobView = qobject_cast(containerForSource(source)); - if (jobView) { - return new JobControl(this, jobView); - } - return DataEngine::serviceForSource(source); -} - -void KuiserverEngine::init() -{ - // register with the Job UI Serer to receive notifications of jobs becoming available - QDBusInterface interface("org.kde.kuiserver", "/JobViewServer"/* object to connect to */, - ""/* use the default interface */, QDBusConnection::sessionBus(), this); - interface.asyncCall(QLatin1String("registerService"), QDBusConnection::sessionBus().baseService(), "/DataEngine/applicationjobs/JobWatcher"); -} - -K_EXPORT_PLASMA_DATAENGINE(kuiserver, KuiserverEngine) - -#include "moc_kuiserverengine.cpp" diff --git a/plasma/dataengines/applicationjobs/kuiserverengine.h b/plasma/dataengines/applicationjobs/kuiserverengine.h deleted file mode 100644 index 1747123e..00000000 --- a/plasma/dataengines/applicationjobs/kuiserverengine.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright © 2008 Rob Scheepmaker - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License version 2 as - * published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef KUISERVERENGINE_H -#define KUISERVERENGINE_H - -#include -#include -#include - -#include -#include - -class JobView; - -namespace Plasma -{ - class Service; -} // namespace Plasma - -class KuiserverEngine : public Plasma::DataEngine -{ - Q_OBJECT - Q_CLASSINFO("D-Bus Interface", "org.kde.JobViewServer") - -public: - KuiserverEngine(QObject* parent, const QVariantList& args); - ~KuiserverEngine(); - - void init(); - - QDBusObjectPath requestView(const QString &appName, const QString &appIconName, - int capabilities); - Plasma::Service* serviceForSource(const QString& source); - -private Q_SLOTS: - void processPendingJobs(); - -private: - QTimer m_pendingJobsTimer; - QList m_pendingJobs; -}; - -class JobView : public Plasma::DataContainer -{ - Q_OBJECT - Q_CLASSINFO("D-Bus Interface", "org.kde.JobView") - -public: - enum State { - UnknownState = -1, - Running = 0, - Suspended = 1, - Stopped = 2 - }; - - JobView(QObject *parent = 0); - ~JobView(); - - uint jobId() const; - JobView::State state(); - - void setTotalAmount(qlonglong amount, const QString &unit); - QString totalAmountSize() const; - QString totalAmountFiles() const; - - void setProcessedAmount(qlonglong amount, const QString &unit); - - void setSpeed(qlonglong bytesPerSecond); - QString speedString() const; - - void setInfoMessage(const QString &infoMessage); - QString infoMessage() const; - - bool setDescriptionField(uint number, const QString &name, const QString &value); - void clearDescriptionField(uint number); - - void setAppName(const QString &appName); - void setAppIconName(const QString &appIconName); - void setCapabilities(int capabilities); - void setPercent(uint percent); - void setSuspended(bool suspended); - - // vestigal, required to implement this dbus interface - void setDestUrl(const QString &destUrl); - - void terminate(const QString &errorMessage); - - QDBusObjectPath objectPath() const; - - void requestStateChange(State state); - -public Q_SLOTS: - void finished(); - -Q_SIGNALS: - void suspendRequested(); - void resumeRequested(); - void cancelRequested(); - -protected: - void timerEvent(QTimerEvent *event); - -private: - void scheduleUpdate(); - void updateEta(); - int unitId(const QString &unit); - - QDBusObjectPath m_objectPath; - QBasicTimer m_updateTimer; - - uint m_capabilities; - uint m_percent; - uint m_jobId; - - // for ETA calculation we cache these values - qlonglong m_speed; - qlonglong m_totalBytes; - qlonglong m_processedBytes; - - State m_state; - - QString m_destUrl; - QMap m_unitMap; - int m_bytesUnitId; - int m_unitId; - - static uint s_jobId; -}; - -#endif diff --git a/plasma/dataengines/applicationjobs/plasma-dataengine-applicationjobs.desktop b/plasma/dataengines/applicationjobs/plasma-dataengine-applicationjobs.desktop deleted file mode 100644 index 53c1b3c9..00000000 --- a/plasma/dataengines/applicationjobs/plasma-dataengine-applicationjobs.desktop +++ /dev/null @@ -1,147 +0,0 @@ -[Desktop Entry] -Name=Application Job Information -Name[ar]=معلومات مهام التطبيقات -Name[ast]=Información de xera d'aplicación -Name[be@latin]=Źviestki pra zadańnie aplikacyi -Name[bs]=podaci o poslovima programâ -Name[ca]=Informació de les tasques de les aplicacions -Name[ca@valencia]=Informació de les tasques de les aplicacions -Name[cs]=Informace o práci aplikace -Name[csb]=Wëdowiédzô ò robòce aplikacëjów -Name[da]=Information om programjob -Name[de]=Anwendungsaufgaben-Informationen -Name[el]=Πληροφορίες εργασιών εφαρμογών -Name[en_GB]=Application Job Information -Name[eo]=Aplikaĵaj Taskaj Informoj -Name[es]=Información de tarea de aplicación -Name[et]=Rakenduste tööde teave -Name[eu]=Aplikazioko lanei buruzko informazioa -Name[fi]=Sovellustyötiedot -Name[fr]=Informations sur les tâches d'applications en cours d'exécution -Name[fy]=Programma taak ynformaasje -Name[ga]=Eolas Faoi Jabanna Feidhmchláir -Name[gl]=Información de tarefas de programa -Name[gu]=કાર્યક્રમ કાર્ય માહિતી -Name[he]=מידע אודות עבודת יישום -Name[hi]=अनुप्रयोग कार्य जानकारी -Name[hne]=अनुपरयोग काम सूचना -Name[hr]=Informacije o poslovima aplikacija -Name[hu]=Az alkalmazások jellemzői -Name[ia]=Information de travalio de application -Name[id]=Informasi Tugas Aplikasi -Name[is]=Tilkynningar um verkefni forrita -Name[it]=Informazioni sui processi delle applicazioni -Name[ja]=アプリケーションのジョブ情報 -Name[kk]=Қолданба тапсырмасының ақпараты -Name[km]=ព័ត៌មាន​ការងារ​របស់​កម្មវិធី -Name[kn]=ಅನ್ವಯ ಕಾರ್ಯ ಮಾಹಿತಿ -Name[ko]=프로그램 작업 정보 -Name[ku]=Agahiyên Karê Sepanê -Name[lt]=Programos darbo informacija -Name[lv]=Programmas darba informācija -Name[ml]=പ്രയോഗ ജോലി അറിയിപ്പുകള്‍ -Name[mr]=अनुप्रयोग कार्यविषयी माहिती -Name[nb]=Informasjon om programjobb -Name[nds]=Programm-Opgaavinformatschoon -Name[nl]=Programmataakmeldingen -Name[nn]=Informasjon om programjobb -Name[or]=ପ୍ରୟୋଗ କାର୍ଯ୍ୟ ସୂଚନା -Name[pa]=ਐਪਲੀਕੇਸ਼ਨ ਜਾਬ ਜਾਣਕਾਰੀ -Name[pl]=Informacja o zadaniu programu -Name[pt]=Informação da Tarefa da Aplicação -Name[pt_BR]=Informações da tarefa do aplicativo -Name[ro]=Informație despre sarcina aplicației -Name[ru]=Системные уведомления -Name[si]=යෙදුම් කාර්‍යය තොරතුරු -Name[sk]=Informácie o aplikácii -Name[sl]=Opravila programov -Name[sr]=подаци о пословима програма̂ -Name[sr@ijekavian]=подаци о пословима програма̂ -Name[sr@ijekavianlatin]=podaci o poslovima programâ̂ -Name[sr@latin]=podaci o poslovima programâ̂ -Name[sv]=Information om programjobb -Name[ta]=பயன்பாட்டு பணி விவரம் -Name[tg]=Иттилооти корҳои барнома -Name[th]=ข้อมูลงานของโปรแกรม -Name[tr]=Uygulama Görev Bilgileri -Name[ug]=پروگرامما خىزمەت ئۇچۇرى -Name[uk]=Відомості про завдання програми -Name[vi]=Thông tin công việc ứng dụng -Name[wa]=Pondants et djondants so les bouyes des programes -Name[x-test]=xxApplication Job Informationxx -Name[zh_CN]=程序任务信息 -Name[zh_TW]=應用程式工作資訊 -Comment=Application job updates (via kuiserver) -Comment[ar]=تحديثات مهام التطبيقات (عن طريق kuiserver) -Comment[ast]=Anovamientos de l'aplicación (vía kuiserver) -Comment[bs]=Ažuriranja programskih poslova (preko KUI‑servera) -Comment[ca]=Actualització de treballs d'aplicacions (via kuiserver) -Comment[ca@valencia]=Actualització de treballs d'aplicacions (via kuiserver) -Comment[cs]=Aktualizace úloh aplikací (pomocí kuiserver) -Comment[da]=Jobopdateringer for program (via kuiserver) -Comment[de]=Aktualisierung von Anwendungs-Aktionen (via kuiserver) -Comment[el]=Ενημέρωση εργασιών εφαρμογών (μέσω kuiserver) -Comment[en_GB]=Application job updates (via kuiserver) -Comment[eo]=Apikaĵaj taskoj ĝisdatigitaj (per kuiserver) -Comment[es]=Actualizaciones de la aplicación (vía kuiserver) -Comment[et]=Rakenduse töö uuendused (kuiserver'i kaudu) -Comment[eu]=Aplikazioko lanen eguneratzeak (kuiserver bidez) -Comment[fi]=Sovellustyöpäivitykset (kuiserver-palvelimen kautta) -Comment[fr]=Mise à jours des tâches d'application (via « kuiserver ») -Comment[fy]=Applikaasje taak fernijing (mei kuiserver) -Comment[gl]=Actualización de tarefa do programa (mediante kuiserver) -Comment[he]=עידכוני עבודת יישום (באמצעות kuiserver) -Comment[hr]=Ažuriranja poslova aplikacija (preko kuiservera) -Comment[hu]=Feladatfrissítő (a kuiserveren keresztül) -Comment[ia]=Actualisationes de travalio de application (via kuiserver) -Comment[id]=Tugas aplikasi dimutakhirkan (via kuiserver) -Comment[is]=Uppfærslutilkynningar um verkefni forrita (með kuiserver) -Comment[it]=Aggiornamenti sui processi delle applicazioni (via kuiserver) -Comment[ja]=アプリケーションジョブ更新 (kuiserver 経由) -Comment[kk]=Қолданба тапсырмасын жаңарту (kuiserver арқылы) -Comment[km]=បច្ចុប្បន្នភាព​​ការងារ​របស់​កម្មវិធី (តាមរយៈ kuiserver) -Comment[kn]=ಅನ್ವಯ ಕಾರ್ಯ ಅಪ್‌ಡೇಟ್‌ಗಳು (kuiserver ಮೂಲಕ) -Comment[ko]=프로그램 작업 업데이트 (kuiserver를 통하여) -Comment[lt]=Programų darbų atnaujinimai (per kuiserver) -Comment[lv]=Programmas darba atjauninājumu (izm. kuiserver) -Comment[mai]=अनुप्रयोग कार्य अद्यतन (kuiserver के द्वारा) -Comment[ml]=പ്രയോഗ ജോലിയിലെ മാറ്റങ്ങള്‍ (കൂയിസെര്‍വര്‍ വഴി) -Comment[mr]=अनुप्रयोग कार्य अद्ययावत माहिती (kuiserver द्वारे) -Comment[nb]=Programjobb-oppdateringer (via kuiserver) -Comment[nds]=Programmopgaav-Opfrischen (över »kuiserver«) -Comment[nl]=Applicatiejob bijwerken (via kuiserver) -Comment[nn]=Oppdateringar for programjobbar (gjennom kuiserver) -Comment[pa]=ਐਪਲੀਕੇਸ਼ਨ ਜਾਬ ਅੱਪਡੇਟ (kuiserver ਰਾਹੀਂ) -Comment[pl]=Uaktualnienia zadań programu (przez kuiserver) -Comment[pt]=Actualizações das tarefas da aplicação (através do 'kuiserver') -Comment[pt_BR]=Atualizações de tarefas de aplicativos (via kuiserver) -Comment[ro]=Actualizări pentru sarcina aplicației (via kuiserver) -Comment[ru]=Обновление заданий приложений (с помощью диспетчера заданий) -Comment[si]=යෙදුම් කාර්‍ය යාවත්කාලීන (kuiserver වෙතින්) -Comment[sk]=Aktualizácie úloh aplikácií (pomocou kuiserver) -Comment[sl]=Obveščanje o opravilih programov (prek KUIServer) -Comment[sr]=Ажурирања програмских послова (преко КУИ‑сервера) -Comment[sr@ijekavian]=Ажурирања програмских послова (преко КУИ‑сервера) -Comment[sr@ijekavianlatin]=Ažuriranja programskih poslova (preko KUIServera) -Comment[sr@latin]=Ažuriranja programskih poslova (preko KUIServera) -Comment[sv]=Uppdateringar av information om programjobb (via kuiserver) -Comment[tg]=Иттилооти амалҳои система (via kuiserver) -Comment[th]=ปรับปรุงงานของโปรแกรม (ผ่านทาง kuiserver) -Comment[tr]=Uygulama görevi güncellemeleri (kuiserver ile) -Comment[ug]=پروگرامما ۋەزىپىسى يېڭىلاندى(kuiserver ئارقىلىق) -Comment[uk]=Оновлення завдань програми (через kuiserver) -Comment[wa]=Metaedjes a djoû des bouyes des programes (via kuiserver) -Comment[x-test]=xxApplication job updates (via kuiserver)xx -Comment[zh_CN]=提供程序任务更新信息(通过 kuiserver) -Comment[zh_TW]=應用程式工作更新(透過 kuiserver) -Type=Service -X-KDE-ServiceTypes=Plasma/DataEngine -Icon=tool-animator -X-KDE-Library=plasma_engine_applicationjobs - -X-KDE-PluginInfo-Author= -X-KDE-PluginInfo-Email= -X-KDE-PluginInfo-Name=applicationjobs -X-KDE-PluginInfo-Version= -X-KDE-PluginInfo-Website= -X-KDE-PluginInfo-Category=