Initial commit

This commit is contained in:
Albert Vaca 2013-06-06 05:57:06 +02:00
commit 4d3fe4406f
32 changed files with 1346 additions and 0 deletions

9
.gitignore vendored Normal file
View file

@ -0,0 +1,9 @@
build
android-shine.kdev4
Makefile
lib
src/Makefile
src/*_automoc.cpp*
src/moc_*.cpp
CMakeTmp
CMakeFiles

8
CMakeLists.txt Normal file
View file

@ -0,0 +1,8 @@
project(androidshine)
find_package(KDE4 REQUIRED)
include(KDE4Defaults)
include_directories(${KDE4_INCLUDES})
add_subdirectory(src)

25
letsgo.sh Executable file
View file

@ -0,0 +1,25 @@
#!/bin/sh
. ~/.bashrc
KDE_BUILD_CONFIRMATION=false
cs android-connect
if kdebuild; then
killall kded4
while killall -9 kded4; do
true
done
#qdbus org.kde.kded /kded unloadModule androidshine
#qdbus org.kde.kded /kded loadModule androidshine
kded4 2>&1 | grep -v "^kded(" &
echo ""
fi

17
src/CMakeLists.txt Normal file
View file

@ -0,0 +1,17 @@
set(kded_androidshine_SRCS fakedevicelocator.cpp echodevicelink.cpp udpdevicelink.cpp bonjourdevicelocator.cpp pausemusicpackagereceiver.cpp notificationpackagereceiver.cpp networkpackage.cpp
daemon.cpp devicelink.cpp devicelocator.cpp packagereceiver.cpp
)
kde4_add_plugin(kded_androidshine
${kded_androidshine_SRCS}
)
target_link_libraries(kded_androidshine
${KDE4_KDECORE_LIBS}
${KDE4_KDEUI_LIBS}
${QT_QTNETWORK_LIBRARY}
)
install(TARGETS kded_androidshine DESTINATION ${PLUGIN_INSTALL_DIR})
install(FILES androidshine.desktop DESTINATION ${SERVICES_INSTALL_DIR}/kded)
install(FILES androidshine.notifyrc DESTINATION ${DATA_INSTALL_DIR}/androidshine)

13
src/androidshine.desktop Normal file
View file

@ -0,0 +1,13 @@
[Desktop Entry]
Type=Service
Icon=preferences-system-power-management
X-KDE-ServiceTypes=KDEDModule
X-KDE-Library=androidshine
X-KDE-DBus-ModuleName=androidshine
X-KDE-Kded-autoload=true
X-KDE-Kded-load-on-demand=false
X-KDE-Kded-phase=1
Name=Android shine
Comment=Android shiny backend

94
src/androidshine.notifyrc Normal file
View file

@ -0,0 +1,94 @@
[Global]
IconName=pda
Name=Android Shine
Comment=Android Shine
[Event/callReceived]
Name=Calling
Comment=Someone is calling you
Action=Popup
[Event/missedCall]
Name=Missed
Comment=You have a missed call
Action=Popup
[Event/smsReceived]
Name=SMS
Comment=Someone sent you a SMS
Action=Popup
[Event/mmsReceived]
Name=MMS
Comment=Someone sent you a MMS
Action=Popup
[Event/batteryLow]
Name=Battery
Comment=Your battery is in low state (Discharging)
Action=Popup
[Event/batteryCaution]
Name=Battery
Comment=Your battery is in caution state (Discharging)
Action=Popup
[Event/battery040]
Name=Battery
Comment=Your battery is at 40% (Discharging)
Action=Popup
[Event/battery060]
Name=Battery
Comment=Your battery is at 60% (Discharging)
Action=Popup
[Event/battery080]
Name=Battery
Comment=Your battery is at 80% (Discharging)
Action=Popup
[Event/battery100]
Name=Battery
Comment=Your battery is at 100% (Discharging)
Action=Popup
[Event/batteryChargingLow]
Name=Battery
Comment=Your battery is in low state (Charging)
Action=Popup
[Event/batteryChargingCaution]
Name=Battery
Comment=Your battery is in caution state (Charging)
Action=Popup
[Event/batteryCharging040]
Name=Battery
Comment=Your battery is at 40% (Charging)
Action=Popup
[Event/batteryCharging060]
Name=Battery
Comment=Your battery is at 60% (Charging)
Action=Popup
[Event/batteryCharging080]
Name=Battery
Comment=Your battery is at 80% (Charging)
Action=Popup
[Event/batteryCharging100]
Name=Battery
Comment=Your battery is at 100% (Charging)
Action=Popup
[Event/pingReceived]
Name=Ping
Comment=Ping received
Action=Popup
[Event/unknownEvent]
Name=Unknown
Comment=Something unknown happened
Action=Popup

View file

@ -0,0 +1,52 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "bonjourdevicelocator.h"
#include "udpdevicelink.h"
BonjourDeviceLocator::BonjourDeviceLocator()
{
/*
//http://api.kde.org/4.x-api/kdelibs-apidocs/dnssd/html/index.html
DNSSD::ServiceBrowser* browser = new DNSSD::ServiceBrowser("_http._tcp");
connect(browser, SIGNAL(serviceAdded(RemoteService::Ptr)),
this, SLOT(addService(RemoteService::Ptr)));
connect(browser, SIGNAL(serviceRemoved(RemoteService::Ptr)),
this, SLOT(delService(RemoteService::Ptr)));
browser->startBrowse();
In above example addService() will
*/
}
DeviceLink* BonjourDeviceLocator::link(Device* d) {
DeviceLink* dl = new UdpDeviceLink("192.168.1.48");
return dl;
}
bool BonjourDeviceLocator::pair(Device* d) {
return true;
}
QVector<Device*> BonjourDeviceLocator::discover() {
QVector<Device*> devices;
return devices;
}

