00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
static const char *test_id =
00032
"$Id: main-test.cc,v 1.32 2003/12/04 21:08:55 adridg Exp $";
00033
00034
#include "options.h"
00035
00036
#include <stdlib.h>
00037
#include <time.h>
00038
00039
#include <qpushbutton.h>
00040
#include <qhbox.h>
00041
#include <qtimer.h>
00042
00043
#include <kapplication.h>
00044
#include <klocale.h>
00045
#include <kaboutdata.h>
00046
#include <kcmdlineargs.h>
00047
#include <kservice.h>
00048
#include <kservicetype.h>
00049
#include <kuserprofile.h>
00050
00051
#include <pi-version.h>
00052
00053
#include "logWidget.h"
00054
#include "kpilotConfig.h"
00055
#include "syncStack.h"
00056
#include "hotSync.h"
00057
#include "interactiveSync.h"
00058
00059
static KCmdLineOptions kpilotoptions[] = {
00060 {
"port <device>",
00061 I18N_NOOP(
"Path to Pilot device node"),
00062
"/dev/pilot"},
00063 {
"l",0,0},
00064 {
"list", I18N_NOOP(
"List DBs (default)"), 0},
00065 {
"b",0,0},
00066 {
"backup", I18N_NOOP(
"Backup instead of list DBs"), 0},
00067 {
"r",0,0},
00068 {
"restore", I18N_NOOP(
"Restore Pilot from backup"), 0},
00069 {
"L",0,0},
00070 {
"conduit-list", I18N_NOOP(
"List available conduits"), 0},
00071 {
"E",0,0},
00072 {
"conduit-exec <filename>",
00073 I18N_NOOP(
"Run conduit from desktop file <filename>"),
00074 0 },
00075 {
"T",0,0},
00076 {
"notest",
00077 I18N_NOOP(
"*Really* run the conduit, not in test mode."),
00078 0 } ,
00079 {
"F",0,0},
00080 {
"test-local",
00081
"Run the conduit in file-test mode.",
00082 0 } ,
00083
#ifdef DEBUG
00084
{
"debug <level>", I18N_NOOP(
"Set debugging level"),
"0"},
00085
#endif
00086
KCmdLineLastOption
00087 };
00088
00089
00090
static LogWidget *logWidget = 0L;
00091
static QPushButton *resetButton = 0L;
00092
00093
void createLogWidget()
00094 {
00095 LogWidget *w =
new LogWidget(0L);
00096
00097 w->resize(300, 300);
00098 w->show();
00099 w->setShowTime(
true);
00100 kapp->setMainWidget(w);
00101 logWidget = w;
00102
00103 resetButton =
new QPushButton(i18n(
"Reset"),w->buttonBox());
00104 }
00105
00106
static KPilotDeviceLink *deviceLink = 0L;
00107
00108
void createLink()
00109 {
00110 FUNCTIONSETUP;
00111
00112 deviceLink = KPilotDeviceLink::init(0,
"deviceLink");
00113
00114 QObject::connect(deviceLink, SIGNAL(logError(
const QString &)),
00115 logWidget, SLOT(addError(
const QString &)));
00116 QObject::connect(deviceLink, SIGNAL(logMessage(
const QString &)),
00117 logWidget, SLOT(addMessage(
const QString &)));
00118 QObject::connect(deviceLink,SIGNAL(logProgress(
const QString &,
int)),
00119 logWidget, SLOT(addProgress(
const QString &,
int)));
00120
00121 }
00122
00123
static ActionQueue *syncStack = 0L;
00124
00125
void connectStack()
00126 {
00127 FUNCTIONSETUP;
00128
00129 QObject::connect(syncStack, SIGNAL(logError(
const QString &)),
00130 logWidget, SLOT(addError(
const QString &)));
00131 QObject::connect(syncStack, SIGNAL(logMessage(
const QString &)),
00132 logWidget, SLOT(addMessage(
const QString &)));
00133 QObject::connect(syncStack,SIGNAL(logProgress(
const QString &,
int)),
00134 logWidget, SLOT(addProgress(
const QString &,
int)));
00135
00136 QObject::connect(deviceLink, SIGNAL(deviceReady()), syncStack, SLOT(execConduit()));
00137
00138 QObject::connect(syncStack, SIGNAL(syncDone(SyncAction *)),
00139 logWidget, SLOT(syncDone()));
00140 QObject::connect(syncStack, SIGNAL(syncDone(SyncAction *)),
00141 deviceLink, SLOT(close()));
00142
00143 QObject::connect(resetButton,SIGNAL(clicked()),deviceLink,SLOT(reset()));
00144 }
00145
00146
void createConnection(KCmdLineArgs *p)
00147 {
00148 FUNCTIONSETUP;
00149
00150 QString devicePath = p->getOption(
"port");
00151
00152
if (devicePath.isEmpty())
00153 {
00154 devicePath =
"/dev/pilot";
00155 }
00156
00157 KPilotDeviceLink::DeviceType deviceType =
00158 KPilotDeviceLink::OldStyleUSB;
00159
00160 deviceLink->reset(deviceType, devicePath);
00161 }
00162
00163
int syncTest(KCmdLineArgs *p)
00164 {
00165 FUNCTIONSETUP;
00166
00167 createLogWidget();
00168 createLink();
00169
00170 syncStack =
new ActionQueue(deviceLink);
00171
00172
if (p->isSet(
"backup"))
00173 {
00174 syncStack->
queueInit();
00175 syncStack->
addAction(
new BackupAction(deviceLink));
00176 }
00177
else if (p->isSet(
"restore"))
00178 {
00179 syncStack->
queueInit(0);
00180 syncStack->
addAction(
new RestoreAction(deviceLink));
00181 }
00182
else
00183 {
00184 syncStack->
queueInit();
00185 syncStack->
addAction(
new TestLink(deviceLink));
00186 }
00187 syncStack->
queueCleanup();
00188
00189 connectStack();
00190 createConnection(p);
00191
return kapp->exec();
00192 }
00193
00194
int execConduit(KCmdLineArgs *p)
00195 {
00196 FUNCTIONSETUP;
00197
00198
00199 QString s = p->getOption(
"conduit-exec");
00200
if (s.isEmpty())
return 1;
00201 QStringList l;
00202 l.append(s);
00203
00204 createLogWidget();
00205 createLink();
00206
00207 syncStack =
new ActionQueue(deviceLink);
00208 syncStack->
queueInit();
00209 syncStack->
queueConduits(&KPilotConfig::getConfig(),l,
00210 p->isSet(
"test") ? (ActionQueue::HotSyncMode|ActionQueue::TestMode) :
00211 ActionQueue::HotSyncMode);
00212 syncStack->
queueCleanup();
00213
00214 connectStack();
00215 createConnection(p);
00216
00217
return kapp->exec();
00218 }
00219
00220
int testConduit(KCmdLineArgs *p)
00221 {
00222 FUNCTIONSETUP;
00223
00224
00225 QString s = p->getOption(
"conduit-exec");
00226
if (s.isEmpty())
return 1;
00227
00228 createLogWidget();
00229 createLink();
00230
00231 syncStack =
new ActionQueue(deviceLink);
00232 syncStack->
queueConduits(&KPilotConfig::getConfig(),
00233 QStringList(s),
00234 ActionQueue::FlagTest | ActionQueue::FlagLocal);
00235
00236 connectStack();
00237
00238 QTimer::singleShot(10,syncStack,SLOT(execConduit()));
00239
00240
return kapp->exec();
00241 }
00242
00243
00244
int listConduits(KCmdLineArgs *)
00245 {
00246 FUNCTIONSETUP;
00247
00248 KServiceTypeProfile::OfferList offers =
00249 KServiceTypeProfile::offers(CSL1(
"KPilotConduit"));
00250
00251
00252
00253
00254
00255 QValueListIterator < KServiceOffer > availList(offers.begin());
00256
while (availList != offers.end())
00257 {
00258 KSharedPtr < KService > o = (*availList).service();
00259
00260 cout << o->desktopEntryName().latin1() << endl;
00261 cout <<
"\t" << o->name().latin1() << endl;
00262
if (!o->library().isEmpty())
00263 {
00264 cout <<
"\tIn "
00265 << o->library().latin1()
00266 << endl;
00267 }
00268
00269 ++availList;
00270 }
00271
00272
return 0;
00273 }
00274
00275
int main(
int argc,
char **argv)
00276 {
00277 FUNCTIONSETUP;
00278 KAboutData about(
"kpilotTest",
00279 I18N_NOOP(
"KPilotTest"),
00280 KPILOT_VERSION,
00281
"KPilot Tester",
00282 KAboutData::License_GPL,
"(C) 2001, Adriaan de Groot");
00283 about.addAuthor(
"Adriaan de Groot",
00284 I18N_NOOP(
"KPilot Maintainer"),
00285
"groot@kde.org",
"http://www.cs.kun.nl/~adridg/kpilot/");
00286
00287 KCmdLineArgs::init(argc, argv, &about);
00288 KCmdLineArgs::addCmdLineOptions(kpilotoptions,
"kpilottest");
00289 KApplication::addCmdLineOptions();
00290
00291 KCmdLineArgs *p = KCmdLineArgs::parsedArgs();
00292
00293
00294 KApplication a;
00295
#ifdef DEBUG
00296
KPilotConfig::getDebugLevel(p);
00297
#endif
00298
00299
if (p->isSet(
"backup") || p->isSet(
"restore") || p->isSet(
"list"))
00300 {
00301
return syncTest(p);
00302 }
00303
00304
if (p->isSet(
"conduit-list"))
00305 {
00306
return listConduits(p);
00307 }
00308
00309
if (p->isSet(
"conduit-exec"))
00310 {
00311
if (p->isSet(
"test-local"))
00312 {
00313
return testConduit(p);
00314 }
00315
else
00316 {
00317
return execConduit(p);
00318 }
00319 }
00320
00321
00322
return syncTest(p);
00323
00324 (
void) test_id;
00325 }
00326
00327