Added pkgconfig files for libbarrydp and libbarryjdwp
[barry.git] / TODO
blob7b6396526f120c7528ff62c005d87bcf17d6b47a
1 This file contains features that need work.  If you wish to tackle
2 any of them, please post a quick message to the mailing list of your
3 intentions, in order to avoid duplication of effort.
5 If you would like help or more information on any of these items,
6 please ask on the mailing list as well.
8 - Chris
9 <cdfrey@foursquare.net>
12 Next Release Checklist (- todo, + done, x skipped)
13 ==============================================================================
14 Target: release version 0.16 (Oct 1)
15         + incorporate barrybackup GUI changes by Ryan Li
16         - incorporate Nicolas's java debugger patches
17                 - figure out a solution to the HideSequencePacket issue
18                 - add build tests to test/buildtest.sh script
19                 - fix any lingering compile problems and FIXMEs
20                 - man page for bjdwp app
21                 - www documentation for bjdwp app
22                 - add bjdwp to debian and rpm binary packages
23         - incorporate Martin Owens' Barry logo/icon into Barry
24                 - connect icon with barrybackup
25                 - add to documentation page?
26                 - add to identi.ca barry group
27                 - add to sourceforge
28                 - add to repo.or.cz
30 Target: release version 0.17 (Nov 1)
31         - website documentation:
32                 - add a more detailed set of instructions for how to
33                         contribute to the project using git
34                         (see email to Josh)
35                 - incorporate Bill Paul's modem HOWTO for FreeBSD
36                         into web docs (see list emails)
37                 - add docs for opensync 0.4x plugin (note that it is
38                         currently experimental, based on devel opensync)
40 Target: release version 0.18 (Dec 1)
41         - test and fix all build and functionality issues on:
42                 - Fedora 11
43                 - Fedora 12 (scheduled release on Nov 10)
44                 - Ubuntu 8.10, 9.04
45                 - Ubuntu 9.10 (scheduled release on Oct 29)
46                 - openSUSE 11.1
47                         - see mailing list reports
48                 - give openBSD a test compile
49         - support our own repositories for apt and yum and zypper
50                 to make installation easier
52 Target: release version 0.19 (Jan 1, 2010)
53         - polish up bfuse, and add feature to split out fields
54         - add record classes for Content Store based on
55                 Martin Owens' doc/barry-research.ods
60 General Features
61 ==============================================================================
63 Add media management via USB
64 ----------------------------
65 The Windows version of desktop software has the ability to manage
66 photos on the Blackberry that are not stored on a flash card, but
67 are instead stored in the Blackberry's internal memory.
69 It is challenging, on some devices, to even copy such photos and
70 media to the flash card.
72 Capture the USB traffic for this media management, and add support
73 to Barry.
76 Add HAL/dbus support to BarryBackup
77 -----------------------------------
78 The latest version of the backup program lists devices in a combo box,
79 with a Reload button to handle new devices being plugged in.
81 Add an optional feature to listen to HAL/dbus for device addition and
82 removal and update the list automatically.  Note that this must be
83 optional, since some systems may not have HAL available at compile time
84 (such as FreeBSD) or perhaps at runtime (HAL may not be running),
85 and so the Reload button must be available.
87 Leave the Reload button even if HAL support is present, since the user
88 may wish to control the list manually, or force a reload.
91 Command line tool to parse backups
92 ----------------------------------
93 Add the ability to feed raw database data into the parser from various
94 formats, so that you can test parser code, and get human readable output
95 without a Blackberry device attached.
97 Ideally, this tool should be able to read tarball backups from barrybackup,
98 and read only the database(s) of interest.  There should be a sort of
99 plugin method for reading data from multiple sources: Windows backup
100 files, barrybackup files, btool save files, ldap, text, etc.
103 Add support for the new " - All" databases
104 ------------------------------------------
105 New Blackberry devices appear to support a set of mixed databases, such as
106 Calendar, Calendar - All, etc.  The format of these new "All" databases
107 is not yet fully known, but needs to be supported as these databases become
108 more popular.
111 Reverse engineer date/time functions
112 ------------------------------------
113 The date/time calculations in src/time.cc:Message2Time() are still not
114 completely understood.  There is an explanation of sorts in an email
115 from Brian Edginton on the mailing list, but there are odd constants, etc.
116 Need to understand it fully and document it.
118 Mail from Brian Edginton on the topic:
119 http://sourceforge.net/mailarchive/message.php?msg_id=200706291619.05854.edge%40edginton.net
122 Fix GUI configure script to run a check for libtar
123 --------------------------------------------------
124 Currently, the autoconf scripts only take an argument on the command line
125 for the location of libtar, and assumes its location otherwise.
126 There should be an actual test for this, that tries linking against
127 libtar, and stops the configure script if not available.
130 An automated test suite
131 -----------------------
132 Testing Barry will be a challenge, since an actual device is required
133 for a large bulk of tests.  Ideally, it should be easy for someone to
134 make a full backup of their device, donate it to science, and then
135 restore their settings and data, since not everyone has a pure device
136 for testing.
138 Things that need automated testing:
140         - test all possible compile options (finished, see test/)
141         - test parsing of all supported records
142         - test building of all supported records
143         - test backup and restore, of random sets of databases, as well
144                 as the "all databases" set
145         - test LDAP / LDIF conversions
146         - test test Boost serialization backups and restore
147         - make sure it is possible to create records with the same
148                 SHA1 sums, purely programmatically
149         - test syncing of all fields, including international data / charsets
150         - test password support, and password safety catch (bad passwd X times)
151         - test modem functionality
153 Estimated time: open ended
157 Flesh out the Troubleshooting web doc
158 -------------------------------------
159 Every stumbling block that users run into should either be fixed
160 in the code or binary package, or documented in a Troubleshooting
161 document.  This troubleshooting document is already started, but
162 contributions are welcome from all users!
166 Porting opensync plugin to opensync 0.40
167 ----------------------------------------
168 The main porting effort is mostly complete (pending changes in the
169 opensync API once the official 0.40 is released).
171 The XML way involves:
173         - switching from the vcard/vevent formats to the opensync XML
174                 formats
175         - making use of the new opensync time APIs to properly support
176                 timezones for all time operations
178 Switching away from text based vcard and vevent formats will remove
179 the burden of raw data parsing and formatting from the plugin itself,
180 and make use of the more tested opensync library.  Any bugs fixed
181 in opensync's parsers will automatically fix bugs in the Barry plugin.
183 Support for timezones will likely stress the opensync API as well as
184 the Barry API, but definitely needs to be done for completeness on both
185 sides of the equation.
187 Estimated time:   open ended
191 Adding support for recurring calendar items to opensync plugin
192 --------------------------------------------------------------
193 See vCalendar::RecurToBarryCal() in the opensync sources, and compare
194 with RecurToVCal().  See also iCal format RFC's.
195 http://tools.ietf.org/html/rfc2445
199 Multi-program Database and Modem Access
200 ---------------------------------------
201 The architectural challenge:
203         As Barry is not a single application, how do you access the
204         database while pppob is using the modem?
206 There are two viable ways of dealing with this.  One involves placing
207 a (hopefully thin) driver in the kernel, and the other involves using
208 a daemon and RPC calls.
210 My preference is to implement this using RPC calls if needed, and hammer
211 out all the implementation details in user space.  Once they are well
212 understood, a smaller kernel driver hook may be more easily written
213 that supports routing messages according to socket or application
214 needs.  For example, one application may register an interest in
215 database messages, another in javaloader messages, and another in the
216 multiple modem socket messages.
218 There is currently no support for this RPC daemon, but threading
219 support already exists.
221 Estimated tasks:
222         - design suitable RPC system
223         - implement support in the Barry library so it works
224                 with and without a daemon, using the same API
225 Estimated time: open ended
229 Add bluetooth serial support
230 ----------------------------
231 It is reported that it is possible to access the database through
232 Bluetooth using the older Blackberry serial protocol.  XmBlackBerry
233 has support for this and may be used as a reference.
235 The goal here would be to hide the bluetooth access behind the
236 same Barry library API, so that syncing with the opensync plugin
237 would be seamless whether plugged in via USB or Bluetooth.
239 Estimated tasks:
240         - research and design serial protocol stack to reuse as much
241                 library code as possible
242 Estimated time: unknown
246 Add internationalization (i18n) support to the backup GUI and tools
247 -------------------------------------------------------------------
248 Translations are needed for the GUI and command line tool prompts, as
249 well as support in the code for this translation.
251 Estimated tasks:
252         - update the code to support i18n
253         - translate to languages of interest
255 Estimated time: unknown
259 Write simple GUI for streamlining sync setup and action
260 -------------------------------------------------------
261 Syncing setup and operation is currently a tedious, complicated task.
262 A GUI that performed all the detailed setup and configuration work,
263 for a Blackberry-specific sync, using opensync libraries and plugins
264 for Evolution, Sunbird, etc, would be very helpful.
266 This would be much easier for an experienced GUI programmer, but there is
267 a learning curve for the opensync API.
269 Estimated tasks:
270         - document the settings required for Blackberry, and
271                 all intended plugins required
272         - write application that:
273                 - does the opensync configuration through the opensync
274                         API directly
275                 - scans the USB bus for available Blackberry devices using
276                         Barry
277                 - lives in the system tray watching for Blackberry devices
278         - if aiming for super ease of use, script a source build of
279                 all needed opensync components and install in private
280                 area to avoid conflict with system
281 Estimated time: unknown
282 Note: Depending how fast HAL, OpenSync, and Conduit are implemented,
283         this may never be needed... but if it existed today, there's a
284         lot of users who would be very happy...
288 Document the USB protocol
289 -------------------------
290 Currently the only english documentation for the Blackberry protocol
291 is the webpage by the Cassis project (found at
292 http://off.net/cassis/protocol-description.html).
294 The USB protocol is not nearly so well documented.  The best documentation
295 available can be found in the Barry header files: protocol.h and
296 protostructs.h.
298 Translating the code into documentation (into a wiki, that will hopefully
299 soon be available) is a great way to get involved in the project and
300 learn a lot about the Blackberry from a low level.
302 Unfortunately, Jedi mind tricks don't often work when trying to convince
303 people to write documentation for me... :-)
305 Estimated tasks:
306         - write, write, write
307 Estimated time: 40 hours (documentation expands to fill available time...)
311 Code cleanup
312 ------------
313 Code can always be improved.  There are two big ways to help:
315         - write an application using the Barry library
316         - improve the Barry library itself and send patches
318 By writing an application, you can provide crucial feedback on the ease
319 of use of the Barry API.  I'm very eager for such feedback.
321 Secondly, there is currently a lot of code ducplication in the record
322 classes, and a careful refactoring is required.  I would be open to a class
323 hierarchy, with possibly private or protected inheritance.  My primary
324 concern is object safety when using the record classes as objects in
325 STL containers, with a secondary concern to make it easier to
326 abstractly work with a record.  This implies a careful mix of
327 virtual functions and a generic record base class.  Patches in this
328 area will be thoughtfully considered.
330 Estimated tasks (refactoring):
331         - design safe hierarchy
332         - move common code to base class
333         - make sure all record classes use the common record API
334         - test
335 Estimated time: 7 hours
339 C API wrapper
340 -------------
341 For those that write applications in C, a C API wrapper has been started
342 in the cbarry.h header.  It has not yet been implemented, but should be
343 straightforward.
345 Estimated tasks:
346         - finish some API design work (head not fully complete)
347         - implement all functions (about 50)
348         - write test application, or test suite, for C API
349 Estimated time: unknown
353 Python wrappers and example code
354 --------------------------------
355 For those that write applications in Python, a SWIG wrapper has been
356 started by H Miz Jones.  This is partially functional, and involves
357 working with the Barry API, and may introduce changes to it depending
358 how hard it is to translate things to the Python world.
360 The SWIG wrapper scripts have not yet been publically released, but
361 please contact me if you are interested.
363 Estimated tasks:
364         - finish C++ / Python integration (possible template issues)
365         - finish SWIG wrapper
366 Estimated time: unknown
370 Command line backup and restore
371 -------------------------------
372 The only command line backup currently available is the one in btool,
373 using the -f and -s switches.  This does not backup exact data from
374 the device, but parses it, stores it in the Boost serialization format,
375 and then reverses the process for restore.  This is a great test
376 for the Barry library, but not so great for backup, since not all
377 databases can be parsed.
379 There is already an exact backup and restore interface with the GUI, but
380 there is a lot of useful functionality trapped in a layer of GUI
381 that could be just as useful from the command line.  Tasks such as a nightly
382 cron backup of any Blackberry devices attached to the system would be more
383 easily done via command line.
385 You could add command line arguments to the barrybackup program to skip
386 the GUI (tricky and possibly error prone), or you could pull the backup
387 functionality into a standalone command line utility (more work, but smarter
388 in the long run).  This is mostly a code refactoring job, consisting of
389 all working code that's already there, and I know there are people
390 who would thank you. :-)
392 Note: see also the perl scripts in contrib/
394 Estimated tasks:
395         - split out tar and backup functionality code into shared library
396         - write and test command line tool
397 Estimated time: 6 hours
401 Misc Low Level Todo Items:
402 --------------------------
403 - test whether sorting of contact records is required before
404         uploading data to the device... test whether it is ok
405         to upload a GroupLink item in the middle of a contact
406         upload, even before all the groups have been sent...
407         if ok, remove the sorting code from Contact, Message, and
408         Calendar classes