Archivo para 21 diciembre 2010



Skype Indicator 0.2

Recordais que empece ( a intentar ) a crear mi propio indicador para poder usar Skype. Bien, pues al final he utilizado las fuentes de Andreas Happe que comentaba al final del post y que permite crear un indicador que se integra con el menu de mensajeria del sistema. El problema que tuve es que su código no se me llegaba a ejecutar (me daba error en tiempo de ejecución y no hacia nada), asi que al final he tenido que adaptarlo un poco y al menos ya se ejecuta y aunque no puedo decir que es 100% funcional, si que puedo decir que he podido usarlo, y me ha permitido saber los mensajes que tenia pendientes de leer. Todo esto me ha servido tambien para aprender bastantes cosas del API de Skype: como recuperar el historial, los contactos, los mensajes pendientes, o enviar un mensaje a una persona en particular.

Nota: en los cambios que he hecho al codigo está que siempre muestre “1” como información de mensajes por leer, asociado al usuario que te esta escribiendo por el chat.

Nota 2: Para que funcione teneis que tener previamente abierto Skype.

Aunque puede que aun lo revise y si mis conocimientos me lo permiten lo haga “estable” por completo, dejo el código de todas formas para quien lo quiera usar/estudiar/mejorar:

#!/usr/bin/env python
#
#Copyright 2010 Andreas Happe
#
#Authors:
#    Andreas Happe <andreashappe@snikt.net>
#
#This program is free software: you can redistribute it and/or modify it 
#under the terms of either or both of the following licenses:
#
#1) the GNU Lesser General Public License version 3, as published by the 
#Free Software Foundation; and/or
#2) the GNU Lesser General Public License version 2.1, as published by 
#the Free Software Foundation.
#
#This program is distributed in the hope that it will be useful, but 
#WITHOUT ANY WARRANTY; without even the implied warranties of 
#MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR 
#PURPOSE.  See the applicable version of the GNU Lesser General Public 
#License for more details.
#
#You should have received a copy of both the GNU Lesser General Public 
#License version 3 and version 2.1 along with this program.  If not, see 
#<http://www.gnu.org/licenses/>
#

# Diciembre 2010 - Modificaciones: Piwi (primera revision) 

import indicate
import gobject
import gtk
import Skype4Py
import time

from time import time

def do_nothing(indicator):
    True

# this is the high-level notification functionality
class NotificationServer:
  def __init__(self):
    self.server = indicate.indicate_server_ref_default()
    self.server.set_type("message.im")
#   this is kinda ugly, or?
    self.server.set_desktop_file("/usr/share/applications/skype.desktop")
    pass

  def connect(self, skype):
    self.skype = skype
    self.server.connect("server-display", self.on_click)

   # CAMBIO: me da el error: TypeError: on_click() takes exactly 2 arguments (3 given), asi que inserte 1 tercer parametro en la funcion:
 
  # ESTA FUNCION ES PARA ABRIR LA VENTANA DE SKYPE
  def on_click(self, server, ignore):
    #self.skype.Client.Focus()
    print "==========================="
    # CAMBIO: me da error al intentar mostrar la ventana a Skype, insertando lo siguiente se soluciono:
    skype.skype.Client.Focus()
    #self.self.skype.Client.Focus()
    print "==========================="

  def activate_timeout_check(self):
    # CAMBIO de 5 lo cambie a 15, un poco mas de tiempo entre chequeos 
    gobject.timeout_add_seconds(15, self.skype.check_timeout, self.server)

  # ESTA FUNCION ES PARA ABRIR UN CHAT CON ALGUIEN
  def show_conversation(self, indicator, timestamp):
    display_name = indicator.get_property("name")
    print "CHAT_NAME es = "+display_name
    self.skype.show_chat_windows(display_name);

  # this is needed, cause otherwise the skype menu is only showed
  # when there are new unread messages.. another workaround
  def workaround_show_skype():
    indicator = indicate.Indicator()
    indicator.set_property("name", "workaround..")
    indicator.connect("user-display", self.show_conversation)
    indicator.show()
    indicator.hide()

  def show_indicator(self, conversation):
       
    print "adding " + conversation.display_name
    
    try:
      # Ubuntu 9.10 and above
      indicator = indicate.Indicator()
    except:
      # Ubuntu 9.04
      indicator = indicate.IndicatorMessage()

	# CAMBIO: Propiedades de los INDICADORES aqui hice bastantes cambios, deje solo la propiedad
    # Contador de conversaciones como String que muestra siempre el valor 1	
	  
    #indicator.set_property("name", conversation.display_name)
    indicator.set_property("name", conversation.display_name)
    #indicator.set_property("name", conversation.skype_id)
    indicator.set_property("subtype", "instant")
    indicator.set_property('draw-attention', 'true');
    #indicator.set_property('time', str(conversation.timestamps[0]))
    indicator.set_property('count','1');
    indicator.connect("user-display", self.show_conversation)
    indicator.show()

    # TODO: why?
    #print "Esperando 15..."
    gobject.timeout_add_seconds(15, do_nothing, indicator)


