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