Added settings for update notification suppression.

This commit is contained in:
blitzmann
2014-02-15 21:58:48 -05:00
parent 7ced595cca
commit 024637432c
5 changed files with 136 additions and 25 deletions

View File

@@ -1 +1 @@
__all__ = ["pyfaGlobalPreferences","pyfaHTMLExportPreferences"]
__all__ = ["pyfaGlobalPreferences","pyfaHTMLExportPreferences","pyfaUpdatePreferences"]

View File

@@ -0,0 +1,61 @@
import wx
import service
import os
from gui.preferenceView import PreferenceView
from gui import bitmapLoader
import service
import gui.globalEvents as GE
class PFUpdatePref (PreferenceView):
title = "Pyfa Update Options"
desc = """
Pyfa can automatically check and notify you of new releases.
These options will allow you to choose what kind of updates, if any, you wish
to receive notifications for
"""
def populatePanel( self, panel ):
self.UpdateSettings = service.settings.UpdateSettings.getInstance()
self.dirtySettings = False
mainSizer = wx.BoxSizer( wx.VERTICAL )
self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 )
self.stTitle.Wrap( -1 )
self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) )
mainSizer.Add( self.stTitle, 0, wx.ALL, 5 )
self.stDesc = wx.StaticText( panel, wx.ID_ANY, self.desc, wx.DefaultPosition, wx.DefaultSize, 0 )
mainSizer.Add( self.stDesc, 0, wx.ALL, 5 )
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.ToggleSuppressAll(self.suppressAll.IsChecked())
panel.SetSizer( mainSizer )
panel.Layout()
def ToggleSuppressAll(self, bool):
''' Toggles other inputs on/off depending on value of SuppressAll '''
if bool:
self.suppressPrerelease.Disable()
else:
self.suppressPrerelease.Enable()
def OnSuppressAllStateChange(self, event):
self.UpdateSettings.set('all', self.suppressAll.IsChecked())
self.ToggleSuppressAll(self.suppressAll.IsChecked())
def getImage(self):
return bitmapLoader.getBitmap("pyfa64", "icons")
PFUpdatePref.register()

View File

