00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <config.h>
00020 #include <stddef.h>
00021
00022 #include <base/Log.h>
00023 #include <posix/base/posixlog.h>
00024 #include <spds/spdsutils.h>
00025
00026 #include <iostream>
00027 #include <memory>
00028 using namespace std;
00029
00030 #include <libgen.h>
00031 #ifdef HAVE_GLIB
00032 #include <glib-object.h>
00033 #endif
00034
00035 #include "SyncEvolutionCmdline.h"
00036 #include "EvolutionSyncSource.h"
00037 #include "EvolutionSyncClient.h"
00038
00039 #if defined(ENABLE_MAEMO) && defined (ENABLE_EBOOK)
00040
00041 #include <dlfcn.h>
00042
00043
00044 #undef e_contact_new_from_vcard
00045 extern "C" EContact *e_contact_new_from_vcard(const char *vcard)
00046 {
00047 static typeof(e_contact_new_from_vcard) *impl;
00048
00049 if (!impl) {
00050 impl = (typeof(impl))dlsym(RTLD_NEXT, "e_contact_new_from_vcard");
00051 }
00052
00053
00054
00055
00056
00057
00058 while (*vcard && isspace(*vcard)) {
00059 vcard++;
00060 }
00061
00062 return impl ? impl(vcard) : NULL;
00063 }
00064 #endif
00065
00066 #ifdef LOG_HAVE_SET_LOGGER
00067 class CmdLineLogger : public POSIXLog {
00068 protected:
00069 virtual void printLine(bool firstLine,
00070 time_t time,
00071 const char *fullTime,
00072 const char *shortTime,
00073 const char *utcTime,
00074 LogLevel level,
00075 const char *levelPrefix,
00076 const char *line) {
00077 POSIXLog::printLine(firstLine,
00078 time,
00079 fullTime,
00080 shortTime,
00081 utcTime,
00082 level,
00083 levelPrefix,
00084 line);
00085 if (level <= LOG_LEVEL_INFO &&
00086 getLogFile()) {
00087
00088 fprintf(stdout, "%s [%s] %s\n",
00089 shortTime,
00090 levelPrefix,
00091 line);
00092 }
00093 }
00094 };
00095 #endif
00096
00097 int main( int argc, char **argv )
00098 {
00099 #ifdef ENABLE_MAEMO
00100
00101
00102
00103
00104
00105
00106
00107
00108 setenv("DBUS_DEFAULT_TIMEOUT", "600000", 0);
00109 #endif
00110
00111 #if defined(HAVE_GLIB) && defined(HAVE_EDS)
00112
00113
00114 g_type_init();
00115 #endif
00116
00117 #ifdef LOG_HAVE_SET_LOGGER
00118 static CmdLineLogger logger;
00119 Log::setLogger(&logger);
00120 #endif
00121
00122 #ifdef POSIX_LOG
00123 POSIX_LOG.
00124 #endif
00125 setLogFile(NULL, "-");
00126 LOG.reset();
00127 LOG.setLevel(LOG_LEVEL_INFO);
00128 resetError();
00129 setvbuf(stderr, NULL, _IONBF, 0);
00130 setvbuf(stdout, NULL, _IONBF, 0);
00131
00132
00133
00134 char *exe = strdup(argv[0]);
00135 if (strchr(exe, '/') ) {
00136 char *dir = dirname(exe);
00137 string path;
00138 char *oldpath = getenv("PATH");
00139 if (oldpath) {
00140 path += oldpath;
00141 path += ":";
00142 }
00143 path += dir;
00144 setenv("PATH", path.c_str(), 1);
00145 }
00146 free(exe);
00147
00148 try {
00149 EDSAbiWrapperInit();
00150
00151 SyncEvolutionCmdline cmdline(argc, argv, cout, cerr);
00152 if (cmdline.parse() &&
00153 cmdline.run()) {
00154 return 0;
00155 } else {
00156 return 1;
00157 }
00158 } catch ( const std::exception &ex ) {
00159 LOG.error( "%s", ex.what() );
00160 } catch (...) {
00161 LOG.error( "unknown error" );
00162 }
00163
00164 return 1;
00165 }