diff --git a/scripts/winsparkle-xml-updater.sh b/scripts/winsparkle-xml-updater.sh index 55f1aec3da180608cba9a33507e65cdb034467c7..1e7b7b10a68a70fe002cc06ca78b472a7bd82e1d 100755 --- a/scripts/winsparkle-xml-updater.sh +++ b/scripts/winsparkle-xml-updater.sh @@ -45,25 +45,13 @@ else OS="windows-x86"; fi -#update URI in <link> field +# update URI in <link> field gawk -i inplace -v source="${SPARKLE_SOURCE}" '/<link>/{printf " <link>"; printf source; print "</link>"; next}1' ${SPARKLE_FILE} -#update list with new image item -cat << EOS > ${TMP_FILE} - <item> - <title>Ring nightly $(date "+%Y/%m/%d %H:%M")</title> - <pubDate>$(date -R)</pubDate> - <enclosure url="${REPO_URL}/$(basename ${PACKAGE})" sparkle:version="$(date +%Y%m%d)" sparkle:shortVersionString="nightly-$(date "+%Y%m%d")" sparkle:os="${OS}" length="$(stat -c %s ${PACKAGE})" type="application/octet-stream" /> - </item> -EOS +# update xml list with new image item -if [ -s ${SPARKLE_FILE} ];then - gawk -i inplace -v tmp="${TMP_FILE}" '/language/{print; while(getline line < tmp){print line};close(tmp);next}1' ${SPARKLE_FILE} - rm -f ${TMP_FILE} -else - echo 'empty SPARKLE_FILE' - rm -f ${TMP_FILE} - exit 1 -fi +URL="${REPO_URL}/$(basename ${PACKAGE})" +LENGTH="$(stat -c %s ${PACKAGE})" +python3 ./scripts/winsparkle.py winsparkle-ring.xml "Ring nightly" ${URL} ${OS} ${LENGTH} diff --git a/scripts/winsparkle.py b/scripts/winsparkle.py new file mode 100755 index 0000000000000000000000000000000000000000..2c9d2bfb7e9832068a4492f13a8ff3bc87207aa7 --- /dev/null +++ b/scripts/winsparkle.py @@ -0,0 +1,83 @@ +""" + * Copyright (C) 2016 Savoir-faire Linux Inc. + * + * Author: Olivier Soldano <olivier.soldano@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +""" + +import sys +import xml.etree.ElementTree as ET +from xml.dom import minidom +import datetime +from email.utils import formatdate + + +def sameDate(timestamp, pub): + date1 = timestamp.split() + date2 = pub.text.split() + return date1[:4] == date2[:4] + +def insertNewPackage(parent_element, title, attrib): + now = datetime.datetime.now() + + new_item = ET.Element("item") + + titre = ET.SubElement(new_item,"titre") + titre.text = title + now.strftime("%Y/%m/%d %H:%M") + + pubDate = ET.SubElement(new_item, "pubDate") + pubDate.text = formatdate() + + enclosure = ET.SubElement(new_item, "enclosure", attrib=attrib) + + parent_element.insert(4,new_item) + + +if __name__ == "__main__": + now = datetime.datetime.now() + now_timestamp = formatdate() # rfc 2822 + sparkle_file = sys.argv[1] + title = sys.argv[2] + url = sys.argv[3] + os = sys.argv[4] + length = sys.argv[5] + ET.register_namespace('sparkle','http://www.andymatuschak.org/xml-namespaces/sparkle') + namespace = {'sparkle' : 'http://www.andymatuschak.org/xml-namespaces/sparkle'} + tree = ET.parse(sparkle_file) + channel = tree.find("channel") + attrib = {'url' : url, + 'sparkle:version' : now.strftime("%Y/%m/%d"), + 'sparkle:shortVersionString' : "nightly-" + now.strftime("%Y/%m/%d"), + 'sparkle:os' : os, + 'length' : length, + 'type' : "application/octet-stream" + } + + for item in tree.findall(".//item"): + if sameDate(now_timestamp,item.find("pubDate")) and not\ + item.find("./enclosure[@sparkle:os='%s']" % os, namespace) is None: + channel.remove(item) + + insertNewPackage(channel, title, attrib) + + # Pretty printing with xml dom + str_tree = ET.tostring(tree.getroot(),encoding='utf-8').decode('utf-8').replace('\n','').replace('\r','') + reparsed_doc = minidom.parseString(str_tree) + xml_out = open(sparkle_file,"wb") + xml_out.write(reparsed_doc.toprettyxml(indent=' ', newl='\n',encoding="utf-8")) + xml_out.close() + +