2 // This file is part of the aMule Project.
4 // Copyright (c) 2010 Werner Mahr (Vollstrecker) <amule@vollstreckernet.de>
6 // Any parts of this program contributed by third-party developers are copyrighted
7 // by their respective authors.
9 // This program is free software; you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation; either version 3 of the License, or
12 // (at your option) any later version.
14 // This program is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
19 // You should have received a copy of the GNU General Public License
20 // along with this program; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 #include "plasma-engine-plasmamule.h"
27 #include <knotification.h>
28 #include <plasma/datacontainer.h>
30 #include <QtDBus/QDBusInterface>
34 PlasmaMuleEngine::PlasmaMuleEngine (QObject
* parent
, const QVariantList
& args
)
35 : Plasma::DataEngine (parent
, args
)
38 setMinimumPollingInterval (0);
41 bool PlasmaMuleEngine::sourceRequestEvent (const QString
&name
)
43 return updateSourceEvent (name
);
46 QStringList
PlasmaMuleEngine::sources() const
48 return QStringList() << "categories"
49 << "clients_in_up_queue"
61 << "session_bytes_downloaded"
62 << "session_bytes_uploaded"
63 << "shared_files_count"
64 << "total_bytes_downloaded"
65 << "total_bytes_uploaded"
71 void PlasmaMuleEngine::init ()
73 Home
= QDir::homePath();
75 QTimer
*timer
= new QTimer(this);
76 connect(timer
, SIGNAL(timeout()), this, SLOT(timeout()));
79 setData(I18N_NOOP("uptime"), 0);
81 if (!Home
.endsWith("/"))
90 void PlasmaMuleEngine::regDbus ()
92 new EngineAdaptor(this);
93 QDBusConnection dbus
= QDBusConnection::sessionBus();
94 dbus
.registerObject("/Link", this);
95 kDebug() << "Registerred dbus: " << dbus
.registerService("org.amule.engine");
98 void PlasmaMuleEngine::engine_add_link (const QString
&link
, const int &category
)
100 kDebug() << "Received Link " << link
<< " with cat " << category
;
102 QString link_to_write
;
104 if (link
.startsWith("ed2k:") || link
.startsWith("magnet:"))
106 link_to_write
= link
;
108 KNotification::event(KNotification::Notification
, QString("%1 can't be handled by now.").arg(link
));
114 link_to_write
.append(QString(":%1").arg(category
));
117 QFile
link_file (Home
+ ".aMule/ED2KLinks");
119 if (link_file
.exists() && !link_file
.open (QIODevice::WriteOnly
| QIODevice::Append
))
121 KNotification::event(KNotification::Notification
, QString("Problem opening %1 for writing").arg(link_file
.fileName()));
125 QTextStream
out (&link_file
);
126 out
<< link_to_write
<< "\n";
128 KNotification::event(KNotification::Notification
, QString("Downloading %1").arg(link
));
131 void PlasmaMuleEngine::initVals ()
133 QStringList categories
;
134 QStringList tempIncomingDirs
;
135 QStringList cleanedIncomingDirs
;
136 QStringList::const_iterator constIterator
;
138 QFile
config_file (Home
+ ".aMule/amule.conf");
140 if (!config_file
.open (QIODevice::ReadOnly
| QIODevice::Text
))
142 setData(I18N_NOOP ("config_found"), FALSE
);
146 categories
.append ("default");
148 QTextStream
in (&config_file
);
151 QString line
= in
.readLine();
152 if (line
.startsWith ("OnlineSignature="))
154 if (line
.remove (0,line
.indexOf ("=")+1) == "1")
160 setData(I18N_NOOP ("os_active"), m_OSActive
);
161 } else if (line
.contains ("OSDirectory"))
163 m_OSFile
.setFileName(line
.remove (0,line
.indexOf ("=")+1) + "amulesig.dat");
164 } else if (line
.contains ("Incoming"))
166 if (!tempIncomingDirs
.contains(line
.remove (0,line
.indexOf ("=")+1)))
168 tempIncomingDirs
.append(line
.remove (0,line
.indexOf ("=")+1));
170 } else if (line
.startsWith ("Title"))
172 categories
.append (line
.remove (0,line
.indexOf ("=")+1));
176 setData(I18N_NOOP ("categories"), categories
);
178 if (m_OSActive
&& !m_dirwatcher
.contains(m_OSFile
.fileName()))
180 kDebug() << "Registering: " << m_OSFile
.fileName() << " for monitoring";
181 m_dirwatcher
.addFile (m_OSFile
.fileName());
182 connect (&m_dirwatcher
, SIGNAL (dirty (const QString
&)), SLOT (file_changed (const QString
&)));
183 connect (&m_dirwatcher
, SIGNAL (created (const QString
&)), SLOT (new_file (const QString
&)));
186 for (constIterator
= tempIncomingDirs
.constBegin(); constIterator
!= tempIncomingDirs
.constEnd(); constIterator
++)
188 if (!m_dirwatcher
.contains(*constIterator
))
190 kDebug() << "Registering: " << *constIterator
<< " for monitoring";
191 cleanedIncomingDirs
.append (*constIterator
);
192 m_dirwatcher
.addDir (*constIterator
, KDirWatch::WatchFiles
);
194 cleanedIncomingDirs
.append (*constIterator
);
198 for (constIterator
= m_incoming_dirs
.constBegin(); constIterator
!= m_incoming_dirs
.constEnd(); constIterator
++)
200 if (!cleanedIncomingDirs
.contains (*constIterator
))
202 kDebug() << "Removing " << *constIterator
<< " from monitored dirs";
203 m_dirwatcher
.removeDir (*constIterator
);
207 m_incoming_dirs
= cleanedIncomingDirs
;
208 config_file
.close ();
209 setName("plasmamule");
210 setData(I18N_NOOP ("config_found"), TRUE
);
211 scheduleSourcesUpdated();
214 void PlasmaMuleEngine::file_changed (const QString
&path
)
216 if (path
== m_OSFile
.fileName())
218 kDebug() << "Rereading " << path
;
219 updateSourceEvent ("dummy");
223 void PlasmaMuleEngine::new_file (const QString
&path
)
225 if (path
!= m_OSFile
.fileName())
227 kDebug() << "File " << path
<< "was created";
228 KNotification::event(KNotification::Notification
, QString("Finished Download of %1").arg(path
));
232 void PlasmaMuleEngine::timeout()
237 bool PlasmaMuleEngine::updateSourceEvent(const QString
&name
)
241 if (m_OSFile
.open (QIODevice::ReadOnly
| QIODevice::Text
) && m_OSActive
)
243 QTextStream
in (&m_OSFile
);
244 setData(I18N_NOOP("ed2k_state"), in
.readLine().toInt());
245 setData(I18N_NOOP("ed2k_server_name"), in
.readLine());
246 setData(I18N_NOOP("ed2k_server_ip"), in
.readLine());
247 setData(I18N_NOOP("ed2k_server_port"), in
.readLine().toInt());
248 setData(I18N_NOOP("ed2k_id_high_low"), in
.readLine());
249 setData(I18N_NOOP("kad_status"), in
.readLine().toInt());
250 setData(I18N_NOOP("down_speed"), in
.readLine().toDouble());
251 setData(I18N_NOOP("up_speed"), in
.readLine().toDouble());
252 setData(I18N_NOOP("clients_in_up_queue"), in
.readLine().toInt());
253 setData(I18N_NOOP("shared_files_count"), in
.readLine().toInt());
254 setData(I18N_NOOP("nickname"), in
.readLine());
255 setData(I18N_NOOP("total_bytes_downloaded"), in
.readLine().toLongLong());
256 setData(I18N_NOOP("total_bytes_uploaded"), in
.readLine().toLongLong());
257 setData(I18N_NOOP("version"), in
.readLine());
258 setData(I18N_NOOP("session_bytes_downloaded"), in
.readLine().toLongLong());
259 setData(I18N_NOOP("session_bytes_uploaded"), in
.readLine().toLongLong());
260 setData(I18N_NOOP("uptime"), in
.readLine().toInt());
262 scheduleSourcesUpdated();
269 K_EXPORT_PLASMA_DATAENGINE(plasmamule
, PlasmaMuleEngine
)
271 EngineAdaptor::EngineAdaptor(QObject
*parent
): QDBusAbstractAdaptor(parent
)
273 setAutoRelaySignals(true);
276 EngineAdaptor::~EngineAdaptor()
280 void EngineAdaptor::engine_add_link(const QString
&link
, const int &category
)
282 QMetaObject::invokeMethod(parent(), "engine_add_link", Q_ARG(QString
, link
), Q_ARG(int, category
));
285 #include "plasma-engine-plasmamule.moc"