View file

@ -0,0 +1,44 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef BONJOURDEVICELOCATOR_H
#define BONJOURDEVICELOCATOR_H
#include <QObject>
#include "devicelocator.h"
class BonjourDeviceLocator
: public DeviceLocator
{
Q_OBJECT
public:
BonjourDeviceLocator();
Priority getPriority() { return PRIORITY_HIGH; }
bool canLink(Device* d) { return true; }
DeviceLink* link(Device* d);
bool pair(Device* d);
QVector<Device*> discover();
};
#endif // BONJOURDEVICELOCATOR_H

91
src/daemon.cpp Normal file
View file

@ -0,0 +1,91 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "daemon.h"
#include "networkpackage.h"
#include "notificationpackagereceiver.h"
#include "pausemusicpackagereceiver.h"
#include "bonjourdevicelocator.h"
#include "fakedevicelocator.h"
#include <QtNetwork/QUdpSocket>
#include <QFile>
#include <KDE/KIcon>
#include <iostream>
K_PLUGIN_FACTORY(AndroidShineFactory,
registerPlugin<Daemon>();)
K_EXPORT_PLUGIN(AndroidShineFactory("androidshine", "androidshine"))
Daemon::Daemon(QObject *parent, const QList<QVariant>&)
: KDEDModule(parent)
{
qDebug() << "GO GO GO!";
//TODO: Do not hardcode the load of the package receivers
packageReceivers.push_back(new NotificationPackageReceiver());
packageReceivers.push_back(new PauseMusicPackageReceiver());
//TODO: Do not hardcode the load of the device locators
deviceLocators.insert(new BonjourDeviceLocator());
deviceLocators.insert(new FakeDeviceLocator());
//TODO: Read paired devices from config
pairedDevices.push_back(new Device("MyAndroid","MyAndroid"));
//Try to link to all paired devices
foreach (Device* device, pairedDevices) {
DeviceLink* link = NULL;
foreach (DeviceLocator* locator, deviceLocators) {
if (locator->canLink(device)) {
link = locator->link(device);
if (link != NULL) break;
}
}
if (link != NULL) linkedDevices.append(link);
else qDebug() << "Could not link " + device->name();
}
foreach (DeviceLink* ld, linkedDevices) {
foreach (PackageReceiver* pr, packageReceivers) {
QObject::connect(ld,SIGNAL(receivedPackage(const NetworkPackage&)),
pr,SLOT(receivePackage(const NetworkPackage&)));
}
}
}
Daemon::~Daemon()
{
qDebug() << "SAYONARA BABY";
}

71
src/daemon.h Normal file
View file

