Added logic for notification suppression, along with other tweaks. Did not worry too much on how to handle pre-releases.
This commit is contained in:
@@ -33,12 +33,53 @@ to receive notifications for
|
|||||||
|
|
||||||
self.suppressAll = wx.CheckBox( panel, wx.ID_ANY, u"Suppress all update notifications", wx.DefaultPosition, wx.DefaultSize, 0 )
|
self.suppressAll = wx.CheckBox( panel, wx.ID_ANY, u"Suppress all update notifications", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
self.suppressPrerelease = wx.CheckBox( panel, wx.ID_ANY, u"Suppress only pre-release notifications", wx.DefaultPosition, wx.DefaultSize, 0 )
|
self.suppressPrerelease = wx.CheckBox( panel, wx.ID_ANY, u"Suppress only pre-release notifications", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
|
|
||||||
mainSizer.Add( self.suppressAll, 0, wx.ALL|wx.EXPAND, 5 )
|
mainSizer.Add( self.suppressAll, 0, wx.ALL|wx.EXPAND, 5 )
|
||||||
mainSizer.Add( self.suppressPrerelease, 0, wx.ALL|wx.EXPAND, 5 )
|
mainSizer.Add( self.suppressPrerelease, 0, wx.ALL|wx.EXPAND, 5 )
|
||||||
|
|
||||||
self.suppressAll.Bind(wx.EVT_CHECKBOX, self.OnSuppressAllStateChange)
|
self.suppressAll.Bind(wx.EVT_CHECKBOX, self.OnSuppressAllStateChange)
|
||||||
|
self.suppressPrerelease.Bind(wx.EVT_CHECKBOX, self.OnPrereleaseStateChange)
|
||||||
|
|
||||||
|
self.suppressAll.SetValue(self.UpdateSettings.get('all'))
|
||||||
|
self.suppressPrerelease.SetValue(self.UpdateSettings.get('prerelease'))
|
||||||
|
|
||||||
|
if (self.UpdateSettings.get('version')):
|
||||||
|
self.versionSizer = wx.BoxSizer( wx.VERTICAL )
|
||||||
|
|
||||||
|
|
||||||
|
self.versionTitle = wx.StaticText( panel, wx.ID_ANY, "Suppressing "+self.UpdateSettings.get('version')+" Notifications", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
|
self.versionTitle.Wrap( -1 )
|
||||||
|
self.versionTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) )
|
||||||
|
|
||||||
|
self.versionInfo = '''
|
||||||
|
There is a release available which you have chosen to suppress.
|
||||||
|
You can choose to reset notification suppression for this release,
|
||||||
|
or download the new release from GitHub.
|
||||||
|
'''
|
||||||
|
|
||||||
|
self.versionSizer.AddSpacer( ( 5, 5), 0, wx.EXPAND, 5 )
|
||||||
|
|
||||||
|
self.versionSizer.Add( wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND, 5 )
|
||||||
|
self.versionSizer.AddSpacer( ( 5, 5), 0, wx.EXPAND, 5 )
|
||||||
|
|
||||||
|
self.versionSizer.Add( self.versionTitle, 0, wx.EXPAND, 5 )
|
||||||
|
self.versionDesc = wx.StaticText( panel, wx.ID_ANY, self.versionInfo, wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
|
self.versionSizer.Add( self.versionDesc, 0, wx.ALL, 5 )
|
||||||
|
|
||||||
|
actionSizer = wx.BoxSizer( wx.HORIZONTAL )
|
||||||
|
resetSizer = wx.BoxSizer( wx.VERTICAL )
|
||||||
|
|
||||||
|
self.downloadButton = wx.Button( panel, wx.ID_ANY, "Download", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
|
self.downloadButton.Bind(wx.EVT_BUTTON, self.OnDownload)
|
||||||
|
resetSizer.Add( self.downloadButton, 0, wx.ALL, 5 )
|
||||||
|
actionSizer.Add( resetSizer, 1, wx.EXPAND, 5 )
|
||||||
|
|
||||||
|
self.resetButton = wx.Button( panel, wx.ID_ANY, "Reset Suppression", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
|
self.resetButton.Bind(wx.EVT_BUTTON, self.ResetSuppression)
|
||||||
|
actionSizer.Add( self.resetButton, 0, wx.ALL, 5 )
|
||||||
|
self.versionSizer.Add( actionSizer, 0, wx.EXPAND, 5 )
|
||||||
|
mainSizer.Add( self.versionSizer, 0, wx.EXPAND, 5 )
|
||||||
|
|
||||||
self.ToggleSuppressAll(self.suppressAll.IsChecked())
|
self.ToggleSuppressAll(self.suppressAll.IsChecked())
|
||||||
|
|
||||||
panel.SetSizer( mainSizer )
|
panel.SetSizer( mainSizer )
|
||||||
@@ -55,6 +96,23 @@ to receive notifications for
|
|||||||
self.UpdateSettings.set('all', self.suppressAll.IsChecked())
|
self.UpdateSettings.set('all', self.suppressAll.IsChecked())
|
||||||
self.ToggleSuppressAll(self.suppressAll.IsChecked())
|
self.ToggleSuppressAll(self.suppressAll.IsChecked())
|
||||||
|
|
||||||
|
def OnPrereleaseStateChange(self, event):
|
||||||
|
self.UpdateSettings.set('prerelease', self.suppressPrerelease.IsChecked())
|
||||||
|
|
||||||
|
def ResetSuppression(self, event):
|
||||||
|
self.UpdateSettings.set('version', None)
|
||||||
|
|
||||||
|
# Todo: Find a way to hide the entire panel in one go
|
||||||
|
self.versionSizer.Hide(True)
|
||||||
|
self.versionTitle.Hide()
|
||||||
|
self.versionDesc.Hide()
|
||||||
|
self.downloadButton.Hide()
|
||||||
|
self.resetButton.Hide()
|
||||||
|
self.resetButton.Hide()
|
||||||
|
|
||||||
|
def OnDownload(self, event):
|
||||||
|
wx.LaunchDefaultBrowser('https://github.com/DarkFenX/Pyfa/releases/tag/'+self.UpdateSettings.get('version'))
|
||||||
|
|
||||||
def getImage(self):
|
def getImage(self):
|
||||||
return bitmapLoader.getBitmap("pyfa64", "icons")
|
return bitmapLoader.getBitmap("pyfa64", "icons")
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ class UpdateDialog(wx.Dialog):
|
|||||||
|
|
||||||
headSizer.Add( self.headingText, 1, wx.ALL, 5 )
|
headSizer.Add( self.headingText, 1, wx.ALL, 5 )
|
||||||
mainSizer.Add( headSizer, 0, wx.EXPAND, 5 )
|
mainSizer.Add( headSizer, 0, wx.EXPAND, 5 )
|
||||||
|
|
||||||
mainSizer.Add( wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND |wx.ALL, 5 )
|
mainSizer.Add( wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND |wx.ALL, 5 )
|
||||||
|
|
||||||
versionSizer = wx.BoxSizer( wx.HORIZONTAL )
|
versionSizer = wx.BoxSizer( wx.HORIZONTAL )
|
||||||
@@ -69,7 +70,8 @@ class UpdateDialog(wx.Dialog):
|
|||||||
|
|
||||||
notesSizer = wx.BoxSizer( wx.HORIZONTAL )
|
notesSizer = wx.BoxSizer( wx.HORIZONTAL )
|
||||||
|
|
||||||
self.notesTextCtrl = wx.TextCtrl( self, wx.ID_ANY, self.releaseInfo['body'], wx.DefaultPosition, wx.DefaultSize, wx.TE_AUTO_URL|wx.TE_MULTILINE|wx.TE_NO_VSCROLL|wx.TE_READONLY|wx.DOUBLE_BORDER|wx.TRANSPARENT_WINDOW )
|
self.notesTextCtrl = wx.TextCtrl( self, wx.ID_ANY, self.releaseInfo['body'], wx.DefaultPosition, wx.DefaultSize, wx.TE_AUTO_URL|wx.TE_MULTILINE|wx.TE_READONLY|wx.DOUBLE_BORDER|wx.TRANSPARENT_WINDOW )
|
||||||
|
|
||||||
notesSizer.Add( self.notesTextCtrl, 1, wx.EXPAND|wx.LEFT|wx.RIGHT, 5 )
|
notesSizer.Add( self.notesTextCtrl, 1, wx.EXPAND|wx.LEFT|wx.RIGHT, 5 )
|
||||||
mainSizer.Add( notesSizer, 1, wx.EXPAND, 5 )
|
mainSizer.Add( notesSizer, 1, wx.EXPAND, 5 )
|
||||||
|
|
||||||
@@ -82,8 +84,9 @@ class UpdateDialog(wx.Dialog):
|
|||||||
actionSizer = wx.BoxSizer( wx.HORIZONTAL )
|
actionSizer = wx.BoxSizer( wx.HORIZONTAL )
|
||||||
|
|
||||||
goSizer = wx.BoxSizer( wx.VERTICAL )
|
goSizer = wx.BoxSizer( wx.VERTICAL )
|
||||||
self.goButton = wx.Button( self, wx.ID_ANY, "Download", wx.DefaultPosition, wx.DefaultSize, 0 )
|
self.downloadButton = wx.Button( self, wx.ID_ANY, "Download", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
goSizer.Add( self.goButton, 0, wx.ALL, 5 )
|
self.downloadButton.Bind(wx.EVT_BUTTON, self.OnDownload)
|
||||||
|
goSizer.Add( self.downloadButton, 0, wx.ALL, 5 )
|
||||||
actionSizer.Add( goSizer, 1, wx.EXPAND, 5 )
|
actionSizer.Add( goSizer, 1, wx.EXPAND, 5 )
|
||||||
|
|
||||||
self.closeButton = wx.Button(self, wx.ID_CLOSE)
|
self.closeButton = wx.Button(self, wx.ID_CLOSE)
|
||||||
@@ -94,13 +97,12 @@ class UpdateDialog(wx.Dialog):
|
|||||||
self.SetSizer( mainSizer )
|
self.SetSizer( mainSizer )
|
||||||
self.Layout()
|
self.Layout()
|
||||||
|
|
||||||
|
# Handle use-case of suppressing a release, then a new version becoming available.
|
||||||
|
# If that new version is not suppressed, the old version will remain in the preferences and
|
||||||
|
# may cause confusion. If this dialog box is popping up for any reason, that mean we can
|
||||||
|
# safely reset this setting
|
||||||
|
self.UpdateSettings.set('version', None)
|
||||||
|
|
||||||
'''
|
|
||||||
TODO: If release suppression is not ticked, make sure it's set correctly in settings.
|
|
||||||
Otherwise, a release will be suppressed, and a new release will come around. However,
|
|
||||||
if user does not suppress that one, the old release will continue to see the suppressed
|
|
||||||
release in prefs
|
|
||||||
'''
|
|
||||||
self.Centre( wx.BOTH )
|
self.Centre( wx.BOTH )
|
||||||
|
|
||||||
def OnClose(self, e):
|
def OnClose(self, e):
|
||||||
@@ -111,3 +113,7 @@ class UpdateDialog(wx.Dialog):
|
|||||||
self.UpdateSettings.set('version', self.releaseInfo['tag_name'])
|
self.UpdateSettings.set('version', self.releaseInfo['tag_name'])
|
||||||
else:
|
else:
|
||||||
self.UpdateSettings.set('version', None)
|
self.UpdateSettings.set('version', None)
|
||||||
|
|
||||||
|
def OnDownload(self, e):
|
||||||
|
wx.LaunchDefaultBrowser('https://github.com/DarkFenX/Pyfa/releases/tag/'+self.releaseInfo['tag_name'])
|
||||||
|
self.OnClose(e)
|
||||||
@@ -38,6 +38,7 @@ class SettingsProvider():
|
|||||||
os.mkdir(self.BASE_PATH);
|
os.mkdir(self.BASE_PATH);
|
||||||
|
|
||||||
def getSettings(self, area, defaults=None):
|
def getSettings(self, area, defaults=None):
|
||||||
|
|
||||||
s = self.settings.get(area)
|
s = self.settings.get(area)
|
||||||
if s is None:
|
if s is None:
|
||||||
p = os.path.join(self.BASE_PATH, area)
|
p = os.path.join(self.BASE_PATH, area)
|
||||||
@@ -239,11 +240,7 @@ class UpdateSettings():
|
|||||||
self.serviceUpdateSettings = SettingsProvider.getInstance().getSettings("pyfaServiceUpdateSettings", serviceUpdateDefaultSettings)
|
self.serviceUpdateSettings = SettingsProvider.getInstance().getSettings("pyfaServiceUpdateSettings", serviceUpdateDefaultSettings)
|
||||||
|
|
||||||
def get(self, type):
|
def get(self, type):
|
||||||
print "Getting "+type+ ": "
|
return self.serviceUpdateSettings[type]
|
||||||
print self.serviceUpdateSettings["suppress" + type]
|
|
||||||
return self.serviceUpdateSettings["suppress" + type]
|
|
||||||
|
|
||||||
def set(self, type, value):
|
def set(self, type, value):
|
||||||
self.serviceUpdateSettings["suppress" + type] = value
|
self.serviceUpdateSettings[type] = value
|
||||||
print "Setting "+type+ " = "
|
|
||||||
print self.serviceUpdateSettings["suppress" + type]
|
|
||||||
@@ -22,29 +22,49 @@ import wx
|
|||||||
import urllib2
|
import urllib2
|
||||||
import json
|
import json
|
||||||
import config
|
import config
|
||||||
|
import service
|
||||||
from service.settings import SettingsProvider, UpdateSettings
|
|
||||||
|
|
||||||
class CheckUpdateThread(threading.Thread):
|
class CheckUpdateThread(threading.Thread):
|
||||||
def __init__(self, callback):
|
def __init__(self, callback):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
self.settings = UpdateSettings.getInstance()
|
self.settings = service.settings.UpdateSettings.getInstance()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
print "In the thread"
|
# Suppress all
|
||||||
if (self.settings.get('all')):
|
if (self.settings.get('all')):
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = urllib2.urlopen('https://api.github.com/repos/DarkFenX/Pyfa/releases')
|
response = urllib2.urlopen('https://api.github.com/repos/DarkFenX/Pyfa/releases')
|
||||||
jsonResponse = json.loads(response.read());
|
jsonResponse = json.loads(response.read());
|
||||||
responseVersion = jsonResponse[0]['tag_name'].replace('v', '', 1)
|
i = 0
|
||||||
if responseVersion != config.version:
|
while (True):
|
||||||
print "New version!"
|
release = jsonResponse[i]
|
||||||
wx.CallAfter(self.callback, jsonResponse[0])
|
|
||||||
except:
|
# Suppress pre releases
|
||||||
|
if (release['prerelease'] and self.settings.get('prerelease')):
|
||||||
|
i += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Handle use-case of updating to suppressed version
|
||||||
|
if self.settings.get('version') == 'v'+config.version:
|
||||||
|
self.settings.set('version', None)
|
||||||
|
|
||||||
|
# Suppress version
|
||||||
|
if (release['tag_name'] == self.settings.get('version')):
|
||||||
|
return
|
||||||
|
|
||||||
|
version = release['tag_name'].replace('v', '', 1)
|
||||||
|
if version != config.version:
|
||||||
|
wx.CallAfter(self.callback, jsonResponse[i])
|
||||||
|
break;
|
||||||
|
|
||||||
|
except: # for when there is no internet connection
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def versiontuple(v):
|
||||||
|
return tuple(map(int, (v.split("."))))
|
||||||
|
|
||||||
class Update():
|
class Update():
|
||||||
instance = None
|
instance = None
|
||||||
@@ -52,7 +72,6 @@ class Update():
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def CheckUpdate(self, callback):
|
def CheckUpdate(self, callback):
|
||||||
print "Checking for Updates"
|
|
||||||
thread = CheckUpdateThread(callback)
|
thread = CheckUpdateThread(callback)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user