- #coding: utf-8
- from appuifw import *
- import e32
- import os
- # folder in which settings files, media files, etc. are located.
- data_path = os . getcwd ( ) [ 0 ] + u ': \\ System \\ data \\ HabraKarma \\ '
- class Main:
- def __init__ ( self ) :
- app. screen = 'normal'
- # read the settings file, which is a dictionary,
- # stupidly saved via repr :)
- self . settings = eval ( open ( data_path + 'set.dat' ) . read ( ) )
- # List of fields for our form, insert the saved values ​​into its fields.
- self . fields = [
- ( u 'Habrayuzer' , 'text' , self . settings [ 'user' ] ) ,
- ( u "Auto update (min.)" , 'number' , self . settings [ 'time' ] ) ,
- ( u "Enable sound?" , 'combo' , ( [ u 'Yes' , u 'No' ] , int ( self . settings [ 'sound' ] ) ) ) ,
- ( u "Count the difference" , 'combo' , ( [ u 'Since the beginning of work' , u 'Since last update' ] , int ( self . settings [ 'diff' ] ) ) )
- ( u "Position X" , 'number' , self . settings [ 'X' ] ) ,
- ( u "Position Y" , 'number' , self . settings [ 'Y' ] ) ,
- ]
- # create a form with flags
- self . form = Form ( self . fields , flags = FFormDoubleSpaced | FFormEditModeOnly )
- # set the function that will save the values ​​from the form
- self . form . save_hook = self . save
- # if the server is already running, then the menu should be "stop" and vice versa
- if os . path . exists ( u 'd: \\ habra_flag' ) :
- self . form . menu = [ ( u 'Stop' , self . stop ) ]
- else :
- self . form . menu = [ ( u 'Run' , self . start_server ) ]
- # "execute" the form, that is, it will be displayed on the screen, as long as
- # we will not leave it.
- self . form . execute ( )
- # after exiting the form, check if the server is running and suggest to start it
- if not os . path . exists ( u 'd: \\ habra_flag' ) :
- if query ( u 'Run?' , 'query' ) :
- self . start_server ( )
- def start_server ( self ) :
- # actually server startup function
- self . form . menu = [ ( u 'Stop' , self . stop ) ]
- e32. start_server ( data_path + 'server.py' )
- def stop ( self ) :
- # server stop function.
- self . form . menu = [ ( u 'Run' , self . start_server ) ]
- open ( u 'd: \\ habra_flag' , 'w' ) . write ( 'stop' )
- def save ( self , arg = None ) :
- # take values ​​from the form and save them to the settings file.
- self . settings [ 'user' ] = arg [ 0 ] [ 2 ]
- self . settings [ 'time' ] = arg [ 1 ] [ 2 ]
- self . settings [ 'sound' ] = arg [ 2 ] [ 2 ] [ 1 ]
- self . settings [ 'diff' ] = arg [ 3 ] [ 2 ] [ 1 ]
- self . settings [ 'X' ] = arg [ 4 ] [ 2 ]
- self . settings [ 'Y' ] = arg [ 5 ] [ 2 ]
- open ( data_path + 'set.dat' , 'w' ) . write ( repr ( self . settings ) )
- return true
- a = Main ( )
- # - * - coding: utf-8 - * -
- import os
- import e32
- import sys
- # redirect errors to the file.
- sys . stderr = open ( 'd: \\ err.txt' , 'w' )
- import globalui as ui
- import topwindow
- from graphics import *
- import urllib
- import audio
- open ( u 'd: \\ habra_flag' , 'w' ) . write ( '' )
- data_path = os . getcwd ( ) [ 0 ] + u ': \\ System \\ data \\ HabraKarma \\ '
- # show that we started.
- ui. global_note ( u 'Habrastart!' )
- class Habra:
- def __init__ ( self ) :
- # open images
- self . habr_img = Image. open ( data_path + 'habr.png' )
- self . update_img = Image. open ( data_path + 'update.png' )
- # read settings
- self . settings = eval ( open ( data_path + 'set.dat' ) . read ( ) )
- self . last_karma = eval ( open ( data_path + 'karma.dat' ) . read ( ) )
- # open sound
- self . bad_sound = audio. Sound . open ( data_path + 'bad.wav' )
- self . good_sound = audio. Sound . open ( data_path + 'good.wav' )
- self . loop = True
- # create a TopWindow window
- self . top = topwindow. TopWindow ( )
- # specify rounding
- self . top . corner_type = 'corner5'
- self . top . size = ( 170 , 35 )
- # set the position from the settings file
- self . top . position = ( self . settings [ 'X' ] , self . settings [ 'Y' ] )
- self . top . show ( )
- self . karma_screen ( )
- self . mainloop ( )
- def stop ( self ) :
- self . loop = False
- self . top . hide ( )
- def karma_screen ( self ) :
- # function called for update
- self . update_screen ( )
- e32. ao_sleep ( 0.2 )
- # pull info from harba api
- data = urllib . urlopen ( 'http://habrahabr.ru/api/profile/' + self . settings [ 'user' ] ) . read ( )
- # they probably stumble me, but I don't want to drag it
- # case library for parsing xml
- karma = float ( data. split ( '<karma>' ) [ 1 ] . split ( '</ karma>' ) [ 0 ] )
- # compare new karma with old and
- # depending on the situation, collect the text, specify the color
- # and play the sound, if it is set in the settings
- if self . last_karma < karma:
- karma_diff = u '(+' + str ( abs ( self . last_karma -karma ) ) + u ')'
- karma_color = 0x009f31
- if not self . settings [ 'sound' ] :
- self . good_sound . play ( )
- elif self . last_karma > karma:
- karma_diff = u '(-' + str ( abs ( self . last_karma -karma ) ) + u ')'
- karma_color = 0xc30202
- if not self . settings [ 'sound' ] :
- self . bad_sound . play ( )
- else :
- karma_diff = u ''
- karma_color = 0xffffff
- if self . settings [ 'diff' ] :
- self . last_karma = karma
- open ( data_path + 'karma.dat' , 'w' ) . write ( repr ( karma ) )
- # here we will find out how many pixels the width of the text to occupy
- karma_width = self . img . measure_text ( unicode ( karma ) ) [ 0 ] [ 2 ]
- diff_width = self . img . measure_text ( karma_diff ) [ 0 ] [ 2 ]
- # and then the matter of technology :)
- self . img = Image. new ( ( 45 + karma_width + diff_width, 35 ) )
- self . top . size = ( self . img . size [ 0 ] , 35 )
- self . img . text ( ( 35 , 25 ) , unicode ( karma ) )
- self . img . text ( ( 35 + karma_width + 5 , 25 ) , karma_diff, fill = karma_color )
- self . img . blit ( self . habr_img )
- self . top . add_image ( self . img , ( 0 , 0 ) )
- def update_screen ( self ) :
- # this will be displayed during the update
- self . img = Image. new ( ( 165 , 35 ) )
- self . top . size = ( self . img . size [ 0 ] , 35 )
- self . img . blit ( self . update_img )
- self . img . text ( ( 35 , 25 ) , u 'Updated' )
- self . top . add_image ( self . img , ( 0 , 0 ) )
- def mainloop ( self ) :
- # and let the main server loop
- interval = self . settings [ 'time' ] * 60
- count = 0
- while self . loop :
- # if we are ordered to stop the server
- if open ( u 'd: \\ habra_flag' ) . read ( ) :
- os . remove ( u 'd: \\ habra_flag' )
- ui. global_note ( u 'Habrastop!' )
- self . loop = False
- count + = 1
- # if the time is right, we expose karma.
- if count > interval:
- count = 0
- self . karma_screen ( )
- e32. ao_sleep ( 1 )
- habr = Habra ( )
Source: https://habr.com/ru/post/77452/
All Articles