#!/usr/bin/ruby

Shoes.setup do
  gem "launchy"
  gem "rake"
end

require "net/http"
require "rexml/document"
require "launchy"

HOME_PAGE = "http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml"


# Little utility class to grab things out of the feed.
class TimesGrabber
  def initialize
    xml_data = Net::HTTP.get_response(URI.parse(HOME_PAGE)).body
    @doc = REXML::Document.new(xml_data)
  end
  
  def news_items
    @doc.elements.collect("rss/channel/item") {|item| item }
  end
  
  def logo
    @doc.elements["rss/channel/image/url"].text
  end
end


# The main show.
Shoes.app(:width => 650, :title => "NYTReader") do
  
  background "#FFF"
  
  stack(:height => 15, :align => "right") do
    background "#DDD".."#FFF" # Yay, gradients!
  end
  
  grabber = TimesGrabber.new
  items   = grabber.news_items
  logo    = grabber.logo

  stack(:padding => 20) do
    # NYT logo and title
    image logo, :top => 10, :right => 30  
    line 10, 50, self.width-30, 50, :stroke => "#CCC" 
    title "Today’s front page", :font => "Times New Roman", :stroke => "#333"
    
    # RSS Items
    flow do
      items.each do |item|
        stack(:margin => 6, :width => 325) do # Item box
          title link(item.elements["title"].text, :stroke => "#468") { Launchy.open item.elements["guid"].text },
            :size => 18, :font => "Georgia"   # Link

          stack do
            image item.elements["*/*/media:url"].text unless item.elements["*/*/media:url"].nil?
            para item.elements["description"].text.split(".")[0] + ".", :size => 10, :font => "Lucida Grande"
          end
        end
      end
    end
  end
end
