This is a TODO file. Open issues are marked with a *, partly resolved issues
are marked with a +, ignored issues get an o, and resolved issues a -.
Check the ChangeLog for details on how an issue is resolved, since resolved
issues are periodically purged from this list.

General TODO
============

- Add tool-tip showing daemon status.
- Fix WhatsThis for Kill daemon on exit.
* Adjust the time of events to allow for the timezone KOrganizer is in.
* Make the FileInstallWidget use a KDirWatcher.
* Handle real devfs better (regular USB support seems OK now).
* Handle difference between pi_bind() "no such file" error and others.
* Add malsync conduit.
* Fix local database & do regression testing
+ How *do* you sync KNotes with the memo pad? This is hard.
* Make the address book conduit use libkab (or whatever it's called now).
* base classes for project manager conduits
* add ListMaker conduit
* add Progect conduit
* add ShadowPlan conduit
* add BrainForest conduit
* add JPilot plugin proxy to use JPilog plugins with KPilot
* Update the Conduit howto
- Make daemon able to sync more than once in a run.
- Close device at end of sync.
+ Port conduits to new setup.
- Make the kpilotTest program able to do more than one sync in a run. [NOT
  DONE, but I've decided it's pointless.]
o Make pi_install_file amenable to use in a GUI program. [Move to a thread
  in KDE3 and leave unsolved in KDE2]
- Add conduit-sync in the daemon as well.
- Look into possible buffer overflows in pi_socket structure.
- Add a validator ensuring path lengths are kept < 14 chars for
  pilot-link <= 0.9.5
- Use KJanusWidget for main window area, to make various views
  more apparent.
- Remove the exec()-style code for old conduits. Fixup the messages, too.
- Possibly move the message and progress bar to the log window as well.


Specific JOBS
=============

***
*** Memo Export
***

*** Mostly done by David Bishop

Part I. Make a widget (using Qt designer) for exporting memos. It should have
at least: (1) The possibility to choose "all" or "currently selected" memos
to export (2) The possibility to set the filename, using a Browse button at
the very least (3) Chosing XML or plain text for export. (That's 4 readio
buttons, 3 labels, a groupbox or two and a pushbutton and a QLineEdit in
total, I think.) Base your widget on a Qt Widget -- *NOT* a dialog. Then it
fits into KPilot better.

Part II. (Optional) Add a "Always save only selected memo" option to the
KPilot configuration dialog
(kdepim/kpilot/kpilot/kpilotConfigDialog_base..ui) and make sure it gets
saved to the config file (KPilotConfigDialog::commitChanges and also some
work on ..../kpilotConfig.{h,cc})

Part III. Write a function saveAsXML(const QString &fileName,const char
*memoData) that writes said memo text to a file with the given name.

***
*** PilotLocalDatabase fixups
***

The PilotLocalDatabase class is really ugly and clunky -- and far worse,
it has a hard-coded limit of 10000 records per database. This may have hurt
us once or twice already (consider that a Visor w/ 16Mb could *easily*
hold 10000 addresses). It needs careful reworking.

I think using a Q(Ptr)List is the way to go here -- well, maybe a QVector
would work as well; that depends on whether QVectors resize well. The tricky
part is implementing the "current record pointer" with the same behavior
as the current fCurrentRecord member, since conduits may depend on it.

***
*** Debug cleanup
***

*** DONE! By, um, I forget ...

- kdDebug() everywhere needs to change into DEBUGCONDUIT, DEBUGKPILOT,
  or one of the other DEBUG* macros defined in kpilot/lib/options.h.
  This will send the debugging output to the sensible debug area.
  Which one you choose depends on where the file lives -- choose wisely.

- DEBUG* calls everywhere need to be surrounded by #ifdef DEBUG #endif.
  This is because some compilers don't optimize away unused strings,
  leading to big bulky (well, sorta) executables. Adding the #ifdefs
  makes sure that there's nothing at all left over from the debugging code
  when debugging is turned off.

* __FUNCTION__ needs to be replaced by k_funcinfo. The popmail conduit is
  bad for that one, at the very least.

***
*** Popmail Conduit & IOSlaves
***

The popmail conduit duplicates a lot of code found elsewhere -- it does
SMTP sending and POP3 retrieval of mail messages. That should really be
left to IOSlaves, which are better debugged. Using tickle() will be
necessary while waiting for responses from the slaves, since you must keep
the pilot awake. (This opens the door to multi-threading conduits, with
possibly an asynchronous "pre-sync" action).