class UnreadConversation:
  def __init__(self, display_name, timestamp, skype_id):
    self.display_name = display_name
    self.skype_id = skype_id
    self.count = 0
    self.timestamps = [timestamp]

  def imprime() :
     print "display_name:"+display_name

  def add_timestamp(self, timestamp):
    if not timestamp in self.timestamps:
      self.timestamps.add(timestamp)
      self.count += 1


class SkypeBehaviour:
  # initialize skype
  def FOCUS(self):
     
     skype.skype.Client.Focus()

  def __init__(self):
    self.skype = Skype4Py.Skype();
    self.skype.OnAttachmentStatus = self.OnAttach;
    self.skype.OnMessageStatus = self.OnMessageStatus; 
    self.skype.Attach();
    self.name_mappings = {}
    self.unread_conversations = {}
    self.cb_show_conversation = None
    self.cb_show_indicator = None

  def SetShowConversationCallback(self, func):
    self.cb_show_conversation = func

  def SetShowIndicatorCallback(self, func):
    self.cb_show_indicator = func

  def OnAttach(self, status):
    if status == Skype4Py.apiAttachAvailable:
      self.skype.Attach();
    if status == Skype4Py.apiAttachSuccess:
      print 'connected to skype!'

  def OnMessageStatus(self, mesg, Status):
    print 'message status\n'
    print "========================"
    print "LLEGA UN MENSAJE========"
    print "========================"
    if Status == 'RECEIVED':
      print(mesg.FromDisplayName + "sent a message")
      display_name=mesg.FromDisplayName
      #print "PENDIENTE CHAT NUEVO: "+display_name
      if display_name in self.unread_conversations:
        #print "Ya esta metido"
        conversation = UnreadConversation(display_name, mesg.Timestamp, mesg.Name)
        self.cb_show_indicator(conversation)
      else :
        #print "Anadiendo..."
        conversation = UnreadConversation(display_name, mesg.Timestamp, mesg.Name)
        self.unread_conversations[display_name] = conversation
        self.cb_show_indicator(conversation)

  def remove_conversation(self, display_name):
    skype_name = self.name_mappings[display_name]
    del self.unread_conversations[display_name]
    return skype_name

  # update unread message collection
  # TODO: also remove messages that have been read through skype, otherwise
  #       they would stay until somebody clicks them in the indicator-applet
  def check_timeout(self, server):
    #print "timeout.\n"

    #----------------------------
	# CAMBIO IMPORTANTE: Aqui cambie la lista de mensajes que se consulta por la de chats pendientes (MissedChats)
    print "******** CONSULTANDO MENSAJES PENDIENTES **************** "
   
    for mesg in self.skype.MissedChats:
      display_name= mesg.FriendlyName
      # Recuperar el ultimo mensaje del chat y quien lo envio
      for m in mesg.Messages[:1]:
        print "MENSAJE:"+m.Body
        print "LO ENVIO:"+m.Sender.Handle
      #display_name= mesg.Name
      print "PENDIENTE CHAT: "+display_name
      if display_name in self.unread_conversations:
        #print "Ya esta metido"
        conversation = UnreadConversation(display_name, mesg.Timestamp, mesg.Name)
        self.cb_show_indicator(conversation)
      else :
        #print "Anadiendo..."
        conversation = UnreadConversation(display_name, mesg.Timestamp, mesg.Name)
        self.unread_conversations[display_name] = conversation
        self.cb_show_indicator(conversation)
    return True

  # ESTA FUNCION SE USA PARA ABRIR UNA CONVERSACION EN CONCRETO	
  def show_chat_windows(self, skype_name):
    #self.skype.Client.OpenMessageDialog(self.name_mappings[skype_name]);
    #self.skype.Client.OpenMessageDialog(skype_name);
	# No consegui que me funcionara, asi que al final abro la ventana principal de SKYPE
    conversation = self.unread_conversations[skype_name]
    print "Skype_NAME es "+skype_name
    print "conversation es "+conversation.skype_id
    self.skype.Client.Focus()


if __name__ == "__main__":

  skype = SkypeBehaviour();
  server = NotificationServer()

  skype.SetShowConversationCallback(server.show_conversation)
  skype.SetShowIndicatorCallback(server.show_indicator)
  server.connect(skype)

  #workaround_show_skype()

  # why is this needed?
  server.activate_timeout_check()

  # check for newly unread messages..
  skype.check_timeout(server)

  gtk.main()



Interesante tambien la opción que comenta Andrew para tener varias pestañanas de skype abiertas en Linux (aunque el programa tambien tiene sus “problemillas” y es aconsejable no mover la ventana de posición).

