aboutsummaryrefslogtreecommitdiffstats
path: root/app.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app.rb')
-rw-r--r--app.rb76
1 files changed, 76 insertions, 0 deletions
diff --git a/app.rb b/app.rb
new file mode 100644
index 0000000..3aeaadb
--- /dev/null
+++ b/app.rb
@@ -0,0 +1,76 @@
+require "plist"
+require "sinatra"
+require "open-uri"
+
+@@url = ARGV[0] # the URL of index.sucatalog
+
+def update
+
+ @@products = Array.new # the array holding all the available updates
+
+ begin
+ p "Loading catalog from #{@@url}..."
+ @@plist = Plist::parse_xml(open(@@url))
+ p "#{@@plist['Products'].count} total products found"
+ rescue OpenURI::HTTPError
+ p "Failed to connect to #{@@url}"
+ exit
+ end
+
+ @@plist['Products'].each do |k, v|
+
+ begin
+
+ size = 0
+ prod = Hash.new
+ mdurl = v['ServerMetadataURL'];
+ md = Plist::parse_xml(open(mdurl))
+ prod['PostDate'] = v['PostDate']
+ prod['date'] = v['PostDate'].strftime("%d.%m.%y")
+ prod['version'] = md['CFBundleShortVersionString']
+ prod['title'] = md['localization']['English']['title']
+
+ psize = 0
+ v['Packages'].each do |p|
+
+ if p['Size'] > psize
+ prod['url'] = p['URL']
+ end
+
+ psize = p['Size']
+ size += p['Size']
+
+ end
+
+ prod['mdurl'] = mdurl
+ prod['size'] = size/1024/1024
+ @@products.push(prod)
+
+ rescue OpenURI::HTTPError, NoMethodError
+ # just ignore
+ end
+
+ end
+
+ # sort by date, desc
+ @@products = @@products.sort_by { |p| p['PostDate'] }
+ @@products.reverse!
+
+ @@title = "#{@@products.count} updates in Software Update Depot"
+
+end
+
+update()
+
+get "/" do
+
+ erb:index
+
+end
+
+get "/reload" do
+
+ update()
+ redirect "/", 303
+
+end