diff --git a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py index 247856b88..dd304a208 100644 --- a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py +++ b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py @@ -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.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.suppressPrerelease, 0, wx.ALL|wx.EXPAND, 5 ) 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()) panel.SetSizer( mainSizer ) @@ -55,6 +96,23 @@ to receive notifications for self.UpdateSettings.set('all', 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): return bitmapLoader.getBitmap("pyfa64", "icons") diff --git a/gui/updateDialog.py b/gui/updateDialog.py index 25ec1f693..795bec739 100644 --- a/gui/updateDialog.py +++ b/gui/updateDialog.py @@ -41,6 +41,7 @@ class UpdateDialog(wx.Dialog): headSizer.Add( self.headingText, 1, wx.ALL, 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 ) versionSizer = wx.BoxSizer( wx.HORIZONTAL ) @@ -69,7 +70,8 @@ class UpdateDialog(wx.Dialog): 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 ) mainSizer.Add( notesSizer, 1, wx.EXPAND, 5 ) @@ -82,8 +84,9 @@ class UpdateDialog(wx.Dialog): actionSizer = wx.BoxSizer( wx.HORIZONTAL ) goSizer = wx.BoxSizer( wx.VERTICAL ) - self.goButton = wx.Button( self, wx.ID_ANY, "Download", wx.DefaultPosition, wx.DefaultSize, 0 ) - goSizer.Add( self.goButton, 0, wx.ALL, 5 ) + self.downloadButton = wx.Button( self, wx.ID_ANY, "Download", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.downloadButton.Bind(wx.EVT_BUTTON, self.OnDownload) + goSizer.Add( self.downloadButton, 0, wx.ALL, 5 ) actionSizer.Add( goSizer, 1, wx.EXPAND, 5 ) self.closeButton = wx.Button(self, wx.ID_CLOSE) @@ -94,13 +97,12 @@ class UpdateDialog(wx.Dialog): self.SetSizer( mainSizer ) 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 ) def OnClose(self, e): @@ -111,3 +113,7 @@ class UpdateDialog(wx.Dialog): self.UpdateSettings.set('version', self.releaseInfo['tag_name']) else: 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) \ No newline at end of file diff --git a/service/settings.py b/service/settings.py index c23ed9eb6..adcb2cb35 100644 --- a/service/settings.py +++ b/service/settings.py @@ -38,6 +38,7 @@ class SettingsProvider(): os.mkdir(self.BASE_PATH); def getSettings(self, area, defaults=None): + s = self.settings.get(area) if s is None: p = os.path.join(self.BASE_PATH, area) @@ -239,11 +240,7 @@ class UpdateSettings(): self.serviceUpdateSettings = SettingsProvider.getInstance().getSettings("pyfaServiceUpdateSettings", serviceUpdateDefaultSettings) def get(self, type): - print "Getting "+type+ ": " - print self.serviceUpdateSettings["suppress" + type] - return self.serviceUpdateSettings["suppress" + type] + return self.serviceUpdateSettings[type] def set(self, type, value): - self.serviceUpdateSettings["suppress" + type] = value - print "Setting "+type+ " = " - print self.serviceUpdateSettings["suppress" + type] \ No newline at end of file + self.serviceUpdateSettings[type] = value \ No newline at end of file diff --git a/service/update.py b/service/update.py index a3f39e586..7279d4a77 100644 --- a/service/update.py +++ b/service/update.py @@ -22,29 +22,49 @@ import wx import urllib2 import json import config - -from service.settings import SettingsProvider, UpdateSettings +import service class CheckUpdateThread(threading.Thread): def __init__(self, callback): threading.Thread.__init__(self) self.callback = callback - self.settings = UpdateSettings.getInstance() + self.settings = service.settings.UpdateSettings.getInstance() def run(self): - print "In the thread" + # Suppress all if (self.settings.get('all')): return try: response = urllib2.urlopen('https://api.github.com/repos/DarkFenX/Pyfa/releases') jsonResponse = json.loads(response.read()); - responseVersion = jsonResponse[0]['tag_name'].replace('v', '', 1) - if responseVersion != config.version: - print "New version!" - wx.CallAfter(self.callback, jsonResponse[0]) - except: + i = 0 + while (True): + release = jsonResponse[i] + + # 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 + + def versiontuple(v): + return tuple(map(int, (v.split(".")))) class Update(): instance = None @@ -52,7 +72,6 @@ class Update(): pass def CheckUpdate(self, callback): - print "Checking for Updates" thread = CheckUpdateThread(callback) thread.start()