Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Erb <steve-e@h3c.de>2009-11-30 01:06:49 +0300
committerStephan Erb <steve-e@h3c.de>2009-11-30 01:06:49 +0300
commit9b7ae8cac320584bbe5bc5ff63a8b64a101bf614 (patch)
treee97ed24285d5a148e3bc86a7e58702d320fbbcdb
parentb2efc9685bfa0c497538241a9e453cce55e1179c (diff)
Small cleanups for avatar save. Also fixes #5461.
* set default file type for avatars centrally * remove client side decision logic determing if a avatar loookup shall happen for a groupchat contact or for a normal contact * remove unused method (this one was triggering the traceback in #5461)
-rw-r--r--src/chat_control.py40
-rw-r--r--src/common/contacts.py8
-rw-r--r--src/groupchat_control.py6
-rw-r--r--src/gtkgui_helpers.py45
-rw-r--r--src/profile_window.py6
-rw-r--r--src/roster_window.py5
-rw-r--r--src/vcard.py6
7 files changed, 44 insertions, 72 deletions
diff --git a/src/chat_control.py b/src/chat_control.py
index 5aef1a7e8..7b52d8b34 100644
--- a/src/chat_control.py
+++ b/src/chat_control.py
@@ -1351,7 +1351,7 @@ class ChatControl(ChatControlBase):
# per jid
self.show_bigger_avatar_timeout_id = None
self.bigger_avatar_window = None
- self.show_avatar(self.contact.resource)
+ self.show_avatar()
# chatstate timers and state
self.reset_kbd_mouse_timeout_vars()
@@ -1601,11 +1601,7 @@ class ChatControl(ChatControlBase):
bigger avatar after 0.5 sec
"""
jid = self.contact.jid
- is_fake = False
- if self.type_id == message_control.TYPE_PM:
- is_fake = True
- avatar_pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(jid,
- is_fake)
+ avatar_pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(jid)
if avatar_pixbuf in ('ask', None):
return
avatar_w = avatar_pixbuf.get_width()
@@ -1638,8 +1634,7 @@ class ChatControl(ChatControlBase):
menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
id_ = menuitem.connect('activate',
gtkgui_helpers.on_avatar_save_as_menuitem_activate,
- self.contact.jid, self.account, self.contact.get_shown_name() + \
- '.jpeg')
+ self.contact.jid, self.account, self.contact.get_shown_name())
self.handlers[id_] = menuitem
menu.append(menuitem)
menu.show_all()
@@ -2403,24 +2398,12 @@ class ChatControl(ChatControlBase):
# Re-show the small avatar
self.show_avatar()
- def show_avatar(self, resource = None):
+ def show_avatar(self):
if not gajim.config.get('show_avatar_in_chat'):
return
-
- is_fake = False
- if self.TYPE_ID == message_control.TYPE_PM:
- is_fake = True
- jid_with_resource = self.contact.jid # fake jid
- else:
- jid_with_resource = self.contact.jid
- if resource:
- jid_with_resource += '/' + resource
-
- # we assume contact has no avatar
- scaled_pixbuf = None
-
- pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(jid_with_resource,
- is_fake)
+
+ jid_with_resource = self.contact.get_full_jid()
+ pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(jid_with_resource)
if pixbuf == 'ask':
# we don't have the vcard
if self.TYPE_ID == message_control.TYPE_PM:
@@ -2436,8 +2419,10 @@ class ChatControl(ChatControlBase):
else:
gajim.connections[self.account].request_vcard(jid_with_resource)
return
- if pixbuf is not None:
+ elif pixbuf:
scaled_pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'chat')
+ else:
+ scaled_pixbuf = None
image = self.xml.get_widget('avatar_image')
image.set_from_pixbuf(scaled_pixbuf)
@@ -2629,11 +2614,8 @@ class ChatControl(ChatControlBase):
if not small_avatar.window:
# Tab has been closed since we hovered the avatar
return
- is_fake = False
- if self.type_id == message_control.TYPE_PM:
- is_fake = True
avatar_pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(
- self.contact.jid, is_fake)
+ self.contact.jid)
if avatar_pixbuf in ('ask', None):
return
# Hide the small avatar
diff --git a/src/common/contacts.py b/src/common/contacts.py
index 748d0f3ff..25ffb8237 100644
--- a/src/common/contacts.py
+++ b/src/common/contacts.py
@@ -373,14 +373,6 @@ class Contacts:
nbr_total += 1
return nbr_online, nbr_total
- def is_pm_from_jid(self, account, jid):
- """
- Return True if the given jid is a private message jid
- """
- if jid in self._contacts[account]:
- return False
- return True
-
def __getattr__(self, attr_name):
# Only called if self has no attr_name
if hasattr(self._metacontact_manager, attr_name):
diff --git a/src/groupchat_control.py b/src/groupchat_control.py
index 8319b2a4c..f8609ffcd 100644
--- a/src/groupchat_control.py
+++ b/src/groupchat_control.py
@@ -1171,8 +1171,8 @@ class GroupchatControl(ChatControlBase):
iter_ = self.get_contact_iter(nick)
if not iter_:
return
- pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(self.room_jid + \
- '/' + nick, True)
+ fake_jid = self.room_jid + '/' + nick
+ pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(fake_jid)
if pixbuf in ('ask', None):
scaled_pixbuf = None
else:
@@ -1514,7 +1514,7 @@ class GroupchatControl(ChatControlBase):
if gajim.config.get('ask_avatars_on_startup') and \
not server.startswith('irc'):
fake_jid = self.room_jid + '/' + nick
- pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(fake_jid, True)
+ pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(fake_jid)
if pixbuf == 'ask':
if j:
fjid = j
diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py
index eb77e7db6..1c90e0159 100644
--- a/src/gtkgui_helpers.py
+++ b/src/gtkgui_helpers.py
@@ -30,6 +30,7 @@
import xml.sax.saxutils
import gtk
import gtk.glade
+import glib
import gobject
import pango
import os
@@ -593,7 +594,7 @@ def get_scaled_pixbuf(pixbuf, kind):
scaled_buf = pixbuf.scale_simple(w, h, gtk.gdk.INTERP_HYPER)
return scaled_buf
-def get_avatar_pixbuf_from_cache(fjid, is_fake_jid = False, use_local = True):
+def get_avatar_pixbuf_from_cache(fjid, use_local=True):
"""
Check if jid has cached avatar and if that avatar is valid image (can be
shown)
@@ -607,9 +608,15 @@ def get_avatar_pixbuf_from_cache(fjid, is_fake_jid = False, use_local = True):
gajim.jid_is_transport(jid):
# don't show avatar for the transport itself
return None
+
+ room, nick = gajim.get_room_and_nick_from_fjid(jid)
+ if any(room in gajim.contacts.get_gc_list(acc) for acc in gajim.connections):
+ is_groupchat_contact = True
+ else:
+ is_groupchat_contact = False
puny_jid = helpers.sanitize_filename(jid)
- if is_fake_jid:
+ if is_groupchat_contact:
puny_nick = helpers.sanitize_filename(nick)
path = os.path.join(gajim.VCARD_PATH, puny_jid, puny_nick)
local_avatar_basepath = os.path.join(gajim.AVATAR_PATH, puny_jid,
@@ -631,7 +638,7 @@ def get_avatar_pixbuf_from_cache(fjid, is_fake_jid = False, use_local = True):
return 'ask'
vcard_dict = gajim.connections.values()[0].get_cached_vcard(fjid,
- is_fake_jid)
+ is_groupchat_contact)
if not vcard_dict: # This can happen if cached vcard is too old
return 'ask'
if 'PHOTO' not in vcard_dict:
@@ -831,39 +838,33 @@ def get_possible_button_event(event):
def destroy_widget(widget):
widget.destroy()
-def on_avatar_save_as_menuitem_activate(widget, jid, account,
-default_name = ''):
+def on_avatar_save_as_menuitem_activate(widget, jid, account, default_name=''):
def on_continue(response, file_path):
if response < 0:
return
- # Get pixbuf
- pixbuf = None
- is_fake = False
- if account and gajim.contacts.is_pm_from_jid(account, jid):
- is_fake = True
- pixbuf = get_avatar_pixbuf_from_cache(jid, is_fake, False)
- ext = file_path.split('.')[-1]
- type_ = ''
- if not ext:
+ pixbuf = get_avatar_pixbuf_from_cache(jid)
+ path, extension = os.path.splitext(file_path)
+ if not extension:
# Silently save as Jpeg image
+ image_format = 'jpeg'
file_path += '.jpeg'
- type_ = 'jpeg'
- elif ext == 'jpg':
- type_ = 'jpeg'
+ elif extension == 'jpg':
+ image_format = 'jpeg'
else:
- type_ = ext
+ image_format = extension[1:] # remove leading dot
# Save image
try:
- pixbuf.save(file_path, type_)
- except Exception:
+ pixbuf.save(file_path, image_format)
+ except glib.GError:
if os.path.exists(file_path):
os.remove(file_path)
new_file_path = '.'.join(file_path.split('.')[:-1]) + '.jpeg'
def on_ok(file_path, pixbuf):
pixbuf.save(file_path, 'jpeg')
dialogs.ConfirmationDialog(_('Extension not supported'),
- _('Image cannot be saved in %(type)s format. Save as %(new_filename)s?') % {'type': type_, 'new_filename': new_file_path},
+ _('Image cannot be saved in %(type)s format. Save as %(new_filename)s?'
+ ) % {'type': image_format, 'new_filename': new_file_path},
on_response_ok = (on_ok, new_file_path, pixbuf))
else:
dialog.destroy()
@@ -905,7 +906,7 @@ default_name = ''):
current_folder=gajim.config.get('last_save_dir'), on_response_ok=on_ok,
on_response_cancel=on_cancel)
- dialog.set_current_name(default_name)
+ dialog.set_current_name(default_name + '.jpeg')
dialog.connect('delete-event', lambda widget, event:
on_cancel(widget))
diff --git a/src/profile_window.py b/src/profile_window.py
index a19623397..c0705adc8 100644
--- a/src/profile_window.py
+++ b/src/profile_window.py
@@ -183,14 +183,14 @@ class ProfileWindow:
# Try to get pixbuf
pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(self.jid,
- use_local = False)
+ use_local=False)
- if pixbuf:
+ if pixbuf not in (None, 'ask'):
nick = gajim.config.get_per('accounts', self.account, 'name')
menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
menuitem.connect('activate',
gtkgui_helpers.on_avatar_save_as_menuitem_activate,
- self.jid, None, nick + '.jpeg')
+ self.jid, self.account, nick)
menu.append(menuitem)
# show clear
menuitem = gtk.ImageMenuItem(gtk.STOCK_CLEAR)
diff --git a/src/roster_window.py b/src/roster_window.py
index 810dd91a2..50249d642 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -1295,10 +1295,9 @@ class RosterWindow:
iters = self._get_contact_iter(jid, account, model=self.model)
if not iters or not gajim.config.get('show_avatars_in_roster'):
return
- jid = self.model[iters[0]][C_JID]
- jid = jid.decode('utf-8')
+ jid = self.model[iters[0]][C_JID].decode('utf-8')
pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(jid)
- if pixbuf is None or pixbuf == 'ask':
+ if pixbuf in (None, 'ask'):
scaled_pixbuf = None
else:
scaled_pixbuf = gtkgui_helpers.get_scaled_pixbuf(pixbuf, 'roster')
diff --git a/src/vcard.py b/src/vcard.py
index 88fd6acc8..9cf1b5e5e 100644
--- a/src/vcard.py
+++ b/src/vcard.py
@@ -164,8 +164,7 @@ class VcardWindow:
menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
menuitem.connect('activate',
gtkgui_helpers.on_avatar_save_as_menuitem_activate,
- self.contact.jid, self.account, self.contact.get_shown_name() +
- '.jpeg')
+ self.contact.jid, self.account, self.contact.get_shown_name())
menu.append(menuitem)
menu.connect('selection-done', lambda w:w.destroy())
# show the menu
@@ -480,8 +479,7 @@ class ZeroconfVcardWindow:
menuitem = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS)
menuitem.connect('activate',
gtkgui_helpers.on_avatar_save_as_menuitem_activate,
- self.contact.jid, self.account, self.contact.get_shown_name() +
- '.jpeg')
+ self.contact.jid, self.account, self.contact.get_shown_name())
menu.append(menuitem)
menu.connect('selection-done', lambda w:w.destroy())
# show the menu