@@ -20,12 +20,15 @@
import wx
import bitmapLoader
import config
import service
class UpdateDialog(wx.Dialog):
def __init__(self, parent, release):
wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = "Pyfa Update", pos = wx.DefaultPosition, size = wx.Size( 400,300 ), style = wx.DEFAULT_DIALOG_STYLE )
self.UpdateSettings = service.settings.UpdateSettings.getInstance()
self.releaseInfo = release
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
mainSizer = wx.BoxSizer( wx.VERTICAL )
@@ -41,40 +44,39 @@ class UpdateDialog(wx.Dialog):
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 )
if(self.releaseInfo['prerelease']):
self.releaseText = wx.StaticText( self, wx.ID_ANY, "Pre-release", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT )
self.releaseText.SetFont( wx.Font( 12, 74, 90, 92, False) )
self.releaseText.SetForegroundColour( wx.Colour( 230, 0, 0 ) )
else:
self.releaseText = wx.StaticText( self, wx.ID_ANY, "Stable", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT )
self.releaseText.SetFont( wx.Font( 12, 74, 90, 90, False) )
self.releaseText.Wrap( -1 )
versionSizer.Add( self.releaseText, 1, wx.ALL, 5 )
self.versionText = wx.StaticText( self, wx.ID_ANY, release['tag_name'], wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT )
self.versionText = wx.StaticText( self, wx.ID_ANY, self.releaseInfo['tag_name'], wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_LEFT )
self.versionText.Wrap( -1 )
self.versionText.SetFont( wx.Font( 12, 74, 90, 90, False) )
versionSizer.Add( self.versionText, 1, wx.ALL, 5 )
versionSizer.AddSpacer( ( 15, 5), 0, wx.EXPAND, 5 )
if(release['prerelease']):
pass
self.releaseText = wx.StaticText( self, wx.ID_ANY, "Pre-release", wx.DefaultPosition, wx.DefaultSize, 0 )
self.releaseText.SetFont( wx.Font( 12, 74, 90, 92, False, "Tahoma" ) )
self.releaseText.SetForegroundColour( wx.Colour( 230, 0, 0 ) )
else:
self.releaseText = wx.StaticText( self, wx.ID_ANY, "Stable", wx.DefaultPosition, wx.DefaultSize, 0 )
self.releaseText.SetFont( wx.Font( 12, 74, 90, 90, False) )
self.releaseText.Wrap( -1 )
versionSizer.Add( self.releaseText, 1, wx.ALL, 5 )
mainSizer.Add( versionSizer, 0, wx.EXPAND, 5 )
mainSizer.AddSpacer( ( 0, 5), 0, wx.EXPAND, 5 )
notesSizer = wx.BoxSizer( wx.HORIZONTAL )
self.notesTextCtrl = wx.TextCtrl( self, wx.ID_ANY, release['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_NO_VSCROLL|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 )
self.supressCheckbox = wx.CheckBox( self, wx.ID_ANY, "Don't show me again", wx.DefaultPosition, wx.DefaultSize, 0 )
mainSizer.Add( self.supressCheckbox, 0, wx.ALL, 5 )
self.supressPreCheckbox = wx.CheckBox( self, wx.ID_ANY, "Don't show me (pre-releases) again", wx.DefaultPosition, wx.DefaultSize, 0 )
mainSizer.Add( self.supressPreCheckbox, 0, wx.ALL, 5 )
self.supressCheckbox = wx.CheckBox( self, wx.ID_ANY, "Don't remind me again for this release", wx.DefaultPosition, wx.DefaultSize, 0 )
self.supressCheckbox.Bind(wx.EVT_CHECKBOX, self.SuppressChange)
mainSizer.Add( self.supressCheckbox, 0, wx.ALL, 5 )
mainSizer.Add( wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND |wx.ALL, 5 )
actionSizer = wx.BoxSizer( wx.HORIZONTAL )
@@ -83,16 +85,29 @@ class UpdateDialog(wx.Dialog):
self.goButton = wx.Button( self, wx.ID_ANY, "Download", wx.DefaultPosition, wx.DefaultSize, 0 )
goSizer.Add( self.goButton, 0, wx.ALL, 5 )
actionSizer.Add( goSizer, 1, wx.EXPAND, 5 )
self.closeButton = wx.Button( self, wx.ID_ANY, "Close", wx.DefaultPosition, wx.DefaultSize, 0 )
self.closeButton = wx.Button(self, wx.ID_CLOSE)
self.closeButton.Bind(wx.EVT_BUTTON, self.OnClose)
actionSizer.Add( self.closeButton, 0, wx.ALL, 5 )
mainSizer.Add( actionSizer, 0, wx.EXPAND, 5 )
self.SetSizer( mainSizer )
self.Layout()
'''
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):
self.Destroy()
self.Destroy()
def SuppressChange(self, e):
if (self.supressCheckbox.IsChecked()):
self.UpdateSettings.set('version', self.releaseInfo['tag_name'])
else:
self.UpdateSettings.set('version', None)

View File

@@ -215,4 +215,35 @@ class HTMLExportSettings():
return self.serviceHTMLExportSettings["path"]
def setPath(self, path):
self.serviceHTMLExportSettings["path"] = path
self.serviceHTMLExportSettings["path"] = path
"""
Settings used by update notification
"""
class UpdateSettings():
_instance = None
@classmethod
def getInstance(cls):
if cls._instance == None:
cls._instance = UpdateSettings()
return cls._instance
def __init__(self):
# Settings
# all - If True, suppress all update notifications
# prerelease - If True, suppress only prerelease notifications
# version - Set to release tag that user does not want notifications for
serviceUpdateDefaultSettings = { "all": False, "prerelease": False, 'version': None }
self.serviceUpdateSettings = SettingsProvider.getInstance().getSettings("pyfaServiceUpdateSettings", serviceUpdateDefaultSettings)
def get(self, type):
print "Getting "+type+ ": "
print self.serviceUpdateSettings["suppress" + type]
return self.serviceUpdateSettings["suppress" + type]
def set(self, type, value):
self.serviceUpdateSettings["suppress" + type] = value
print "Setting "+type+ " = "
print self.serviceUpdateSettings["suppress" + type]

View File

@@ -23,15 +23,19 @@ import urllib2
import json
import config
from service.settings import SettingsProvider
from service.settings import SettingsProvider, UpdateSettings
class CheckUpdateThread(threading.Thread):
def __init__(self, callback):
threading.Thread.__init__(self)
self.callback = callback
self.settings = UpdateSettings.getInstance()
def run(self):
print "In the thread"
if (self.settings.get('all')):
return
try:
response = urllib2.urlopen('https://api.github.com/repos/DarkFenX/Pyfa/releases')
jsonResponse = json.loads(response.read());