@ -0,0 +1,71 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef DAEMON_H
#define DAEMON_H
#include <QObject>
#include <QRegExp>
#include <map>
#include <KDE/KDEDModule>
#include <KDE/KNotification>
#include "networkpackage.h"
#include <KDE/KPluginFactory>
#include <QFile>
#include <qtextstream.h>
#include <QSet>
#include "device.h"
#include "packagereceiver.h"
#include "devicelink.h"
#include "devicelocator.h"
class QUdpSocket;
class Daemon
: public KDEDModule
{
Q_OBJECT
public:
Daemon(QObject *parent, const QList<QVariant>&);
~Daemon();
private:
//All known devices (read from/stored to settings)
QVector<Device*> pairedDevices;
//Currently connected devices
QVector<DeviceLink*> linkedDevices;
//Different ways to find new devices and connect to them, ordered by priority
QSet<DeviceLocator*> deviceLocators;
//Everybody who wants to be notified about a new package
QVector<PackageReceiver*> packageReceivers;
};
#endif // UDP_WIRELESS_H

45
src/device.h Normal file
View file

@ -0,0 +1,45 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef DEVICE_H
#define DEVICE_H
#include <QString>
class Device
{
public:
Device(QString id, QString name) {
mDeviceId = id;
mDeviceName = name;
}
QString id() { return mDeviceId; }
QString name() { return mDeviceName; }
bool paired() { return mPaired; }
void pair() { mPaired = true; }
private:
bool mPaired;
QString mDeviceId;
QString mDeviceName;
};
#endif // DEVICE_H

25
src/devicelink.cpp Normal file
View file

@ -0,0 +1,25 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "devicelink.h"
DeviceLink::DeviceLink() {
//gcc complains if we don't add something to compile on a class with virtual functions
}

43
src/devicelink.h Normal file
View file

@ -0,0 +1,43 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef DEVICELINK_H
#define DEVICELINK_H
#include <QObject>
#include "networkpackage.h"
class DeviceLink
: public QObject
{
Q_OBJECT
public:
DeviceLink();
virtual void sendPackage(const NetworkPackage& np) = 0;
signals:
void receivedPackage(const NetworkPackage& np);
};
#endif // DEVICELINK_H

25
src/devicelocator.cpp Normal file
View file

@ -0,0 +1,25 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "devicelocator.h"
DeviceLocator::DeviceLocator() {
//gcc complains if we don't add something to compile on a class with virtual functions
}

53
src/devicelocator.h Normal file
View file

@ -0,0 +1,53 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef DEVICELOCATOR_H
#define DEVICELOCATOR_H
#include <qvector.h>
#include <QObject>
#include "devicelink.h"
#include "device.h"
class DeviceLocator
: public QObject
{
Q_OBJECT
public:
DeviceLocator();
virtual ~DeviceLocator() { }
enum Priority {
PRIORITY_LOW = 0, //ie: 3g
PRIORITY_MEDIUM = 50, //ie: internet
PRIORITY_HIGH = 100 //ie: lan
};
virtual Priority getPriority() = 0;
virtual bool canLink(Device* d) = 0;
virtual DeviceLink* link(Device* d) = 0;
virtual bool pair(Device* d) = 0;
virtual QVector<Device*> discover() = 0;
};
#endif // DEVICELOCATOR_H

21
src/echodevicelink.cpp Normal file
View file

@ -0,0 +1,21 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "echodevicelink.h"

36
src/echodevicelink.h Normal file
View file

@ -0,0 +1,36 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef ECHODEVICELINK_H
#define ECHODEVICELINK_H
#include "devicelink.h"
class EchoDeviceLink
: public DeviceLink
{
public:
void sendPackage(const NetworkPackage& np) {
emit receivedPackage(np);
}
};
#endif // ECHODEVICELINK_H

49
src/fakedevicelocator.cpp Normal file
View file

@ -0,0 +1,49 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "fakedevicelocator.h"
#include "echodevicelink.h"
bool FakeDeviceLocator::canLink(Device* d) {
return d->name() == "fake";
}
DeviceLink* FakeDeviceLocator::link(Device* d) {
if (d->name() == "fake") {
return new EchoDeviceLink();
} else {
return NULL;
}
}
bool FakeDeviceLocator::pair(Device* d) {
if (d->name() != "fake") {
return false;
} else {
d->pair();
return true;
}
}
QVector<Device*> FakeDeviceLocator::discover() {
QVector<Device*> devices;
devices.append(new Device("fake","Fake device"));
return devices;
}

37
src/fakedevicelocator.h Normal file
View file

