Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/model
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2007-04-10 19:55:55 (GMT)
committer Dan Williams <dcbw@redhat.com>2007-04-10 19:55:55 (GMT)
commit6710618a43633d3671044336242538a96dde86d0 (patch)
tree6b5928251d4ae0a65381246b3d361adeef66f211 /shell/model
parentbf4b1a3f8f47984f2c1895e67bd198c89b94173f (diff)
Use public keys rather than nicknames to differentiate buddies
Diffstat (limited to 'shell/model')
-rw-r--r--shell/model/BuddyModel.py29
-rw-r--r--shell/model/Friends.py18
-rw-r--r--shell/model/MeshModel.py23
-rw-r--r--shell/model/Owner.py2
4 files changed, 39 insertions, 33 deletions
diff --git a/shell/model/BuddyModel.py b/shell/model/BuddyModel.py
index fee1a17..a06a728 100644
--- a/shell/model/BuddyModel.py
+++ b/shell/model/BuddyModel.py
@@ -32,9 +32,9 @@ class BuddyModel(gobject.GObject):
([gobject.TYPE_PYOBJECT]))
}
- def __init__(self, name=None, buddy=None):
- if name and buddy:
- raise RuntimeError("Must specify only _one_ of name or buddy.")
+ def __init__(self, key=None, buddy=None):
+ if (key and buddy) or (not key and not buddy):
+ raise RuntimeError("Must specify only _one_ of key or buddy.")
gobject.GObject.__init__(self)
@@ -48,12 +48,11 @@ class BuddyModel(gobject.GObject):
self._buddy = None
- # If given just a name, try to get the buddy from the PS first
+ # If given just a key, try to get the buddy from the PS first
if not buddy:
- self._name = name
- # FIXME: use public key, not name
+ self._key = key
for iter_buddy in self._pservice.get_buddies():
- if iter_buddy.props.nick == name:
+ if iter_buddy.props.key == key:
buddy = iter_buddy
break
@@ -65,15 +64,19 @@ class BuddyModel(gobject.GObject):
# wait for the buddy to appear
self._ba_handler = self._pservice.connect('buddy-appeared',
self._buddy_appeared_cb)
- self._name = name
+ self._key = key
# Set color to 'inactive'/'disconnected'
self._set_color_from_string(_NOT_PRESENT_COLOR)
+ self._name = "Unknown buddy"
def _set_color_from_string(self, color_string):
self._color = XoColor(color_string)
- def get_name(self):
- return self._name
+ def get_key(self):
+ return self._key
+
+ def get_nick(self):
+ return self._nick
def get_color(self):
return self._color
@@ -96,15 +99,15 @@ class BuddyModel(gobject.GObject):
raise ValueError("Buddy cannot be None.")
self._buddy = buddy
- self._name = self._buddy.props.nick
+ self._key = self._buddy.props.key
+ self._nick = self._buddy.props.nick
self._set_color_from_string(self._buddy.props.color)
self._pc_handler = self._buddy.connect('property-changed', self._buddy_property_changed_cb)
self._bic_handler = self._buddy.connect('icon-changed', self._buddy_icon_changed_cb)
def _buddy_appeared_cb(self, pservice, buddy):
- # FIXME: use public key rather than buddy name
- if self._buddy or buddy.get_name() != self._name:
+ if self._buddy or buddy.props.key != self._key:
return
if self._ba_handler:
diff --git a/shell/model/Friends.py b/shell/model/Friends.py
index 36c443f..e3d7130 100644
--- a/shell/model/Friends.py
+++ b/shell/model/Friends.py
@@ -40,10 +40,10 @@ class Friends(gobject.GObject):
self.load()
def has_buddy(self, buddy):
- return self._friends.has_key(buddy.get_name())
+ return self._friends.has_key(buddy.get_key())
def add_friend(self, buddy_info):
- self._friends[buddy_info.get_name()] = buddy_info
+ self._friends[buddy_info.get_key()] = buddy_info
self.emit('friend-added', buddy_info)
def make_friend(self, buddy):
@@ -52,9 +52,9 @@ class Friends(gobject.GObject):
self.save()
def remove(self, buddy_info):
- del self._friends[buddy_info.get_name()]
+ del self._friends[buddy_info.get_key()]
self.save()
- self.emit('friend-removed', buddy_info.get_name())
+ self.emit('friend-removed', buddy_info.get_key())
def __iter__(self):
return self._friends.values().__iter__()
@@ -65,8 +65,11 @@ class Friends(gobject.GObject):
try:
success = cp.read([self._path])
if success:
- for name in cp.sections():
- buddy = BuddyModel(name)
+ for key in cp.sections():
+ # HACK: don't screw up on old friends files
+ if len(key) < 20:
+ continue
+ buddy = BuddyModel(key=key)
self.add_friend(buddy)
except Exception, exc:
logging.error("Error parsing friends file: %s" % exc)
@@ -75,8 +78,9 @@ class Friends(gobject.GObject):
cp = ConfigParser()
for friend in self:
- section = friend.get_name()
+ section = friend.get_key()
cp.add_section(section)
+ cp.set(section, 'nick', friend.get_nick())
cp.set(section, 'color', friend.get_color().to_string())
fileobject = open(self._path, 'w')
diff --git a/shell/model/MeshModel.py b/shell/model/MeshModel.py
index d51dcbf..b14d6f7 100644
--- a/shell/model/MeshModel.py
+++ b/shell/model/MeshModel.py
@@ -159,9 +159,9 @@ class MeshModel(gobject.GObject):
return self._buddies.values()
def _buddy_activity_changed_cb(self, buddy, cur_activity):
- if not self._buddies.has_key(buddy.props.nick):
+ if not self._buddies.has_key(buddy.props.key):
return
- buddy_model = self._buddies[buddy.props.nick]
+ buddy_model = self._buddies[buddy.props.key]
if cur_activity == None:
self.emit('buddy-moved', buddy_model, None)
else:
@@ -173,14 +173,13 @@ class MeshModel(gobject.GObject):
self.emit('buddy-moved', buddy_model, activity_model)
def _buddy_appeared_cb(self, pservice, buddy):
- model = BuddyModel(buddy=buddy)
- if self._buddies.has_key(model.get_name()):
- del model
+ if self._buddies.has_key(buddy.props.key):
return
+ model = BuddyModel(buddy=buddy)
model.connect('current-activity-changed',
self._buddy_activity_changed_cb)
- self._buddies[model.get_name()] = model
+ self._buddies[buddy.props.key] = model
self.emit('buddy-added', model)
cur_activity = buddy.props.current_activity
@@ -188,10 +187,10 @@ class MeshModel(gobject.GObject):
self._notify_buddy_change(model, cur_activity)
def _buddy_disappeared_cb(self, pservice, buddy):
- if not self._buddies.has_key(buddy.props.nick):
+ if not self._buddies.has_key(buddy.props.key):
return
- self.emit('buddy-removed', self._buddies[buddy.props.nick])
- del self._buddies[buddy.props.nick]
+ self.emit('buddy-removed', self._buddies[buddy.props.key])
+ del self._buddies[buddy.props.key]
def _activity_appeared_cb(self, pservice, activity):
self._check_activity(activity)
@@ -222,9 +221,9 @@ class MeshModel(gobject.GObject):
for buddy in self._pservice.get_buddies():
cur_activity = buddy.props.current_activity
- name = buddy.props.nick
- if cur_activity == activity and self._buddies.has_key(name):
- buddy_model = self._buddies[name]
+ key = buddy.props.key
+ if cur_activity == activity and self._buddies.has_key(key):
+ buddy_model = self._buddies[key]
self.emit('buddy-moved', buddy_model, model)
def _activity_disappeared_cb(self, pservice, activity):
diff --git a/shell/model/Owner.py b/shell/model/Owner.py
index ddee4a9..32879db 100644
--- a/shell/model/Owner.py
+++ b/shell/model/Owner.py
@@ -72,7 +72,7 @@ class ShellOwner(gobject.GObject):
def get_invites(self):
return self._invites
- def get_name(self):
+ def get_nick(self):
return self._nick
def _handle_invite(self, issuer, bundle_id, activity_id):