errore plugins emesene

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

errore plugins emesene

Messaggio da Ivan! »

Salve :)

Premetto che questo è il primo plugin di emesene che (tento) di scrivere...

volevo fare un plugin che cambiasse il messaggio personale ogni 60 secondi...
ho preso un pò di codice dal plugin countdown, che fa all'incirca la stessa cosa... ;D

Codice: Seleziona tutto

import Plugin
import gobject

msg_1 = "Hello World! 1"
msg_2 = "Hello World! 2"
num = 2


class MainClass( Plugin.Plugin ):
    	'''Main plugin class'''

	def __init__( self, controller, msn ):
		'''Contructor'''

		Plugin.Plugin.__init__( self, controller, msn )

		self.description = _( 'Cambia messaggio ogni 60 secondi.' )
		self.authors = { '...' }
		self.website = '...'
		self.displayName = _( 'Mess' )
		self.name = 'Mess'

		self.config = controller.config
		self.config.readPluginConfig(self.name)

		self.enabled = False

	def start( self ):
		'''start the plugin'''
		self.enabled = True
		self.timeout = gobject.timeout_add(60000, self.refresh)
		self.refresh()

	def stop( self ):    
		'''stop the plugin'''
		self.enabled = False

	def check( self ):
		'''
		check if everything is OK to start the plugin
		return a tuple whith a boolean and a message
		if OK -> ( True , 'some message' )
		else -> ( False , 'error message' )
		'''

		return ( True, 'Ok' )

	def refresh( self ):
		'''refresh the personal message with the new message'''

		if num == 1:	
			self.controller.contacts.set_message(msg_2)
			num == 2

		elif num == 2:
			self.controller.contacts.set_message(msg_1)
			num == 1
		
		return True
in pratica la parte che ho scritto per maggior parte io è la def refresh( self )...

Allora questo plugin quando lo attivo mi cambia il messaggio in hello world! 1
ma dopo mi rimane sempre lo stesso...

come posso fare ??

grazie e spero di essere stato chiaro :)
Ultima modifica di Ivan! il domenica 7 settembre 2008, 12:34, modificato 1 volta in totale.
Avatar utente
marko782
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 284
Iscrizione: sabato 24 marzo 2007, 12:53
Località: Monza (MI)

Re: errore plugins emesene

Messaggio da marko782 »

Devi far ripartire il timer ogni volta, quindi in refresh() prima del return inserisci la riga del timer che hai in start() e dovrebbe andare ;D

Bei tempi quando avevo scritto un plugin con insulti random nel messaggio personale molto coloriti (nel senso che erano ben forbiti ed erano pure colorati!)

ciao! ;D ;D
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

Re: errore plugins emesene

Messaggio da Ivan! »

Allora il def refresh di prima

Codice: Seleziona tutto

	def refresh( self ):
		'''refresh the personal message with the new message'''

		if num == 1:	
			self.controller.contacts.set_message(msg_2)
			num == 2

		elif num == 2:
			self.controller.contacts.set_message(msg_1)
			num == 1
		
		return True
È diventato

Codice: Seleziona tutto

	def refresh( self ):
		'''refresh the personal message with the new message'''

		if num == 1:	
			self.controller.contacts.set_message(msg_2)
			num == 2

		elif num == 2:
			self.controller.contacts.set_message(msg_1)
			num == 1

		self.timeout = gobject.timeout_add(60000, self.refresh)

		return True
solo che non cambia niente 
sta lì il primo messaggio ma non da neanche errori...

comunque grazie per l'aiuto :)
:(
Avatar utente
marko782
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 284
Iscrizione: sabato 24 marzo 2007, 12:53
Località: Monza (MI)

Re: errore plugins emesene

Messaggio da marko782 »

Ho detto una c*****, perdonami ;D

Ho riguardato i miei vecchi script e l' unica differenza con il tuo è che chiamavo direttamente la funzione timeout_add senza assegnarla ad alcun oggetto. Quindi toglila da refresh che non serve e togli anche il self.timeout = da start() e dovrebbe andare.

ciao! :) :)


EDIT: e comunque non credo sia quello il problema, guardando meglio quando in refresh assegni a num il valore 1 o 2 lo fai con == anzichè solo con =.
Per debuggare il plugin ti conviene far partire emesene da terminale in modo da avere gli errori su console e correggerli.
Ultima modifica di marko782 il domenica 7 settembre 2008, 15:49, modificato 1 volta in totale.
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

Re: errore plugins emesene

Messaggio da Ivan! »

non ti preoccupare  ;)

di far partire emesene da terminale lo feci per caso una volta e scoprii questa cosa...
quindi lì vedo a che riga è l'errore , se c'è...

cmq adesso provo a fare come hai detto tu

ciao e grazie  ;)
:)
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

Re: errore plugins emesene

