update version check code

This commit is contained in:
Damien Elmes 2012-09-21 23:33:41 +09:00
parent 723fb1ee2e
commit fc0ff95912
2 changed files with 43 additions and 36 deletions

View file

@ -758,18 +758,14 @@ and check the statistics for a home deck instead."""))
self.connect(self.autoUpdate, SIGNAL("clockIsOff"), self.clockIsOff) self.connect(self.autoUpdate, SIGNAL("clockIsOff"), self.clockIsOff)
self.autoUpdate.start() self.autoUpdate.start()
def newVerAvail(self, data): def newVerAvail(self, ver):
if self.pm.profile['suppressUpdate'] < data['latestVersion']: if self.pm.meta['suppressUpdate'] != ver:
aqt.update.askAndUpdate(self, data) aqt.update.askAndUpdate(self, ver)
def newMsg(self, data): def newMsg(self, data):
aqt.update.showMessages(self, data) aqt.update.showMessages(self, data)
def clockIsOff(self, diff): def clockIsOff(self):
if diff < 0:
ret = _("late")
else:
ret = _("early")
showWarning("""\ showWarning("""\
In order to ensure your collection works correctly when moved between \ In order to ensure your collection works correctly when moved between \
devices, Anki requires the system clock to be set correctly. Your system \ devices, Anki requires the system clock to be set correctly. Your system \

View file

@ -7,10 +7,8 @@ import anki, anki.utils, anki.lang, anki.stats
import aqt import aqt
import platform import platform
from aqt.utils import openLink from aqt.utils import openLink
from anki.utils import json from anki.utils import json, isWin, isMac
from aqt.utils import showText
baseUrl = "http://ankiweb.net/update/"
#baseUrl = "http://localhost:8001/update/"
class LatestVersionFinder(QThread): class LatestVersionFinder(QThread):
@ -18,30 +16,42 @@ class LatestVersionFinder(QThread):
QThread.__init__(self) QThread.__init__(self)
self.main = main self.main = main
self.config = main.pm.meta self.config = main.pm.meta
plat=sys.platform
while 1: def _data(self):
# we may get an interrupted system call, so try this in a loop
n = 0
theos = "unknown"
while n < 100:
n += 1
try: try:
pver=platform.platform() system = platform.system()
if isMac:
theos = "mac:%s" % (platform.mac_ver()[0])
elif isWin:
theos = "win:%s" % (platform.win32_ver()[0])
elif system == "Linux":
dist = platform.dist()
theos = "lin:%s:%s" % (dist[0], dist[1])
else:
theos = system
break break
except IOError: except:
# interrupted system call
continue continue
d = {"ver": aqt.appVersion, d = {"ver": aqt.appVersion,
"pver": pver, "os": theos,
"plat": plat,
"id": self.config['id'], "id": self.config['id'],
"lm": self.config['lastMsg'], "lm": self.config['lastMsg'],
"conf": self.config['created']} "crt": self.config['created']}
self.stats = d return d
def run(self): def run(self):
if not self.config['updates']: if not self.config['updates']:
return return
d = self.stats d = self._data()
d['proto'] = 2 d['proto'] = 1
d = urllib.urlencode(d) d = urllib.urlencode(d)
try: try:
f = urllib2.urlopen(baseUrl + "getQtVersion", d) f = urllib2.urlopen(aqt.appUpdate, d)
resp = f.read() resp = f.read()
if not resp: if not resp:
return return
@ -49,32 +59,33 @@ class LatestVersionFinder(QThread):
except: except:
# behind proxy, corrupt message, etc # behind proxy, corrupt message, etc
return return
print resp
if resp['msg']: if resp['msg']:
self.emit(SIGNAL("newMsg"), resp) self.emit(SIGNAL("newMsg"), resp)
if resp['latestVersion'] > aqt.appVersion: if resp['ver']:
self.emit(SIGNAL("newVerAvail"), resp) self.emit(SIGNAL("newVerAvail"), resp['ver'])
diff = resp['currentTime'] - time.time() diff = resp['time'] - time.time()
if abs(diff) > 300: if abs(diff) > 300:
self.emit(SIGNAL("clockIsOff"), diff) self.emit(SIGNAL("clockIsOff"))
def askAndUpdate(parent, version=None): def askAndUpdate(mw, ver):
version = version['latestVersion']
baseStr = ( baseStr = (
_('''<h1>Anki Updated</h1>Anki %s has been released.<br><br>''') % _('''<h1>Anki Updated</h1>Anki %s has been released.<br><br>''') %
version) ver)
msg = QMessageBox(parent) msg = QMessageBox(mw)
msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
msg.setIcon(QMessageBox.Information) msg.setIcon(QMessageBox.Information)
msg.setText(baseStr + _("Would you like to download it now?")) msg.setText(baseStr + _("Would you like to download it now?"))
button = QPushButton(_("Ignore this update")) button = QPushButton(_("Ignore this update"))
msg.addButton(button, QMessageBox.RejectRole) msg.addButton(button, QMessageBox.RejectRole)
msg.setDefaultButton(QMessageBox.Yes)
ret = msg.exec_() ret = msg.exec_()
if msg.clickedButton() == button: if msg.clickedButton() == button:
# ignore this update # ignore this update
parent.config['suppressUpdate'] = version mw.pm.meta['suppressUpdate'] = ver
elif ret == QMessageBox.Yes: elif ret == QMessageBox.Yes:
openLink(aqt.appWebsite) openLink(aqt.appWebsite)
def showMessages(main, data): def showMessages(mw, data):
aqt.ui.utils.showText(data['msg'], main, type="html") showText(data['msg'], parent=mw, type="html")
main.config['lastMsg'] = data['msgId'] mw.pm.meta['lastMsg'] = data['msgId']