Re: PalmDB requests and bug report
"Jeff Mikels" <[email protected]> Wed, 27 Sep 2006 21:58:56 -0400
| Newsgroups | gmane.comp.handhelds.palm.progect |
|---|---|
| Message-ID | <[email protected]> |
Is there a way for me to get SVN upload access? I'd like to submit my changes to your indentations and additions to comments/documentation where I can. On 9/27/06, Rick Price <[email protected]> wrote: > > Hi Jeff, > > I created a ToDo plugin for you, to help get you started (and I checked it > into SVN). > > It is called PalmToDoPlugin.py. > > I have not tried to compile it, and it is incomplete, but it should get > you started on your way. I put comments in where I expect you to have to > change things. > > If you have to do any more than configure how to crack the Palm task > header, contact me, because I missed something I don't expect you to have > to know... > > You can change the copyright to anything you want, I just copied the > Progect plugin and removed things you shouldn't need. > > And it includes the abominable tab/spaces :). > > Have Fun > Rick > > > On Wed, 27 Sep 2006, Rick Price wrote: > > > > > > > On Tue, 26 Sep 2006, "Jeff Mikels" wrote: > > > >> I should have said "unpack" or "crack" instead of decrypt. That was > silly of > >> me. > > > > No problem, when I reread your email after writing most of my reply, I > > realized what you had meant. > > > > Basically it was a bad day, and I wasn't really paying attention as I > read > > it. > > > >> > >> Anyway, about the plugin, the xml produced from the tododb by the basic > >> plugin is perfect except for the payload. > >> > > > > Yea, that makes sense, that is what is supposed to happen. > > > >> The todo db has 3 bytes, then a string for the description, then a > string > >> for the note. I'm pretty sure those three bytes are for the category > int, > >> the date, the deleted flag, and the completed flag. > > > > Some of this is already unpacked for you AFAIK. I think the category > int, > > and the deleted and so on flags are part of the header we unpack but I > > would have to check. > > > >> > >> It won't be difficult at all to implement, but I'm having trouble > figuring > >> out the API (yes, it's the latest SVN) and python's unpack doesn't have > the > >> option for variable length null terminated strings. What do you use? > > > > I believe I just cracked the string on the 0 at the end of the string. I > > believe the function is split(), and you pass zero in for the char > > somehow. > > > > I think the appropriate thing would be something like: > > > > Text,Note=incomingString.split('\0') > > > > You have to be careful when there isn't a note on the end, but I think > > there *should* always be a double zero in that case, in which case the > > above code should work. > > > >> > >> > >> > >> Help me out though, do I need anything more than this? > >> > >> class ToDoRecordPlugin(PalmDB.Plugins.BasePlugin.DataRecord): > >> def getPDBCreatorID(self): > >> return 'todo' > >> def getPalmApplicationName(self): > >> return 'ToDo' > > > > This part seems fine. > > > >> > >> def _crackPayload(self,dstr): > >> [code here] > >> > > > > This part is where you should have overridden the call to create the > > object that is for each Palm record, that object implements > _crackPayload. > > I'm hoping to have the time to do it quickly to show you how. It should > > only take 15 minutes to half an hour for me to write the skeleton for > the > > plugin for you. > > > > Then you can implement _crackPayload and be done with it. > > > > > > Once the dust settles, would you have time to write a quick howto? > > > > Since you didn't design things, you should be in a better position to > > start the document, I can expand on things for you as required. > > > >> > >> > >> Oh, one more thing, your whitespace is quite inconsistent in your code. > You > >> have spaces and tabs all over the place. > > > > Yes, I would dearly love to find a good Python reformatter program. > > > > Rick > > > > > >> > >> On 9/26/06, Rick Price <[email protected]> wrote: > >>> > >>> > >>> > >>> On Tue, 26 Sep 2006, "Jeff Mikels" wrote: > >>> > >>>> I'm having a problem with the crackPalmDate function > >>>> > >>>> (I'm using svn code) > >>>> > >>>> PILOT_TIME_DELTA = 2082844800L > >>>> def crackPalmDate(variable): > >>>> if variable == 0: > >>>> return None > >>>> else: > >>>> return datetime.datetime.fromtimestamp > >>> (variable-PILOT_TIME_DELTA) > >>>> > >>>> I often get a ValueError because variable-PILOT_TIME_DELTA is > sometimes > >>> a > >>>> negative number. I've changed the code to be... > >>>> > >>>> PILOT_TIME_DELTA = 2082844800L > >>>> def crackPalmDate(variable): > >>>> if variable == 0 or variable < PILOT_TIME_DELTA: > >>>> return None > >>>> else: > >>>> return datetime.datetime.fromtimestamp > >>>> (variable-PILOT_TIME_DELTA) > >>>> > >>>> Is this a problem? > >>> > >>> No, I don't think so, except that if the variable is before the > >>> PILOT_TIME_DELTA surprises could possibly happen in the Palm... > >>> > >>> The reasoning behind my code (and it could be flawed), is that we want > to > >>> know if there really wasn't a value there, like in SQL. So since I > didn't > >>> think that the value would ever be zero (or below zero), using zero > for > >>> NULL seemed like a perfect solution. > >>> > >>> If that is not true, then we may need to rethink how things work. > >>> > >>> Can you send me a patch with your changes so I can incorporate it? > >>> > >>> Do make sure you have the latest code from SVN, I haven't changed it > for a > >>> few weeks, but it's best to make sure you have the latest. > >>> > >>>> > >>>> > >>>> Additionally, I'd like to create a "plugin" for the todo database, > but > >>> I'm > >>>> not sure how to go about doing it. The Base Plugin class is working > >>>> perfectly but the payload needs to be decrypted properly. How can I > >>> create a > >>>> plugin that only overloads the payload functions and have it loaded > when > >>>> necessary? > >>>> > >>> > >>> Well, I like plugins that are loaded automagically and that can be > >>> distributed separately, but in this case, I decided to keep it simple > and > >>> have you declare the plugin to the code. > >>> > >>> I also figured that we would just roll the plugins (not created by me) > >>> into the release, since just about anything someone makes will be > useful > >>> to others. > >>> > >>> [ If you use the library for something proprietary, you would just > call > >>> the plugin notification code, and keep your code separate. ] > >>> > >>> In the file PluginManager.py, you will find the functions > >>> registerPDBPlugin and deRegisterPDBPlugin. These are the functions you > use > >>> to register your plugin with the framework. > >>> > >>> At the bottom of the file, I use the standard functions to register my > >>> Progect plugin. > >>> > >>> > >>> Now, I'm not really sure what you mean by decrypted. > >>> > >>> If you mean you need to translate the XML that *would* have been > generated > >>> into something more useful, the code knows how to apply XSLT > stylesheets > >>> for you; both coming and going. It can also do some simple > transformations > >>> like gzip. > >>> > >>> If you need to output to say a binary or text format, I think it can > be > >>> done, but I would have to look at the code again to explain how. > >>> > >>> > >>> I really think I misdesigned the plugin somehow as well, but I can't > >>> really describe what I mean except to say this (because I haven't > thought > >>> it through yet): > >>> * Some classes do more than one thing - very bad > >>> * The symptom is that the plugin is difficult to use. > >>> * I expect that writing/reading formats other than XML will > >>> be more difficult than it should be (as in binary or text). > >>> > >>> > >>> If you can describe what you are doing to me, then maybe I can give > you > >>> some suggestions. > >>> > >>> I'm going to have to redesign the code _again_ because of not getting > the > >>> plugin code right, but I will try and remain compatible, or at least > make > >>> it so much easier to use that it's not hard for you to update your > code. > >>> > >>> > >>> If you mean how do I crack the Palm task format, I can certainly help > you > >>> with that too. Basically the plugin you create returns an object that > >>> knows what to do with the raw data as passed in by the framework. > >>> > >>> You will need to find documentation on the Palm task format, I am > pretty > >>> sure it can be found easily with Google. > >>> > >>> In this case, you would probably just subclass the default plugin so > that > >>> it returns a special Task object that knows how to crack the payload > for > >>> tasks, and puts the values into a dictionary. > >>> > >>> I believe the class ProgectRecord in plugins/ProgectPlugin.py is the > >>> closest thing to what you want. And the important method to create is > >>> _crackPayload. > >>> > >>> The problem is, that the Progect format is quite complex, and we are > >>> forcing a tree into rows. So the Progect class is probably not a good > >>> example of how to do something simple (or not a good example at > all...). > >>> > >>> For something like the task database, you should have almost _no_ work > to > >>> do, and so don't let the extreme complexity of the Progect plugin > scare > >>> you off. > >>> > >>> I can't predict how much work cracking a task would be, but I would > hope > >>> it would be under a hundred lines of Python code all told, and simple > code > >>> at that. > >>> > >>> Generating and reading the XML would happen automatically if I > remember > >>> correctly, so the big problem is being able to crack and pack the task > >>> format. (that is, the payload, because we crack the record header for > >>> you). > >>> > >>> I would be more than happy to give you a hand with this task, while I > am > >>> overloaded at work for the next day or so, perhaps we can talk via IM > or > >>> on the phone. Even email would be fine, if you can help me understand > your > >>> problem a little better. > >>> > >>> I can then explain how I think it can be accomplished easily with the > >>> framework. > >>> > >>> I will certainly try to do this for anyone who wants to use the > framework, > >>> but having the task format converted to and from XML is an important > >>> feature for the framework and is therefore a priority for me. > >>> > >>> > >>> Rick > >>> > >>>> > >>>> > >>>> > >>>> On 9/7/06, Rick Price <[email protected]> wrote: > >>>>> > >>>>> Okay, I just managed to get the Python PalmDB library to go from a > >>> Progect > >>>>> file to XML and back again without dropping anything really obvious. > >>>>> > >>>>> Anyone who wants to check out the Subversion code is welcome to do > so. > >>>>> > >>>>> I think I need to do a major rewrite at some point in the next > little > >>> bit, > >>>>> but first I will setup some conversions to popular programs that > >>>>> read/write XML. > >>>>> > >>>>> First on the list is going to be treeline since I use it right now > and > >>> the > >>>>> > >>>>> format seems to be basically sane. > >>>>> > >>>>> I will then probably try to do something with Omni Outliner for the > >>> Mac. > >>>>> > >>>>> That will probably require fixing a bug in the library that seems to > >>> show > >>>>> up on the Mac. > >>>>> > >>>>> After that, I will see what I can do based on popularity. > >>>>> > >>>>> > >>>>> Once I have treeline support working, and it's not too ugly to run, > I > >>> will > >>>>> make a release of Python PalmDB so people can start to use it. > >>>>> > >>>>> I will release again I would guess after I get Omni Outliner support > >>>>> working. > >>>>> > >>>>> Any questions, just email me. > >>>>> > >>>>> Rick > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> Remember to visit Polls, Files and Bookmarks sections at > >>>>> http://groups.yahoo.com/group/progect. You are welcome to vote, > upload > >>>>> your files and submit bookmarks. > >>>>> Yahoo! Groups Links > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>> > >>>> > >>>> -- > >>>> Jeff Mikels > >>>> leading people one step closer to Jesus > >>>> http://jeff.mikels.cc > >>>> http://thesouthsidechurch.org > >>>> > >>>> > >>>> -- > >>>> Jeff Mikels > >>>> leading people one step closer to Jesus > >>>> http://jeff.mikels.cc > >>>> http://thesouthsidechurch.org > >>>> > >>>> > >>>> [Non-text portions of this message have been removed] > >>>> > >>>> > >>> > >>> > >>> > >>> Remember to visit Polls, Files and Bookmarks sections at > >>> http://groups.yahoo.com/group/progect. You are welcome to vote, upload > >>> your files and submit bookmarks. > >>> Yahoo! Groups Links > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >> > >> > >> -- > >> Jeff Mikels > >> leading people one step closer to Jesus > >> http://jeff.mikels.cc > >> http://thesouthsidechurch.org > >> > >> > >> [Non-text portions of this message have been removed] > >> > >> > > > > > > Remember to visit Polls, Files and Bookmarks sections at > http://groups.yahoo.com/group/progect. You are welcome to vote, upload > your files and submit bookmarks. > Yahoo! Groups Links > > > > > > > > > > > -- Jeff Mikels leading people one step closer to Jesus http://jeff.mikels.cc http://thesouthsidechurch.org [Non-text portions of this message have been removed] Remember to visit Polls, Files and Bookmarks sections at http://groups.yahoo.com/group/progect. You are welcome to vote, upload your files and submit bookmarks. Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/progect/ <*> Your email settings: Individual Email | Traditional <*> To change settings online go to: http://groups.yahoo.com/group/progect/join (Yahoo! ID required) <*> To change settings via email: mailto:[email protected] mailto:[email protected] <*> To unsubscribe from this group, send an email to: [email protected] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/