#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
import re


def print_help():
    print "Usage: python2 %s <url>" % sys.argv[0]


if len(sys.argv) != 2:
    print_help()
    sys.exit()

url = sys.argv[1]
packages_url = url + "/Packages"
curl_cmd = "curl -s -O %s" % packages_url
os.system(curl_cmd)

f = open("Packages", "r")

avaliable_package = {}
installed_package = []
need_update_package = []

name = None
with open('Packages', 'r') as f:
    lines = f.readlines()
    for line in lines:
        if re.match("Package:", line) is not None:
            name = line.split(":")[1].strip()
            if name not in avaliable_package:
                avaliable_package[name] = {}
                avaliable_package[name]['name'] = name
        if re.match("Filename:", line) is not None:
            filename = line.split(":")[1].strip()
            if name in avaliable_package:
                avaliable_package[name]['filename'] = filename


out = os.popen("/bin/opkg list-installed")
lines = out.readlines()
for line in lines:
    name = line.strip().split(" ")[0].strip()
    installed_package.append(name)
out.close()

for key, value in avaliable_package.items():
    if key in installed_package:
        need_update_package.append(value)

cmd = "/etc/init.d/upgrade stop"
os.system(cmd)

for item in need_update_package:
    if item['name'] == 'frpc':
        continue
    packages_url = url + "/" + item['filename']
    curl_cmd = "curl -s -o /tmp/%s %s" % (item['filename'], packages_url)
    os.system(curl_cmd)
    cmd = "killall opkg; /bin/opkg install /tmp/" + item['filename'] + " --force-depends"
    os.system(cmd)
    cmd = "rm /tmp/" + item['filename']
    os.system(cmd)

os.system("rm Packages")
cmd = "/etc/init.d/upgrade start"
os.system(cmd)