Messaggio da Ivan! »

Ho provato ma quando la seleziono mi dice :

Codice: Seleziona tutto

Errore fatale
Questo è un bug. Segnalarlo a: http://www.emesene.org

Traceback (most recent call last):

  File "/usr/share/emesene/PluginManagerDialog.py", line 251, in active_toggled
    plugin.start()

  File "/home/ivan/.config/emesene1.0/pluginsEmesene/Mess_1.py", line 34, in start
    self.refresh()

  File "/home/ivan/.config/emesene1.0/pluginsEmesene/Mess_1.py", line 53, in refresh
    if num == 1:

UnboundLocalError: local variable 'num' referenced before assignment
e poi dopo poco che è selezionato

Codice: Seleziona tutto

Errore fatale
Questo è un bug. Segnalarlo a: http://www.emesene.org

Traceback (most recent call last):

  File "/home/ivan/.config/emesene1.0/pluginsEmesene/Mess_1.py", line 53, in refresh
    if num == 1:

UnboundLocalError: local variable 'num' referenced before assignment
Ho fatto anche quello che mi hai detto sul refresh e ho tolto self.timeout


ciao  :(
e
grazie  :)
Avatar utente
marko782
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 284
Iscrizione: sabato 24 marzo 2007, 12:53
Località: Monza (MI)

Re: errore plugins emesene

Messaggio da marko782 »

uhm uhm...

Proviamo ad eliminare le variabili globali e ad usare solo variabili di classe, perchè quelle globali in python non ricordo come si usano e non ho voglia di controllare ;D

Try this:

Codice: Seleziona tutto

import Plugin
import gobject




class MainClass( Plugin.Plugin ):
    	'''Main plugin class'''

	def __init__( self, controller, msn ):
		'''Contructor'''

		Plugin.Plugin.__init__( self, controller, msn )

		self.description = _( 'Cambia messaggio ogni 60 secondi.' )
		self.authors = { '...' }
		self.website = '...'
		self.displayName = _( 'Mess' )
		self.name = 'Mess'

		self.config = controller.config
		self.config.readPluginConfig(self.name)

		self.enabled = False
		
		self.msg_1 = "Hello World! 1"
		self.msg_2 = "Hello World! 2"
		self.num = 2

	def start( self ):
		'''start the plugin'''
		self.enabled = True
		self.timeout = gobject.timeout_add(60000, self.refresh)
		self.refresh()

	def stop( self ):    
		'''stop the plugin'''
		self.enabled = False

	def check( self ):
		'''
		check if everything is OK to start the plugin
		return a tuple whith a boolean and a message
		if OK -> ( True , 'some message' )
		else -> ( False , 'error message' )
		'''

		return ( True, 'Ok' )

	def refresh( self ):
		'''refresh the personal message with the new message'''

		if self.num == 1:	
			self.controller.contacts.set_message(msg_2)
			self.num = 2

		elif self.num == 2:
			self.controller.contacts.set_message(msg_1)
			self.num = 1
		
		return True
e deve funzionare, semplice ;D ;D
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

Re: errore plugins emesene

Messaggio da Ivan! »

ah ok provo  :)

ti faccio sapere se ce l'abbiamo fatta...

ciao e grazie
:)
Ultima modifica di Ivan! il domenica 7 settembre 2008, 16:52, modificato 1 volta in totale.
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

Re: errore plugins emesene

Messaggio da Ivan! »

allora mi da questo errore

Codice: Seleziona tutto

Errore fatale
Questo è un bug. Segnalarlo a: http://www.emesene.org

Traceback (most recent call last):

  File "/usr/share/emesene/PluginManagerDialog.py", line 251, in active_toggled
    plugin.start()

  File "/home/ivan/.config/emesene1.0/pluginsEmesene/Mess.py", line 34, in start
    self.refresh()

  File "/home/ivan/.config/emesene1.0/pluginsEmesene/Mess.py", line 58, in refresh
    self.controller.contacts.set_message(msg_1)

NameError: global name 'msg_1' is not defined
Ho cercato un pò su internet sulle variabili globali nel python...

e vedendo un messaggio in un forum ho provato a fare

Codice: Seleziona tutto

global msg_1
global msg_2
global num

msg_1 = "Hello World! 1"
msg_2 = "Hello World! 2"
num = 2
nel file senza le variabili di classe, quelle self.msg_1...
ma non va ugualmente...


ciao e grazie ancora per la tua pazienza :)

