summaryrefslogtreecommitdiff
path: root/src/backends/buteo/ButeoBridge.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/buteo/ButeoBridge.cpp')
-rw-r--r--src/backends/buteo/ButeoBridge.cpp277
1 files changed, 0 insertions, 277 deletions
diff --git a/src/backends/buteo/ButeoBridge.cpp b/src/backends/buteo/ButeoBridge.cpp
deleted file mode 100644
index 952a56c6..00000000
--- a/src/backends/buteo/ButeoBridge.cpp
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright (C) 2010 Intel Corporation
- */
-
-#include "ButeoBridge.h"
-#ifdef ENABLE_UNIT_TESTS
-#include "test.h"
-#endif
-#include <syncevo/util.h>
-#include <syncevo/Cmdline.h>
-#include <syncevo/Logging.h>
-
-#include <QDebug>
-
-#include <stddef.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <iostream>
-
-#include <libsyncprofile/SyncResults.h>
-#include <syncevo/SyncSource.h>
-
-SE_BEGIN_CXX
-
-// this ensures that backends are initialized once inside the
-// Buteo bridge
-static std::string backends = SyncSource::backendsInfo();
-
-ButeoBridge::ButeoBridge(const QString &pluginName,
- const Buteo::SyncProfile &profile,
- Buteo::PluginCbInterface *cbInterface) :
- ClientPlugin(pluginName, profile, cbInterface)
-{
-}
-
-bool ButeoBridge::startSync()
-{
- std::string username = iProfile.key("Username", "no username set").toUtf8().data();
- std::string password = iProfile.key("Password", "no password set").toUtf8().data();
-
- std::string explanation("internal error");
- try {
- if (m_config.empty()) {
- SE_THROW("init() not called");
- }
-
- std::vector<const char *> sources;
- int count = 0;
- sources.resize(4, NULL);
- QList<const Buteo::Profile *> storages = iProfile.storageProfiles();
- BOOST_FOREACH(const Buteo::Profile *profile, storages) {
- if (profile->isEnabled()) {
- // translate between names in profile and names in SyncEvolution
- if (profile->name() == "hcontacts") {
- sources[count++] = "addressbook";
- } else if (profile->name() == "hcalendar") {
- sources[count++] = "calendar";
- }
- }
- }
-
- // The Yahoo CardDAV and CalDAV config only works with full
- // domain (needed for DNS SRV lookup). Add it if not present.
- // If the resulting username is invalid, we'll get a
- // credentials error, as desired.
- if (m_config == "yahoo" &&
- username.find('@') == username.npos) {
- username += "@yahoo.com";
- }
-
- // run sync with just the enabled sources
- Cmdline sync(std::cout, std::cerr,
- "buteo-sync",
- "--run",
- "--sync-property", StringPrintf("username=%s", username.c_str()).c_str(),
- "--sync-property", StringPrintf("password=%s", password.c_str()).c_str(),
- "--sync-property", "preventSlowSync=0",
- m_config.c_str(),
- sources[0], sources[1], sources[2], sources[3],
- NULL);
- bool res = sync.parse() && sync.run();
-
- // analyze result
- const SyncReport &report = sync.getReport();
- SyncMLStatus status = report.getStatus();
- std::string explanation = Status2String(status);
- switch (status) {
- case STATUS_OK:
- case STATUS_HTTP_OK:
- if (res) {
- emit success(getProfileName(), "done");
- } else {
- emit error(getProfileName(), "internal error", Buteo::SyncResults::INTERNAL_ERROR);
- }
- break;
- case STATUS_UNAUTHORIZED:
- case STATUS_FORBIDDEN:
- emit error(getProfileName(), explanation.c_str(), Buteo::SyncResults::AUTHENTICATION_FAILURE);
- break;
- case STATUS_TRANSPORT_FAILURE:
- emit error(getProfileName(), explanation.c_str(), Buteo::SyncResults::CONNECTION_ERROR);
- break;
- default:
- emit error(getProfileName(), explanation.c_str(), Buteo::SyncResults::INTERNAL_ERROR);
- break;
- }
-
- // Client/Configuration errors 4xx
- // INTERNAL_ERROR = 401,
- // AUTHENTICATION_FAILURE,
- // DATABASE_FAILURE,
-
- // Server/Network errors 5xx
- // SUSPENDED = 501,
- // ABORTED,
- // CONNECTION_ERROR,
- // INVALID_SYNCML_MESSAGE,
- // UNSUPPORTED_SYNC_TYPE,
- // UNSUPPORTED_STORAGE_TYPE,
- //Upto here
-
- //Context Error Code
- // LOW_BATTERY_POWER = 601,
- // POWER_SAVING_MODE,
- // OFFLINE_MODE,
- // BACKUP_IN_PROGRESS,
- // LOW_MEMORY
- return true;
- } catch (...) {
- Exception::handle(explanation);
- }
- emit error(getProfileName(), explanation.c_str(), Buteo::SyncResults::INTERNAL_ERROR);
- return false;
-}
-
-bool ButeoBridge::init()
-{
- try {
- if (getenv("SYNCEVOLUTION_DEBUG")) {
- LoggerBase::instance().setLevel(Logger::DEBUG);
- }
-
- // determine parameters for configuration
- std::string url;
- std::vector<const char *> sources;
- sources.resize(4, NULL);
- QString profile = getProfileName();
- if (profile == "google-calendar") {
- m_config = "google-calendar";
- url = "syncURL=https://www.google.com/calendar/dav/%u/user/?SyncEvolution=Google";
- sources[0] = "calendar";
- } else if (profile == "yahoo") {
- m_config = "yahoo";
- url = "syncURL="; // depend on DNS SRV to find right host
- // for CalDAV/CardDAV (which currently
- // are different!)
- sources[0] = "calendar";
- sources[1] = "addressbook";
- } else if (profile == "google-contacts") {
- // configure SyncML
- m_config = "google";
- Cmdline sync(std::cout, std::cerr,
- "buteo-sync",
- "--template", "Google",
- "--sync-property", "printChanges=0",
- "--sync-property", "dumpData=0",
- m_config.c_str(),
- NULL);
- bool res = sync.parse() && sync.run();
- if (!res) {
- SE_THROW("client configuration failed");
- } else {
- return true;
- }
- } else {
- return false;
- }
-
- // configure local sync of calendar with CalDAV and/or CardDAV
- std::string config = StringPrintf("target-config@%s", m_config.c_str());
- if (!SyncConfig(config).exists()) {
- Cmdline target(std::cout, std::cerr,
- "buteo-sync",
- "--template", "SyncEvolution",
- "--sync-property", url.c_str(),
- "--sync-property", "printChanges=0",
- "--sync-property", "dumpData=0",
- "--source-property", "calendar/type=CalDAV",
- "--source-property", "addressbook/type=CardDAV",
- config.c_str(),
- sources[0], sources[1], sources[2], sources[3],
- NULL);
- bool res = target.parse() && target.run();
- if (!res) {
- SE_THROW("client configuration failed");
- }
- }
- if (!SyncConfig(m_config).exists()) {
- Cmdline server(std::cout, std::cerr,
- "buteo-sync",
- "--template", "SyncEvolution",
- "--sync-property", "peerIsClient=1",
- "--sync-property", "printChanges=0",
- "--sync-property", "dumpData=0",
- "--sync-property", StringPrintf("syncURL=local://@%s", m_config.c_str()).c_str(),
- m_config.c_str(),
- sources[0], sources[1], sources[2], sources[3],
- NULL);
- bool res = server.parse() && server.run();
- if (!res) {
- SE_THROW("server configuration failed");
- }
- }
- return true;
- } catch (...) {
- Exception::handle();
- }
- return false;
-}
-
-bool ButeoBridge::uninit()
-{
- // nothing to do
- return true;
-}
-
-void ButeoBridge::connectivityStateChanged(Sync::ConnectivityType type,
- bool state)
-{
-}
-
-extern "C" ButeoBridge *createPlugin(const QString &pluginName,
- const Buteo::SyncProfile &profile,
- Buteo::PluginCbInterface *cbInterface)
-{
- return new ButeoBridge(pluginName, profile, cbInterface);
-}
-
-extern "C" void destroyPlugin(ButeoBridge *client)
-{
- delete client;
-}
-
-#ifdef ENABLE_UNIT_TESTS
-
-/**
- * The library containing this test is not normally
- * linked into client-test. To use the test, compile
- * client-test manually without -Wl,-as-needed
- * and add libsyncevo-buteo.so.
- */
-class ButeoTest : public CppUnit::TestFixture {
- CPPUNIT_TEST_SUITE(ButeoTest);
- CPPUNIT_TEST(init);
- CPPUNIT_TEST_SUITE_END();
-
- std::string m_testDir;
-
-public:
- ButeoTest() :
- m_testDir("ButeoTest")
- {}
-
- void init() {
- ScopedEnvChange xdg("XDG_CONFIG_HOME", m_testDir);
- Buteo::SyncProfile profile("google-calendar");
- ButeoBridge client("google-calendar", profile, NULL);
- CPPUNIT_ASSERT(client.init());
- }
-};
-
-SYNCEVOLUTION_TEST_SUITE_REGISTRATION(ButeoTest);
-
-#endif // ENABLE_UNIT_TESTS
-
-SE_END_CXX