@ -0,0 +1,37 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef FAKEDEVICELOCATOR_H
#define FAKEDEVICELOCATOR_H
#include "devicelocator.h"
class FakeDeviceLocator
: public DeviceLocator
{
public:
Priority getPriority() { return PRIORITY_LOW; }
bool canLink(Device* d);
DeviceLink* link(Device* d);
bool pair(Device* d);
QVector<Device*> discover();
};
#endif // FAKEDEVICELOCATOR_H

66
src/networkpackage.cpp Normal file
View file

@ -0,0 +1,66 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "networkpackage.h"
#include <qbytearray.h>
#include <qdatastream.h>
#include <QDebug>
#include <sstream>
#include <string>
#include <iostream>
NetworkPackage NetworkPackage::fromString(QByteArray s)
{
NetworkPackage pp;
//FIXME: How can I do this using Qt?
std::string stds(std::string(s.data()));
std::cout << stds << std::endl;
std::stringstream ss(stds);
ss >> pp.mId;
std::cout << pp.mId << std::endl;
ss >> pp.mDeviceId;
qDebug() << pp.mDeviceId;
ss >> pp.mTime;
std::string type;
ss >> type;
pp.mType = QString::fromStdString(type);
int bodyLenght;
ss >> bodyLenght;
char c[bodyLenght];
ss.get(); //Skip ws
ss.read(c,bodyLenght);
pp.mBody = QString::fromAscii(c,bodyLenght);
qDebug() << pp.mBody;
ss >> pp.mIsCancel;
return pp;
}

51
src/networkpackage.h Normal file
View file

@ -0,0 +1,51 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef NETWORKPACKAGE_H
#define NETWORKPACKAGE_H
#include <QString>
#include <QVariant>
class NetworkPackage
{
public:
static NetworkPackage fromString(QByteArray);
QString type() const { return mType; }
QString body() const { return mBody; }
long id() const { return mId; }
bool isCancel() const { return mIsCancel; }
private:
long mId;
long mDeviceId;
long mTime;
QString mType;
QString mBody;
QVariant mExtra;
bool mIsCancel;
};
#endif // NETWORKPACKAGE_H

View file

@ -0,0 +1,97 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "notificationpackagereceiver.h"
#include <kicon.h>
KNotification* NotificationPackageReceiver::createNotification(const NetworkPackage& np) {
QString title, type, icon;
if (np.type() == "RINGING") {
title = "Incoming call";
type = "callReceived";
icon = "call-start";
} else if (np.type() == "MISSED") {
title = "Missed call";
type = "callMissed";
icon = "call-start";
} else if (np.type() == "SMS") {
title = "SMS Received";
type = "smsReceived";
icon = "mail-receive";
} else if (np.type() == "BATTERY") {
title = "Battery status";
type = "battery100";
icon = "battery-100"; // Here we need to take all different cases into account. All
// possible steps on battery charge level and state (discharging
// or charging)
} else if (np.type() == "NOTIFY") {
title = "Notification";
type = "pingReceived";
icon = "dialog-ok";
} else if (np.type() == "PING") {
title = "Ping!";
type = "pingReceived";
icon = "dialog-ok";
} else {
//TODO: return if !debug
title = "Unknown";
type = "unknownEvent";
icon = "pda";
}
KNotification* notification = new KNotification(type); //KNotification::Persistent
notification->setPixmap(KIcon(icon).pixmap(48, 48));
notification->setComponentData(KComponentData("androidshine", "androidshine"));
notification->setTitle(title);
notification->setText(np.body());
return notification;
}
bool NotificationPackageReceiver::receivePackage(const NetworkPackage& np) {
if (np.isCancel()) {
//system("qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause");
//It would be awesome to remove the old notification from the system tray here, but there is no way to do it :(
//Now I realize why at the end of the day I have hundreds of notifications from facebook messages that I HAVE ALREADY READ,
//...it's just because the telepathy client has no way to remove them! even when it knows that I have read those messages lol
//Here we have our awesome KDE notifications system, unusable and meant to fuck the user.
} else {
KNotification* n = createNotification(np);
n->sendEvent();
//system("qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause");
}
return true;
}

View file

@ -0,0 +1,41 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef NOTIFICATIONPACKAGERECEIVER_H
#define NOTIFICATIONPACKAGERECEIVER_H
#include <knotification.h>
#include "packagereceiver.h"
class NotificationPackageReceiver
: public PackageReceiver
{
public:
virtual bool receivePackage(const NetworkPackage& np);
private:
static KNotification* createNotification(const NetworkPackage& np);
};
#endif // NOTIFICATIONPACKAGERECEIVER_H