:(
Avatar utente
marko782
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 284
Iscrizione: sabato 24 marzo 2007, 12:53
Località: Monza (MI)

Re: errore plugins emesene

Messaggio da marko782 »

Ti stò facendo dannare, è che non avendo voglia di provare stò facendo perdere tempo a te ;D
Comunque se non va così mi ritiro (effettivamente mi ero dimenticato 2 cosette xD)

Codice: Seleziona tutto

import Plugin
import gobject




class MainClass( Plugin.Plugin ):
    	'''Main plugin class'''

	def __init__( self, controller, msn ):
		'''Contructor'''

		Plugin.Plugin.__init__( self, controller, msn )

		self.description = _( 'Cambia messaggio ogni 60 secondi.' )
		self.authors = { '...' }
		self.website = '...'
		self.displayName = _( 'Mess' )
		self.name = 'Mess'

		self.config = controller.config
		self.config.readPluginConfig(self.name)

		self.enabled = False
		
		self.msg_1 = "Hello World! 1"
		self.msg_2 = "Hello World! 2"
		self.num = 2

	def start( self ):
		'''start the plugin'''
		self.enabled = True
		self.timeout = gobject.timeout_add(60000, self.refresh)
		self.refresh()

	def stop( self ):    
		'''stop the plugin'''
		self.enabled = False

	def check( self ):
		'''
		check if everything is OK to start the plugin
		return a tuple whith a boolean and a message
		if OK -> ( True , 'some message' )
		else -> ( False , 'error message' )
		'''

		return ( True, 'Ok' )

	def refresh( self ):
		'''refresh the personal message with the new message'''

		if self.num == 1:	
			self.controller.contacts.set_message(self.msg_2)
			self.num = 2

		elif self.num == 2:
			self.controller.contacts.set_message(self.msg_1)
			self.num = 1
		
		return True
Le variabili globali di questi tempi è meglio risparmiarsele, impara bene la programmazione ad oggetti e vedrai che sarai molto più soddisfatto!
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

Re: errore plugins emesene

Messaggio da Ivan! »

non ti preoccupare...
il plugin lo devo scrivere io quindi è giusto che ci pensi io  ;D

l'errore è di sicuro da qualche parte in quelle variabili...  >:(

provo quello che mi hai detto e ti faccio sapere

ciao  :)
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

Re: errore plugins emesene

Messaggio da Ivan! »

non ti ritirare...  ;D
funziona!!!  (yes)

Adesso mi potresti spiegare cosa hai modificato, cosa non andava bene e cosa ti sei dimenticato??
Almeno le prossime volte non farò lo stesso errore ;D

grazie 
(b2b)
Avatar utente
marko782
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 284
Iscrizione: sabato 24 marzo 2007, 12:53
Località: Monza (MI)

Re: errore plugins emesene

Messaggio da marko782 »

Bene bene, meno male ;D

Nell' ultima versione ho aggiunto solo "self." davanti a msg_1 e msg_2 quando venivano passati come parametro alla funzione set_message() in refresh().
Per il resto ho "incapsulato" tutto nell' oggetto MainClass anzichè usare qualche attributo di classe e qualche variabile locale.
Le classi e gli oggetti all' inizio (almeno per me) sono stati un pò ostici da capire, soprattutto perchè non ne capivo o ritenevo futili le potenzialità ma se andrai avanti ti accorgerai che sono una vera manna dal cielo, rispetto alle confusionarie variabili locali.

ciao! ;D ;D
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

Re: errore plugins emesene

Messaggio da Ivan! »

Adesso il passo successivo è fare in modo che prenda i messaggi leggendo in sequenza un file, riga per riga...

mission impossible  ;D

speriamo che sia semplice

ciao e grazie
provo a fare questo secondo passo e se ho qualche problema riposto qui...

ciao e grazie ancora!
:) :)
Avatar utente
marko782
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 284
Iscrizione: sabato 24 marzo 2007, 12:53
Località: Monza (MI)

Re: errore plugins emesene

Messaggio da marko782 »

Dai che non è difficile, ce la puoi farcela! xDD
Avatar utente
Ivan!
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1560
Iscrizione: sabato 21 giugno 2008, 12:24

Re: errore plugins emesene

Messaggio da Ivan! »

proprio così XD

cmq bella l'idea degli insulti random e colorati
XD ;D

va beh adesso proviamo a fare questo primo vero plugin ;D

ciao e grazie  :)
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: errore plugins emesene

Messaggio da kelev »

Scusate l'ignoranza ma il linguaggio per i plugins di amsn è il python?
"E alla fine sei da solo, dove vai, con chi brindi?"
Avatar utente
marko782
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 284
Iscrizione: sabato 24 marzo 2007, 12:53
Località: Monza (MI)

Re: errore plugins emesene

Messaggio da marko782 »

xajx ha scritto: Scusate l'ignoranza ma il linguaggio per i plugins di amsn è il python?
Si stà parlando di emesene non amsn ;)
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: errore plugins emesene

Messaggio da kelev »

Ah lol..letto male :-[
"E alla fine sei da solo, dove vai, con chi brindi?"
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti