Upstream tarball 10153
[amule.git] / src / utils / plasmamule / plasma-engine-plasmamule.cpp
blobdd9eb48bd39ddb2181941c796b8d967c0eee4ffe
1 //
2 // This file is part of the aMule Project.
3 //
4 // Copyright (c) 2010 Werner Mahr (Vollstrecker) <amule@vollstreckernet.de>
5 //
6 // Any parts of this program contributed by third-party developers are copyrighted
7 // by their respective authors.
8 //
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.
18 //
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"
26 #include <kdebug.h>
27 #include <knotification.h>
28 #include <plasma/datacontainer.h>
30 #include <QtDBus/QDBusInterface>
31 #include <QDir>
32 #include <QTimer>
34 PlasmaMuleEngine::PlasmaMuleEngine (QObject* parent, const QVariantList& args)
35 : Plasma::DataEngine (parent, args)
37 Q_UNUSED (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"
50 << "config_found"
51 << "dbus_registerred"
52 << "down_speed"
53 << "ed2k_state"
54 << "ed2k_server_name"
55 << "ed2k_server_ip"
56 << "ed2k_server_port"
57 << "ed2k_id_high_low"
58 << "kad_status"
59 << "nickname"
60 << "os_active"
61 << "session_bytes_downloaded"
62 << "session_bytes_uploaded"
63 << "shared_files_count"
64 << "total_bytes_downloaded"
65 << "total_bytes_uploaded"
66 << "up_speed"
67 << "uptime"
68 << "version";
71 void PlasmaMuleEngine::init ()
73 Home = QDir::homePath();
75 QTimer *timer = new QTimer(this);
76 connect(timer, SIGNAL(timeout()), this, SLOT(timeout()));
77 timer->start(60000);
78 m_timer = TRUE;
79 setData(I18N_NOOP("uptime"), 0);
81 if (!Home.endsWith("/"))
83 Home += "/";
86 regDbus();
87 initVals();
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;
107 } else {
108 KNotification::event(KNotification::Notification, QString("%1 can't be handled by now.").arg(link));
109 return;
112 if (category > 0)
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()));
122 return;
125 QTextStream out (&link_file);
126 out << link_to_write << "\n";
127 link_file.close();
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);
143 return;
146 categories.append ("default");
148 QTextStream in (&config_file);
149 while (!in.atEnd())
151 QString line = in.readLine();
152 if (line.startsWith ("OnlineSignature="))
154 if (line.remove (0,line.indexOf ("=")+1) == "1")
156 m_OSActive = TRUE;
157 } else {
158 m_OSActive = FALSE;
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);
193 } else {
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()
234 initVals();
237 bool PlasmaMuleEngine::updateSourceEvent(const QString &name)
239 Q_UNUSED (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());
261 m_OSFile.close();
262 scheduleSourcesUpdated();
263 return true;
264 } else {
265 return false;
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"