- Upon launch, app (if online) grabs latest metadata from server (e.g., XML, JSON, or YAML file describing available assets).
- Browse course's assets (PDFs, videos).
- View PDFs.
- Stream videos.
- Pre-download videos and watch offline.
- Search PDFs, videos by title.
- See XML files at https://github.com/cs50/tv50/tree/master/var/cs50.tv/2016/fall.
- See http://cs50.tv/2016/fall/ for a hierarchical HTML rendering of that XML data.
Note: additional videos (called "Shorts") soon to be added to that XML but format will be equivalent. Though we'll likely transition to our own XML or JSON or YAML format rather than cling to that XBEL format. Ideal if XML parsing is confined to a method that we can swap out for something else later. Odds are final format would still be hierarchical (equivalent to a tree) but where nodes can have multiple attributes, not just hrefs.
Simple UITableView equivalent suffices but open to (efficiently navigable) alternatives.
On launch, user might see:
- CS50 2016
- CS50 2015
- CS50 2014
- ...
Upon clicking CS50 2016, user might see:
- Week 0
- Week 1
- Week 2
- ...
Upon clicking Week 0, user might see:
- Slides [which links to PDF on cdn.cs50.net]
- Source Code [which links to an index listing on cdn.cs50.net, but can soon change to GitHub]
- Video [which links to 720p or 1080p version of video on CDN]
Or, better yet, user could just see the video start playing, with two buttons, one of which makes the slides slide up over the video temporarily, while video still plays, other of which does the same for video. And then on previous menu (CS50 2016), there could be a "download" link next to, e.g., "Week 0" that would trigger a pre-download of all three assets.
Note: video exists on cdn.cs50.net in multiple resolutions. App could, e.g., stream 360p version by default. But user could alternatively click to download the 720p or 1080p version for offline viewing.