25
src/packagereceiver.cpp Normal file
View file

@ -0,0 +1,25 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "packagereceiver.h"
PackageReceiver::PackageReceiver() {
//gcc complains if we don't add something to compile on a class with virtual functions
}

42
src/packagereceiver.h Normal file
View file

@ -0,0 +1,42 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef PACKAGERECEIVER_H
#define PACKAGERECEIVER_H
#include <QObject>
#include "networkpackage.h"
class PackageReceiver
: public QObject
{
Q_OBJECT
public:
PackageReceiver();
virtual ~PackageReceiver() { }
public Q_SLOTS:
//Returns true if it has handled the package in some way
virtual bool receivePackage(const NetworkPackage& np) = 0;
};
#endif // PACKAGERECEIVER_H

View file

@ -0,0 +1,44 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "pausemusicpackagereceiver.h"
PauseMusicPackageReceiver::PauseMusicPackageReceiver()
{
pauseOnlyAfterAnswering = false;
}
bool PauseMusicPackageReceiver::receivePackage ( const NetworkPackage& np )
{
if (np.type() != "RINGING") return false; //TODO: Consider pauseOnlyAfterAnswering
//TODO: Use KDE DBUS API
if (np.isCancel()) {
system("qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause");
} else {
system("qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause");
}
return true;
}

View file

@ -0,0 +1,38 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef PAUSEMUSICPACKAGERECEIVER_H
#define PAUSEMUSICPACKAGERECEIVER_H
#include "packagereceiver.h"
class PauseMusicPackageReceiver
: public PackageReceiver
{
public:
PauseMusicPackageReceiver();
virtual bool receivePackage(const NetworkPackage& np);
private:
bool pauseOnlyAfterAnswering; //if set to false it will pause when ringing too
};
#endif // PAUSEMUSICPACKAGERECEIVER_H

52
src/udpdevicelink.cpp Normal file
View file

@ -0,0 +1,52 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "udpdevicelink.h"
UdpDeviceLink::UdpDeviceLink(QString ip)
{
m_udpSocket = new QUdpSocket();
m_udpSocket->bind(10600);
connect(m_udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingNotifications()));
}
void UdpDeviceLink::readPendingNotifications()
{
while (m_udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(m_udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
m_udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);
//log.write(datagram);
qDebug() << datagram;
NetworkPackage np = NetworkPackage::fromString(datagram);
emit receivedPackage(np);
}
}

52
src/udpdevicelink.h Normal file
View file

@ -0,0 +1,52 @@
/**
* Copyright 2013 Albert Vaca <albertvaka@gmail.com>
*
* 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) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef UDPDEVICELINK_H
#define UDPDEVICELINK_H
#include <QObject>
#include <QString>
#include "devicelink.h"
#include <qudpsocket.h>
class UdpDeviceLink
: public DeviceLink
{
Q_OBJECT
public:
UdpDeviceLink(QString ip);
void sendPackage(const NetworkPackage& np) {
//TODO: Not implemented
}
private Q_SLOTS:
void readPendingNotifications();
private:
QUdpSocket* m_udpSocket;
};
#endif // UDPDEVICELINK_H

0
test/CMakeLists.txt Normal file
View file

44
test/backendtests.cpp Normal file
View file

@ -0,0 +1,44 @@
/*
* Copyright 2013 <copyright holder> <email>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include "backendtests.h"
#include <qtest_kde.h>
QTEST_KDEMAIN(BackendTests, NoGUI);
void BackendTests::initTestCase()
{
// Called before the first testfunction is executed
}
void BackendTests::cleanupTestCase()
{
// Called after the last testfunction was executed
}
void BackendTests::init()
{
// Called before each testfunction is executed
}
void BackendTests::cleanup()
{
// Called after every testfunction
}
#include "backendtests.moc"

36
test/backendtests.h Normal file
View file

@ -0,0 +1,36 @@
/*
* Copyright 2013 <copyright holder> <email>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef BACKENDTESTS_H
#define BACKENDTESTS_H
#include <QObject>
class BackendTests : public QObject
{
Q_OBJECT
private Q_SLOTS:
void initTestCase();
void cleanupTestCase();
void init();
void cleanup();
};
#endif // BACKENDTESTS_H