The Omni Group Forums

The Omni Group Forums (http://forums.omnigroup.com/index.php)
-   OmniFocus for iPad (http://forums.omnigroup.com/forumdisplay.php?f=63)
-   -   Is editing the XML files to handle completes an option? (http://forums.omnigroup.com/showthread.php?t=22910)

TheAntonHein 2011-12-16 06:44 PM

Is editing the XML files to handle completes an option?
 
Until there is a way to export completed items, is it feasible to download the XML files from the WebDAV server, search & replace (regex) the completed items, save the file and load it back?

whpalmer4 2011-12-17 10:57 AM

You want to export a list of your completed items, or you want to remove them from the database? I'm assuming the latter, based on your other posts.

Is it possible to edit the XML files by hand? Yes. Does it make sense to do so? Probably not. Without meaning to be too snarky about it, the set of people one might encourage to pursue this is pretty much the set of people who could figure out how to do it :-)

To do this, you would probably want to use a Mac or a PC. You'll want your database to be compacted before starting (just 1 zip file). On the Mac, you'd mount the WebDAV volume from the Finder, select the database file, right-click and select Show Package Contents, which should reveal a file named 0000<.....>.zip. Unzip the file and you should get a file called contents.xml. Open that up with TextWrangler or something similar.

I took the introductory database and marked a single item complete to serve as an example. Here is a snippet including the single completed item:

[code]
<task id="auGxids5H9K">
<project>
<last-review>2007-11-09T08:00:00.000Z</last-review>
<next-review>2007-11-16T08:00:00.000Z</next-review>
<review-interval>@1w</review-interval>
<rank>-1073741824</rank>
</task>
</project>
<added order="21">2011-12-17T19:26:29.833Z</added>
<modified>2011-12-17T19:26:39.759Z</modified>
<name>Get started with OmniFocus</name>
<rank>-1073741824</rank>
</task>
<task id="nF1pkXhtoS3">
<task idref="auGxids5H9K"/>
<added order="22">2011-12-17T19:26:29.833Z</added>
<modified>2011-12-17T19:26:39.759Z</modified>
<name>Watch the OmniFocus Quick Start video</name>
<note>
<text>
<p>
<run>
<style>
<value key="link">http://omnigroup.com/applications/omnifocus/quickstart</value>
<value key="paragraph-alignment">left</value>
</style>
<lit>http://omnigroup.com/applications/omnifocus/quickstart</lit>
</run>
</p>
<p>
<run>
<style>
<value key="paragraph-alignment">left</value>
</style>
<lit>Note: be sure to mark this task complete when you're done!</lit>
</run>
</p>
</text>
</note>
<rank>0</rank>
<context idref="oQrYXVieqcS"/>
<completed>2011-12-17T19:26:39.620Z</completed>
</task>
<task id="doOd0htrSs_">
<task idref="auGxids5H9K"/>
<added order="23">2011-12-17T19:26:29.833Z</added>
<name>Process items in OmniFocus inbox into projects and actions</name>
<note>
<text>
<p>
<run>
<style>
<value key="paragraph-alignment">left</value>
</style>
<lit>Note: be sure to watch the Quick Start video first for tips on processing!</lit>

[/code]

To delete that completed action, you would need to delete everything from <task id="nF1pkXhtoS3"> through </task>, and the way you would recognize that the action had been completed is by the presence of <completed>2011-12-17T19:26:39.620Z</completed>. To delete a project, you have to delete the project entry, such as this:
[code]
<task id="auGxids5H9K">
<project>
<last-review>2007-11-09T08:00:00.000Z</last-review>
<next-review>2007-11-16T08:00:00.000Z</next-review>
<review-interval>@1w</review-interval>
<rank>-1073741824</rank>
</task>
</project>
<added order="21">2011-12-17T19:26:29.833Z</added>
<modified>2011-12-17T19:26:39.759Z</modified>
<name>Get started with OmniFocus</name>
<rank>-1073741824</rank>
</task>

[/code]

and you have to delete all of the actions which refer to it via <task idref="auGxids5H9K"/>. Finally, you need to zip up the file again, put it in place of the original, and get the iPad to reload it from the server. Hopefully you didn't mangle anything in the process, because I didn't instruct you to make a backup before opening up the patient!

Whether or not you've got the technical chops to do this, it probably isn't a good use of your time. Pester Omni to supply a solution, or buy a cheap (used?) Mac and a copy of OmniFocus for Mac, or just delete them with the program one by one. Or maybe just leave them alone while you wait — OF for iPad can handle thousands of actions, though it will get a bit slower as the database grows. I find the excess search results to be the most annoying side effect, myself, though sometimes I want completed actions to show up, so I'm not pressing for them to be removed...

Ken Case 2011-12-18 03:41 PM

Hmm. OK, just in case anyone is really considering going down this path…

Rather than editing your existing transactions, I'd recommend creating a new transaction which deletes the tasks in question, like so:

[CODE]<?xml version="1.0" encoding="utf-8" standalone="no"?>
<omnifocus xmlns="http://www.omnigroup.com/namespace/OmniFocus/v1" app-id="com.omnigroup.OmniFocus" app-version="77.86.0.157059" os-name="NSMACHOperatingSystem" os-version="10.7.2" machine-model="MacBookAir4,2">
<task id="nF1pkXhtoS3" op="delete"/>
<task id="nUPqu24qmxb" op="delete"/>
</omnifocus>[/CODE]

This transaction (with its delete operations) can be linked to your normal graph of transactions and synced across all your devices, and you don't have to worry about having a hand-edited copy of a transaction on one device which doesn't match other copies of that same transaction on other devices.

How do you link a transaction to the synced graph of transactions? Each transaction is named "timestamp=old[+old…]+new.zip", where the timestamp is formatted as YYYYMMDDhhmmss (year, month, day, hour, minute, second), "old" is a reference to a transaction id (or multiple transaction ids separated by "+") referencing to the last known transactions in the existing chain, and "new" is a new unique identifier representing the new state you're creating. So, when you see a transaction filename like 20111219002244=lebUEvIYfnr+ckxT--bo5bC.zip, that means the transaction was created on Dec 19, 2011 at 00:22:44 (Universal Time), modifying the "lebUEvIYfnr" transaction to produce a new "ckxT--bo5bC" transaction. The app picks long pseudo-random identifiers for the transactions it creates, but if you want you can name yours something simple like "MyState12" as long as that name isn't already present in any device's copy of the synchronized transaction graph.

After all devices have synchronized with this new transaction, it will be coalesced with earlier transactions to form a new transaction state (the one with the timestamp "00000000000000") which will no longer contain those deleted tasks.

Hope this helps!

whpalmer4 2011-12-18 07:23 PM

Ken, it was my hope that my description would scare off the innocent, and I wouldn't really be contributing to anyone's delinquency :-)


All times are GMT -8. The time now is 12:35 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.