This codebase implements an iOS App for Dreamwidth. I really like Dreamwidth, and it bugs me that there's no good App for it. So, I became interested in fixing that. Unfortunately, I hit a couple of near-insurmountable opportunities:
- The existing APIs for LiveJournal/Dreamwidth have very poor support for fetching entries in a most-recent first way (which is the most natural way for mobile apps). You can get your own entries most-recent first, but it's hard to get your reading list most recent first.
- The existing APIs have no real support for comments. There has been some progress on that front, but a solution is probably a few months off, still.
Getting data from Dreamwidth is complex -- especially if you want to be able to work with the most common types of data such as comments and the like. I have an approach to interfacing with Dreamwidth, but I'm abundantly clear that the interface is messy.
This list is out-of-date. I'm trying to use issues to manage the outstanding work.
Reverse-engineer Dreamwidth's cookie-based session authDONE! The flat API allows me to get a session cookie and use that for some requests, turning that session id into the necessary cookies is pretty terrible.Call the Mobile Reading Page and get the recent Reading ListDONE!Fetch each page as format=light and scrape its content.Essentially DONE.Show a fuller entry page, with comments.DONE- Render more complex entry HTML
- Compose a new entry
- Compose a new comment
- Better account settings management
- Notifications
- Refresh content on a reasonable schedule
- Apple will almost-certainly insist that I exclude all of the NSFW content. I have a plan for this; I just need to fiddle with the details.
I'm a long-time Dreamwidth paid member, and as a result, I'm not required to see ads, and I get fairly speedy servers. Dreamwidth has a free model that is subsidized by ads, and if people using the app can avoid seeing the ads, then Dreamwidth's corporate masters might not like the mobile app. At some point, I'll probably need to have a conversation with them.
Here are some screenshots of work-in-progress Wow, these screenshots are out-of-date:
If you want to build this code, you'll need to:
- Install CocoaPods
- Clone this code
- Run
pod install
in the code source directory - Open the dreamwidth.xcworkspace file in XCode (not the dreamwidth/dreamwidth.xcodeproj)
The original intention of this codebase was to serve as an implementation of the Dreamwidth API written in Objective-C. My plan had been to include Dreamwidth integration in another app that I work on, and this code was created as a sandbox to work on those features. It's evolved over time.
The primary documentation for the API is part of the LiveJournal site; the same API works for Dreamwidth.