The Omni Group
These forums are now read-only. Please visit our new forums to participate in discussion. A new account will be required to post in the new forums. For more info on the switch, see this post. Thank you!

Go Back   The Omni Group Forums > OmniFocus > OmniFocus for iPad
FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
Is editing the XML files to handle completes an option? Thread Tools Search this Thread Display Modes
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?
 
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>
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>
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...
 
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>
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!
 
Ken, it was my hope that my description would scare off the innocent, and I wouldn't really be contributing to anyone's delinquency :-)
 
 


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to edit points underneath drag handle? [A: Option-Command-Click] lsamberg OmniGraffle General 2 2011-07-29 05:16 AM
Option-scroll to zoom option XedMada OmniGraffle General 0 2009-07-27 09:02 AM
Sync never completes on one machine CdtDelta OmniFocus Syncing 1 2009-06-28 06:20 AM
5.0 b Why are layers locked down automatically when editing 4.x files? dude OmniGraffle General 0 2008-01-23 06:29 PM
Parent-only handle option Nick Sloan OmniOutliner 3 for Mac 0 2007-11-13 10:28 PM


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


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