Ubuntu-savos Wallpaper

Descarga | Gnome-Look

Tema “Humanity” para Jdownloader…Genial!!!

A muchos de nosotros nos gusta tener todas las aplicaciones integradas con el mismo “look” o similar. Un pequeño inconveniente para JDownloader (aplicación Java) que va a resolverse con este tema.

– Bajate el tema y descomprimelo en la carpeta donde tengas instalado Jdownloader.

– Despues abre JDownloader y ve a:

_Settings tab_
-> _Basics
-> _User Interface
-> En Look_ section, elige _humanity_ under _Theme_.

Reinicia Jdownloader y listo.

Por cierto: Sinde dimite!!!

Descarga | Gnome-Look

XBMC 10.0 Dharma disponible

Ya se encuentra disponible la versión 10.0 de XBMC (Xbox media center), el genia media center que nos permite disfrutar de nuestra música y peliculas favoritas. Esta versión incluye mejoras a la interfaz, aceleración gráfica de video y facilita la instalación de nuevos temas y addons entre otras mejoras. Para instalarlo desde PPA podemos ejecutar:

sudo add-apt-repository ppa:team-xbmc/ppa
sudo apt-get update
sudo apt-get install xbmc

Tambien se encuentra disponible como ISO para que podamos arrancarlo directamente desde CD o instalarlo en un USB Live.

Mas información | LifeHacker | Web Upd8

Divergence Inspired

Varios decoradores Emerald inspirados en Divergence.

Descarga | Gnome-Look

Nuevo Articulo en la Tienda de Canonical: Teclado Ubuntu (flexible y resistente al agua)

Más información | Web Ubuntu

WikiRebels: El documental sobre Wikileaks (subtitulado al castellano)

Gracias a DragonJar os traigo un documental sobre Wikileaks bastante interesante traducido al castellano.

[Podeis descargar el video y los subtitulos desde el enlace o tambien visualizarlo desde Youtube, Para activar los subtítulos: click sobre el ícono “CC” abajo a la derecha]

Exclusiva corte en bruto del primer documental en profundidad sobre WikiLeaks y la gente detrás de la organización!

Desde el verano de 2010 hasta ahora, la televisión sueca ha estado siguiendo a WikiLeaks, la red de medios secretos, y a su enigmático Editor en Jefe, Julian Assange.

Los reporteros Jesper Huor y Bosse Lindquist han viajado a países clave en donde opera WikiLeaks, entrevistando a miembros directivos, tales como Assange, nuevo portavoz Kristinn Hrafnsson, así como personas tales como Daniel Domscheit-Berg, que ahora está comenzando su propia versión – Openleaks.org!

¿Hacia donde se dirige esta organización tan discreta? Más fuerte que nunca, o desarmada por los E.E.U.U.? ¿Quién es Assange: campeón de la libertad, espía o violador? ¿Cuáles son sus objetivos? ¿Cuáles son las consecuencias para Internet?

Tron Legacy Wallpaper

No!!!, esto no…

Contiene un “spoilerazo” muy gordo sobre: Star Wars: The Force Unleashed 2 – Battle for Endor

Si no quieres “destrozartelo” no veas el siguiente video:

Nota: a mi me gusta, total… soy malo… (o al menos eso decian los “buenos”).

Visto en | Games Ajare

Opera 11 (estable) Disponible

Opera 11 ha sido finalmente liberado con soporte de extensiones, mejoras en la apariencia, agrupación de pestañas, soporte a gestos del ratón y mucho más. Elavdeveloper nos hace un buen análisis de sus caracteristicas.

Y si lo que te llama la atención es la URL de mi visita, tampoco es para tanto!, iba para otro post pero ya aprovecho: es un homenaje de la revista Playboy con respecto a la pelicula Tron. No deja de ser curioso. (Nota: menores abstenerse hasta que os crezca el bigote).

Enlace | Descarga Opera





¿Es compatible tu equipo con Ubuntu?


( Muchos fondos de pantalla, aqui )

DESCARGATE SCIFI LIFE

365 Dias de Soledad
Me debes los sueños, las promesas y las noches rotas. Me debes la paz, la sonrisa y la esperanza robadas. Me debes la sangre, las lágrimas y el sudor vertido. Me debes las noches vacías, los abrazos anhelados. Me debes un beso de ajenjo de tu amarga boca.

The Ubuntu Counter Project - user number # 11961
Geo Visitors Map

Archivos

Comentarios recientes

scr 918 kiss downloa… en Momentos Musicales
Seba en Wolf is back
Raúl en Wolf is back
Raúl en Wolf is back
joz369 en Wolf is back
diciembre 2010
L M X J V S D
 12345
6789101112
13141516171819
20212223242526
2728293031  

Blog Stats

  • 31.198.626 hits