SystemTrayIcon
From MythTV Official Wiki
If you'd like a simple icon in your system tray / notification area that indicates whether mythtv is currently recording or not, then this python script is for you.
Now I always know whether it's okay to reboot or not, and when to expect my disk activity to be high.
(It's my first python script, so be kind. -- harvest316)
#!/usr/bin/python
"""Script to display a system-tray icon showing mythtv recording status
Based on code from:
http://blog.vrplumber.com/scripts/recordingdevices.py
Which was based on code from:
http://www.mythtv.info/moin.cgi/SystemLedsRecordingStatusHowTo
Change Log:
12/12/08 Harvest316 removed sudo dependency by using mythtv-status instead of /dev/video*, and expanded tooltip
"""
import commands, re, time
def getRecordingStatus( ):
"""Retrieve recording status from mythtv-status"""
global mythtv_status_output
mythtv_status_output = commands.getoutput('nice -19 mythtv-status --auto-expire')
patternprog = re.compile( "Recording Now:" )
a_match = patternprog.search( mythtv_status_output )
if ( a_match ):
return "actively recording"
if __name__ == "__main__":
import wx
class RDApp( wx.App ):
duration = 60 # seconds
def OnInit( self ):
"""Initialise, kicking off our operations"""
self.frame = wx.Frame( None, -1, 'RecordingDevicesApp' )
self.icon = wx.TaskBarIcon()
wx.EVT_TASKBAR_LEFT_DCLICK( self.icon, self.OnClickIcon )
class MyTimer( wx.Timer ):
def Notify( self, event=None ):
wx.GetApp().MainOperation(event)
self.timer = MyTimer( )
# fire every self.duration seconds
self.timer.Start( self.duration * 1000, False )
self.frame.Show( False )
self.SetTopWindow( self.frame )
self.MainOperation(None)
return True
def MainOperation( self, event ):
"""Check every few seconds for current status"""
self.setStatus( getRecordingStatus() )
def setStatus( self, recording ):
"""Set the icon's current representation"""
width = 14
bitmap = wx.EmptyBitmap(width, width)
dc = wx.MemoryDC( )
dc.SelectObject( bitmap )
try:
dc.SetBackground( wx.BLUE_BRUSH )
dc.Clear()
if recording:
brush = wx.RED_BRUSH
else:
brush = wx.GREEN_BRUSH
dc.SetBrush( brush )
dc.DrawCircle( width/2,width/2,width/2-2 )
finally:
dc.SelectObject( wx.NullBitmap )
bitmap.SetMaskColour( wx.BLUE )
icon = wx.IconFromBitmap(bitmap)
self.icon.SetIcon( icon, mythtv_status_output )
def OnClickIcon( self, event ):
"""Handle double-click of icon (close)"""
self.icon.RemoveIcon()
self.frame.Close()
app = RDApp()
app.MainLoop()