[gwibber/f15] sync with latest 3.0 bzr bits
Tom Callaway
spot at fedoraproject.org
Fri Mar 2 17:08:51 UTC 2012
commit d37ccc720d249a774fb49524af39f73a94aaf734
Author: Tom Callaway <spot at fedoraproject.org>
Date: Fri Mar 2 12:08:49 2012 -0500
sync with latest 3.0 bzr bits
.gitignore | 1 +
gwibber-986bzr-kitchen-unicode.patch | 771 ++++++++++++++++++++++++++++++++++
gwibber-986bzr-minimize-chars.patch | 111 +++++
gwibber-986bzr-undefined-mark.patch | 12 +
gwibber.spec | 29 +-
sources | 2 +-
6 files changed, 909 insertions(+), 17 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 3134d91..ac63293 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ gwibber-pre3-738bzr.tar.gz
/gwibber-867bzr.tar.gz
/gwibber-875bzr.tar.gz
/gwibber-894bzr.tar.gz
+/gwibber-986bzr.tar.gz
diff --git a/gwibber-986bzr-kitchen-unicode.patch b/gwibber-986bzr-kitchen-unicode.patch
new file mode 100644
index 0000000..b877a0c
--- /dev/null
+++ b/gwibber-986bzr-kitchen-unicode.patch
@@ -0,0 +1,771 @@
+diff -up gwibber-986bzr/gwibber/microblog/brightkite.py.kitchen gwibber-986bzr/gwibber/microblog/brightkite.py
+--- gwibber-986bzr/gwibber/microblog/brightkite.py.kitchen 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/microblog/brightkite.py 2012-03-02 12:01:58.958264848 -0500
+@@ -8,6 +8,7 @@ SegPhault (Ryan Paul) - 10/19/2008
+ from . import support
+ import urllib2, urllib, base64, re, simplejson
+ from xml.dom import minidom
++from kitchen.text.converters import to_unicode
+
+ PROTOCOL_INFO = {
+ "name": "BrightKite",
+@@ -34,62 +35,62 @@ class Message:
+ def __init__(self, client, data):
+ self.client = client
+ self.account = client.account
+- self.service = client.account["service"]
+- self.username = client.account["username"]
++ self.service = to_unicode(client.account["service"])
++ self.username = to_unicode(client.account["username"])
+
+- self.sender = data["creator"]["fullname"]
+- self.sender_nick = data["creator"]["login"]
+- self.sender_id = data["creator"]["login"]
+- self.image = data["creator"]["small_avatar_url"]
++ self.sender = to_unicode(data["creator"]["fullname"])
++ self.sender_nick = to_unicode(data["creator"]["login"])
++ self.sender_id = to_unicode(data["creator"]["login"])
++ self.image = to_unicode(data["creator"]["small_avatar_url"])
+
+ self.time = support.parse_time(data["created_at"])
+- self.text = data["body"] or ""
+- self.bgcolor = "message_color"
+- self.id = data["id"]
++ self.text = to_unicode(data["body"]) or u""
++ self.bgcolor = u"message_color"
++ self.id = to_unicode(data["id"])
+
+- self.url = "http://brightkite.com/objects/%s" % data["id"]
+- self.profile_url = "http://brightkite.com/people/%s" % self.sender_nick
++ self.url = to_unicode("http://brightkite.com/objects/%s" % data["id"])
++ self.profile_url = to_unicode("http://brightkite.com/people/%s" % self.sender_nick)
+
+- self.html_string = '<span class="text">%s</span>' % \
++ self.html_string = to_unicode('<span class="text">%s</span>' % \
+ NICK_PARSE.sub('@<a class="inlinenick" href="http://brightkite.com/people/\\1">\\1</a>',
+- support.linkify(self.text))
++ support.linkify(self.text)))
+
+ self.is_reply = ("@%s" % self.username) in self.text
+ self.can_thread = data["comments_count"] > 0
+
+ # Geolocation
+- self.location_lon = data["place"]["longitude"]
+- self.location_lat = data["place"]["latitude"]
+- self.location_id = data["place"]["id"]
+- self.location_name = data["place"]["name"]
+- self.location_fullname = data["place"]["display_location"]
++ self.location_lon = to_unicode(data["place"]["longitude"])
++ self.location_lat = to_unicode(data["place"]["latitude"])
++ self.location_id = to_unicode(data["place"]["id"])
++ self.location_name = to_unicode(data["place"]["name"])
++ self.location_fullname = to_unicode(data["place"]["display_location"])
+ self.geo_position = (self.location_lat, self.location_lon)
+
+ if "photo" in data:
+- self.thumbnails = [{"src": data["photo"], "href": data["photo"]}]
++ self.thumbnails = [{"src": to_unicode(data["photo"]), "href": to_unicode(data["photo"])}]
+
+ class Comment:
+ def __init__(self, client, data):
+ self.client = client
+ self.account = client.account
+- self.service = client.account["service"]
+- self.username = client.account["username"]
++ self.service = to_unicode(client.account["service"])
++ self.username = to_unicode(client.account["username"])
+
+- self.sender = data["user"]["fullname"]
+- self.sender_nick = data["user"]["login"]
+- self.sender_id = data["user"]["login"]
+- self.image = data["user"]["small_avatar_url"]
++ self.sender = to_unicode(data["user"]["fullname"])
++ self.sender_nick = to_unicode(data["user"]["login"])
++ self.sender_id = to_unicode(data["user"]["login"])
++ self.image = to_unicode(data["user"]["small_avatar_url"])
+
+ self.time = support.parse_time(data["created_at"])
+- self.text = data["comment"]
+- self.bgcolor = "message_color"
++ self.text = to_unicode(data["comment"])
++ self.bgcolor = u"message_color"
+
+- self.url = "http://brightkite.com/objects/%s" % data["place_object"]["id"]
+- self.profile_url = "http://brightkite.com/people/%s" % self.sender_nick
++ self.url = to_unicode("http://brightkite.com/objects/%s" % data["place_object"]["id"])
++ self.profile_url = to_unicode("http://brightkite.com/people/%s" % self.sender_nick)
+
+- self.html_string = '<span class="text">%s</span>' % \
++ self.html_string = to_unicode('<span class="text">%s</span>' % \
+ NICK_PARSE.sub('@<a class="inlinenick" href="http://brightkite.com/people/\\1">\\1</a>',
+- support.linkify(self.text))
++ support.linkify(self.text)))
+
+ self.is_reply = ("@%s" % self.username) in self.text
+
+@@ -97,26 +98,26 @@ class FriendPosition:
+ def __init__(self, client, data):
+ self.client = client
+ self.account = client.account
+- self.service = client.account["service"]
+- self.username = client.account["username"]
+- self.sender = data["fullname"]
+- self.sender_nick = data["login"]
++ self.service = to_unicode(client.account["service"])
++ self.username = to_unicode(client.account["username"])
++ self.sender = to_unicode(data["fullname"])
++ self.sender_nick = to_unicode(data["login"])
+ self.sender_id = self.sender_nick
+ self.time = support.parse_time(data["last_checked_in"])
+- self.text = data["place"]["display_location"]
+- self.image = data["small_avatar_url"]
+- self.image_small = data["smaller_avatar_url"]
+- self.bgcolor = "message_color"
+- self.url = "http://brightkite.com" # TODO
+- self.profile_url = "http://brightkite.com" # TODO
++ self.text = to_unicode(data["place"]["display_location"])
++ self.image = to_unicode(data["small_avatar_url"])
++ self.image_small = to_unicode(data["smaller_avatar_url"])
++ self.bgcolor = u"message_color"
++ self.url = u"http://brightkite.com" # TODO
++ self.profile_url = u"http://brightkite.com" # TODO
+ self.is_reply = False
+
+ # Geolocation
+- self.location_lon = data["place"]["longitude"]
+- self.location_lat = data["place"]["latitude"]
+- self.location_id = data["place"]["id"]
+- self.location_name = data["place"]["name"]
+- self.location_fullname = data["place"]["display_location"]
++ self.location_lon = to_unicode(data["place"]["longitude"])
++ self.location_lat = to_unicode(data["place"]["latitude"])
++ self.location_id = to_unicode(data["place"]["id"])
++ self.location_name = to_unicode(data["place"]["name"])
++ self.location_fullname = to_unicode(data["place"]["display_location"])
+
+ class Client:
+ def __init__(self, acct):
+diff -up gwibber-986bzr/gwibber/microblog/dispatcher.py.kitchen gwibber-986bzr/gwibber/microblog/dispatcher.py
+--- gwibber-986bzr/gwibber/microblog/dispatcher.py.kitchen 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/microblog/dispatcher.py 2012-03-02 12:02:47.116768518 -0500
+@@ -5,6 +5,7 @@ import multiprocessing, threading, trace
+ import gobject, dbus, dbus.service
+ import sqlite3, mx.DateTime, re, uuid
+ import urlshorter, storage, network, util, config
++from kitchen.text.converters import to_unicode
+ from gettext import lgettext as _
+ import signal
+
+@@ -71,9 +72,9 @@ def perform_operation((account, opname,
+ for m in message_data:
+ try:
+ if isinstance(m, dict) and m.has_key("mid"):
+- m["id"] = uuid.uuid1().hex
+- m["operation"] = opname
+- m["stream"] = stream
++ m["id"] = to_unicode(uuid.uuid1().hex)
++ m["operation"] = to_unicode(opname)
++ m["stream"] = to_unicode(stream)
+ m["transient"] = transient
+ m["rtl"] = util.isRTL(re.sub(text_cleaner, "", m["text"].decode('utf-8')))
+ if m.has_key("type"):
+diff -up gwibber-986bzr/gwibber/microblog/plugins/buzz/__init__.py.kitchen gwibber-986bzr/gwibber/microblog/plugins/buzz/__init__.py
+--- gwibber-986bzr/gwibber/microblog/plugins/buzz/__init__.py.kitchen 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/microblog/plugins/buzz/__init__.py 2012-03-02 12:01:58.961264817 -0500
+@@ -2,6 +2,7 @@ from gwibber.microblog import network, u
+ from gwibber.microblog.util import resources
+ import json
+ from oauth import oauth
++from kitchen.text.converters import to_unicode
+
+ PROTOCOL_INFO = {
+ "name": "Buzz",
+@@ -43,32 +44,32 @@ class Client:
+
+ def _actor(self, user):
+ return {
+- "name": user["name"],
+- "nick": user["id"],
+- "id": user["id"],
+- "image": user.get("thumbnailUrl", "https://mail.google.com/mail/images/blue_ghost.jpg?sz=45"),
+- "url": user.get("profileUrl", None),
++ "name": to_unicode(user["name"]),
++ "nick": to_unicode(user["id"]),
++ "id": to_unicode(user["id"]),
++ "image": to_unicode(user.get("thumbnailUrl", "https://mail.google.com/mail/images/blue_ghost.jpg?sz=45")),
++ "url": to_unicode(user.get("profileUrl", None)),
+ "is_me": user["id"] == self.account["user_id"],
+ }
+
+ def _message(self, data):
+ m = {
+ "mid": data["id"],
+- "service": "buzz",
+- "account": self.account["id"],
++ "service": u"buzz",
++ "account": to_unicode(self.account["id"]),
+ "time": util.parsetime(data["published"]),
+- "url": data.get("links", {})["alternate"][0].get("href", ""),
+- "source": data.get("source", {}).get("title", None),
++ "url": to_unicode(data.get("links", {})["alternate"][0].get("href", "")),
++ "source": to_unicode(data.get("source", {}).get("title", None)),
+ "sender": self._actor(data["actor"]),
+ }
+
+- m["text"] = data["object"]["content"]
++ m["text"] = to_unicode(data["object"]["content"])
+
+ if data.get("source", {}).get("title", 0) == "Twitter":
+ m["text"] = m["text"].split(">:", 1)[1].strip()
+
+- m["html"] = m["text"]
+- m["content"] = m["text"]
++ m["html"] = to_unicode(m["text"])
++ m["content"] = to_unicode(m["text"])
+
+ if data.get("geocode", 0):
+ m["location"] = {
+@@ -77,24 +78,24 @@ class Client:
+ }
+
+ if data.get("address", 0):
+- m["location"]["address"] = data["address"]
++ m["location"]["address"] = to_unicode(data["address"])
+
+ m["images"] = []
+ for a in data["object"].get("attachments", []):
+ if a["type"] == "photo":
+ m["images"].append({
+- "src": a["links"]["preview"][0]["href"],
+- "url": a["links"]["enclosure"][0]["href"]
++ "src": to_unicode(a["links"]["preview"][0]["href"]),
++ "url": to_unicode(a["links"]["enclosure"][0]["href"])
+ })
+
+ if a["type"] == "video":
+ m["images"].append({
+- "src": a["links"]["preview"][0]["href"],
+- "url": a["links"]["alternate"][0]["href"],
++ "src": to_unicode(a["links"]["preview"][0]["href"]),
++ "url": to_unicode(a["links"]["alternate"][0]["href"]),
+ })
+
+ if a["type"] == "article":
+- m["content"] += "<p><b><a href=\"%s\">%s</a></b></p>" % (a["links"]["alternate"][0]["href"], a["title"])
++ m["content"] += to_unicode("<p><b><a href=\"%s\">%s</a></b></p>" % (a["links"]["alternate"][0]["href"], a["title"]))
+
+ return m
+
+diff -up gwibber-986bzr/gwibber/microblog/plugins/digg/__init__.py.kitchen gwibber-986bzr/gwibber/microblog/plugins/digg/__init__.py
+--- gwibber-986bzr/gwibber/microblog/plugins/digg/__init__.py.kitchen 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/microblog/plugins/digg/__init__.py 2012-03-02 12:01:58.963264797 -0500
+@@ -1,6 +1,7 @@
+ from gwibber.microblog import network, util
+ from gwibber.microblog.util import resources
+ from gettext import lgettext as _
++from kitchen.text.converters import to_unicode
+
+ PROTOCOL_INFO = {
+ "name": "Digg",
+@@ -33,33 +34,33 @@ class Client:
+ def _story(self, data):
+ m = {};
+ m["mid"] = str(data["id"])
+- m["service"] = "digg"
+- m["account"] = self.account["id"]
++ m["service"] = u"digg"
++ m["account"] = to_unicode(self.account["id"])
+ m["time"] = data["submit_date"]
+
+- m["text"] = data["title"] + "\n" + data["description"]
+- m["content"] = "<b>%(title)s</b><br />%(description)s" % data
+- m["html"] = "<b>%(title)s</b><br />%(description)s" % data
++ m["text"] = to_unicode(data["title"]) + u"\n" + to_unicode(data["description"])
++ m["content"] = to_unicode("<b>%(title)s</b><br />%(description)s" % data)
++ m["html"] = to_unicode("<b>%(title)s</b><br />%(description)s" % data)
+ user = data["friends"]["users"][0]
+
+ m["sender"] = {}
+- m["sender"]["nick"] = user["name"]
+- m["sender"]["id"] = user["name"]
+- m["sender"]["image"] = user["icon"]
+- m["sender"]["url"] = "http://digg.com/users/%s" % user["name"]
++ m["sender"]["nick"] = to_unicode(user["name"])
++ m["sender"]["id"] = to_unicode(user["name"])
++ m["sender"]["image"] = to_unicode(user["icon"])
++ m["sender"]["url"] = to_unicode("http://digg.com/users/%s" % user["name"])
+ m["sender"]["is_me"] = user["name"] == self.account["username"]
+- if user.get("fullname", 0): m["sender"]["name"] = user["fullname"]
++ if user.get("fullname", 0): m["sender"]["name"] = to_unicode(user["fullname"])
+
+- m["url"] = data["link"]
++ m["url"] = to_unicode(data["link"])
+ m["likes"] = {"count": data["diggs"]}
+
+- m["html"] = util.linkify(m["text"],
++ m["html"] = to_unicode(util.linkify(m["text"],
+ ((util.PARSE_HASH, '#<a class="hash" href="%s#search?q=\\1">\\1</a>' % URL_PREFIX),
+- (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % URL_PREFIX)))
++ (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % URL_PREFIX))))
+
+- m["content"] = util.linkify(m["text"],
++ m["content"] = to_unicode(util.linkify(m["text"],
+ ((util.PARSE_HASH, '#<a class="hash" href="gwibber:/tag?acct=%s&query=\\1">\\1</a>' % m["account"]),
+- (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"])))
++ (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"]))))
+
+ return m
+
+diff -up gwibber-986bzr/gwibber/microblog/plugins/facebook/__init__.py.kitchen gwibber-986bzr/gwibber/microblog/plugins/facebook/__init__.py
+--- gwibber-986bzr/gwibber/microblog/plugins/facebook/__init__.py.kitchen 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/microblog/plugins/facebook/__init__.py 2012-03-02 12:01:58.964264786 -0500
+@@ -6,6 +6,7 @@ import hashlib, mx.DateTime, time
+ from os.path import join, getmtime, exists
+ from gettext import lgettext as _
+ from gwibber.microblog.util.const import *
++from kitchen.text.converters import to_unicode
+ # Try to import * from custom, install custom.py to include packaging
+ # customizations like distro API keys, etc
+ try:
+@@ -101,37 +102,37 @@ class Client:
+
+ def _sender(self, data):
+ sender = {
+- "name": data["name"],
++ "name": to_unicode(data["name"]),
+ "id": str(data.get("id", '')),
+ "is_me": str(data.get("id", '')) == self.user_id,
+- "image": URL_PREFIX + data["id"] + "/picture",
+- "url": "https://www.facebook.com/profile.php?id=" + str(data.get("id", ''))
++ "image": to_unicode(URL_PREFIX) + to_unicode(data["id"]) + u"/picture",
++ "url": u"https://www.facebook.com/profile.php?id=" + to_unicode(str(data.get("id", '')))
+ }
+ return sender
+
+ def _message(self, data):
+ m = {}
+- m["mid"] = str(data["id"])
+- m["service"] = "facebook"
++ m["mid"] = to_unicode(str(data["id"]))
++ m["service"] = u"facebook"
+ m["account"] = self.account["id"]
+
+ m["time"] = int(mx.DateTime.DateTimeFrom(str(data.get("updated_time", data["created_time"]))))
+- m["url"] = "https://facebook.com/" + data["id"].split("_")[0] + "/posts/" + data["id"].split("_")[1]
++ m["url"] = u"https://facebook.com/" + to_unicode(data["id"].split("_")[0]) + u"/posts/" + to_unicode(data["id"].split("_")[1])
+
+
+ if data.get("attribution", 0):
+- m["source"] = util.strip_urls(data["attribution"]).replace("via ", "")
++ m["source"] = to_unicode(util.strip_urls(data["attribution"]).replace("via ", ""))
+
+ if data.has_key("message"):
+ m["to_me"] = ("@%s" % self.account["username"]) in data["message"]
+ if data.get("message", "").strip():
+- m["text"] = data["message"]
+- m["html"] = util.linkify(data["message"])
+- m["content"] = m["html"]
++ m["text"] = to_unicode(data["message"])
++ m["html"] = to_unicode(util.linkify(data["message"]))
++ m["content"] = to_unicode(m["html"])
+ else:
+- m["text"] = ""
+- m["html"] = ""
+- m["content"] = ""
++ m["text"] = u""
++ m["html"] = u""
++ m["content"] = u""
+
+ m["sender"] = self._sender(data["from"])
+
+@@ -182,17 +183,17 @@ class Client:
+ if data["comments"].has_key("data"):
+ for item in data["comments"]["data"]:
+ m["comments"].append({
+- "text": item["message"],
++ "text": to_unicode(item["message"]),
+ "time": int(mx.DateTime.DateTimeFrom(str(data.get("updated_time", data["created_time"])))),
+ "sender": self._sender(item["from"]),
+ })
+
+ if data.get("attachment", 0):
+ if data["attachment"].get("name", 0):
+- m["content"] += "<p><b>%s</b></p>" % data["attachment"]["name"]
++ m["content"] += to_unicode("<p><b>%s</b></p>" % data["attachment"]["name"])
+
+ if data["attachment"].get("description", 0):
+- m["content"] += "<p>%s</p>" % data["attachment"]["description"]
++ m["content"] += to_unicode("<p>%s</p>" % data["attachment"]["description"])
+
+ return m
+
+diff -up gwibber-986bzr/gwibber/microblog/plugins/identica/__init__.py.kitchen gwibber-986bzr/gwibber/microblog/plugins/identica/__init__.py
+--- gwibber-986bzr/gwibber/microblog/plugins/identica/__init__.py.kitchen 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/microblog/plugins/identica/__init__.py 2012-03-02 12:01:58.966264766 -0500
+@@ -4,6 +4,7 @@ import gnomekeyring
+ from oauth import oauth
+ from gwibber.microblog.util import log, resources
+ from gettext import lgettext as _
++from kitchen.text.converters import to_unicode
+ log.logger.name = "Identi.ca"
+
+ PROTOCOL_INFO = {
+@@ -59,27 +60,27 @@ class Client:
+ m = {}
+ try:
+ m["mid"] = str(data["id"])
+- m["service"] = "identica"
++ m["service"] = u"identica"
+ m["account"] = self.account["id"]
+ m["time"] = util.parsetime(data["created_at"])
+- m["source"] = data.get("source", False)
+- m["text"] = data["text"]
++ m["source"] = to_unicode(data.get("source", False))
++ m["text"] = to_unicode(data["text"])
+ m["to_me"] = ("@%s" % self.account["username"]) in data["text"]
+
+- m["html"] = util.linkify(m["text"],
++ m["html"] = to_unicode(util.linkify(m["text"],
+ ((util.PARSE_HASH, '#<a class="hash" href="%s#search?q=\\1">\\1</a>' % self.url_prefix),
+- (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % self.url_prefix)))
++ (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % self.url_prefix))))
+
+- m["content"] = util.linkify(m["text"],
++ m["content"] = to_unicode(util.linkify(m["text"],
+ ((util.PARSE_HASH, '#<a class="hash" href="gwibber:/tag?acct=%s&query=\\1">\\1</a>' % m["account"]),
+- (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"])))
++ (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"]))))
+
+ images = []
+ if data.get("attachments", 0):
+ for a in data["attachments"]:
+ mime = a.get("mimetype", "")
+ if mime and mime.startswith("image") and a.get("url", 0):
+- images.append({"src": a["url"], "url": a["url"]})
++ images.append({"src": to_unicode(a["url"]), "url": to_unicode(a["url"])})
+
+ images.extend(util.imgpreview(m["text"]))
+
+@@ -98,33 +99,33 @@ class Client:
+ if data["in_reply_to_status_id"]:
+ m["reply"] = {}
+ m["reply"]["id"] = data["in_reply_to_status_id"]
+- m["reply"]["nick"] = data["in_reply_to_screen_name"]
+- m["reply"]["url"] = "/".join((self.url_prefix, "notice", str(m["reply"]["id"])))
++ m["reply"]["nick"] = to_unicode(data["in_reply_to_screen_name"])
++ m["reply"]["url"] = to_unicode("/".join((self.url_prefix, "notice", str(m["reply"]["id"]))))
+
+ user = data.get("user", data.get("sender", 0))
+
+ m["sender"] = {}
+- m["sender"]["name"] = user["name"]
+- m["sender"]["nick"] = user["screen_name"]
++ m["sender"]["name"] = to_unicode(user["name"])
++ m["sender"]["nick"] = to_unicode(user["screen_name"])
+ m["sender"]["id"] = user["id"]
+- m["sender"]["location"] = user["location"]
++ m["sender"]["location"] = to_unicode(user["location"])
+ m["sender"]["followers"] = user["followers_count"]
+- m["sender"]["image"] = user["profile_image_url"]
+- m["sender"]["url"] = "/".join((self.url_prefix, m["sender"]["nick"]))
++ m["sender"]["image"] = to_unicode(user["profile_image_url"])
++ m["sender"]["url"] = to_unicode("/".join((self.url_prefix, m["sender"]["nick"])))
+ m["sender"]["is_me"] = m["sender"]["nick"] == self.account["username"]
+- m["url"] = "/".join((self.url_prefix, "notice", m["mid"]))
++ m["url"] = to_unicode("/".join((self.url_prefix, "notice", m["mid"])))
+ return m
+
+ def _private(self, data):
+ m = self._message(data)
+ m["private"] = True
+ m["recipient"] = {}
+- m["recipient"]["name"] = data["recipient"]["name"]
+- m["recipient"]["nick"] = data["recipient"]["screen_name"]
++ m["recipient"]["name"] = to_unicode(data["recipient"]["name"])
++ m["recipient"]["nick"] = to_unicode(data["recipient"]["screen_name"])
+ m["recipient"]["id"] = data["recipient"]["id"]
+- m["recipient"]["image"] = data["recipient"]["profile_image_url"]
+- m["recipient"]["location"] = data["recipient"]["location"]
+- m["recipient"]["url"] = "/".join((self.url_prefix, m["recipient"]["nick"]))
++ m["recipient"]["image"] = to_unicode(data["recipient"]["profile_image_url"])
++ m["recipient"]["location"] = to_unicode(data["recipient"]["location"])
++ m["recipient"]["url"] = to_unicode("/".join((self.url_prefix, m["recipient"]["nick"])))
+ m["recipient"]["is_me"] = m["recipient"]["nick"].lower() == self.account["username"].lower()
+ m["to_me"] = m["recipient"]["is_me"]
+ return m
+@@ -135,14 +136,14 @@ class Client:
+ if data["to_user_id"]:
+ m["reply"] = {}
+ m["reply"]["id"] = data["to_user_id"]
+- m["reply"]["nick"] = data["to_user"]
++ m["reply"]["nick"] = to_unicode(data["to_user"])
+
+ m["sender"] = {}
+- m["sender"]["nick"] = data["from_user"]
++ m["sender"]["nick"] = to_unicode(data["from_user"])
+ m["sender"]["id"] = data["from_user_id"]
+- m["sender"]["image"] = data["profile_image_url"]
+- m["sender"]["url"] = "/".join((self.url_prefix, m["sender"]["nick"]))
+- m["url"] = "/".join((self.url_prefix, "notice", str(m["mid"])))
++ m["sender"]["image"] = to_unicode(data["profile_image_url"])
++ m["sender"]["url"] = to_unicode("/".join((self.url_prefix, m["sender"]["nick"])))
++ m["url"] = to_unicode("/".join((self.url_prefix, "notice", str(m["mid"]))))
+ return m
+
+ def _get(self, path, parse="message", post=False, single=False, **args):
+diff -up gwibber-986bzr/gwibber/microblog/plugins/statusnet/__init__.py.kitchen gwibber-986bzr/gwibber/microblog/plugins/statusnet/__init__.py
+--- gwibber-986bzr/gwibber/microblog/plugins/statusnet/__init__.py.kitchen 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/microblog/plugins/statusnet/__init__.py 2012-03-02 12:01:58.967264755 -0500
+@@ -4,6 +4,7 @@ import gnomekeyring
+ from oauth import oauth
+ from gwibber.microblog.util import log, resources
+ from gettext import lgettext as _
++from kitchen.text.converters import to_unicode
+ log.logger.name = "StatusNet"
+
+ PROTOCOL_INFO = {
+@@ -65,27 +66,27 @@ class Client:
+ m = {}
+ try:
+ m["mid"] = str(data["id"])
+- m["service"] = "statusnet"
++ m["service"] = u"statusnet"
+ m["account"] = self.account["id"]
+ m["time"] = util.parsetime(data["created_at"])
+- m["source"] = data.get("source", False)
+- m["text"] = data["text"]
++ m["source"] = to_unicode(data.get("source", False))
++ m["text"] = to_unicode(data["text"])
+ m["to_me"] = ("@%s" % self.account["username"]) in data["text"]
+
+- m["html"] = util.linkify(m["text"],
++ m["html"] = to_unicode(util.linkify(m["text"],
+ ((util.PARSE_HASH, '#<a class="hash" href="%s#search?q=\\1">\\1</a>' % self.account["url_prefix"]),
+- (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % self.account["url_prefix"])))
++ (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % self.account["url_prefix"]))))
+
+- m["content"] = util.linkify(m["text"],
++ m["content"] = to_unicode(util.linkify(m["text"],
+ ((util.PARSE_HASH, '#<a class="hash" href="gwibber:/tag?acct=%s&query=\\1">\\1</a>' % m["account"]),
+- (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"])))
++ (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"]))))
+
+ images = []
+ if data.get("attachments", 0):
+ for a in data["attachments"]:
+ mime = a.get("mimetype", "")
+ if mime and mime.startswith("image") and a.get("url", 0):
+- images.append({"src": a["url"], "url": a["url"]})
++ images.append({"src": to_unicode(a["url"]), "url": to_unicode(a["url"])})
+
+ images.extend(util.imgpreview(m["text"]))
+
+@@ -104,33 +105,33 @@ class Client:
+ if data["in_reply_to_status_id"]:
+ m["reply"] = {}
+ m["reply"]["id"] = data["in_reply_to_status_id"]
+- m["reply"]["nick"] = data["in_reply_to_screen_name"]
+- m["reply"]["url"] = "/".join((self.account["url_prefix"], "notice", str(m["reply"]["id"])))
++ m["reply"]["nick"] = to_unicode(data["in_reply_to_screen_name"])
++ m["reply"]["url"] = to_unicode("/".join((self.account["url_prefix"], "notice", str(m["reply"]["id"]))))
+
+ user = data.get("user", data.get("sender", 0))
+
+ m["sender"] = {}
+- m["sender"]["name"] = user["name"]
+- m["sender"]["nick"] = user["screen_name"]
++ m["sender"]["name"] = to_unicode(user["name"])
++ m["sender"]["nick"] = to_unicode(user["screen_name"])
+ m["sender"]["id"] = user["id"]
+- m["sender"]["location"] = user["location"]
++ m["sender"]["location"] = to_unicode(user["location"])
+ m["sender"]["followers"] = user["followers_count"]
+- m["sender"]["image"] = user["profile_image_url"]
+- m["sender"]["url"] = "/".join((self.account["url_prefix"], m["sender"]["nick"]))
++ m["sender"]["image"] = to_unicode(user["profile_image_url"])
++ m["sender"]["url"] = to_unicode("/".join((self.account["url_prefix"], m["sender"]["nick"])))
+ m["sender"]["is_me"] = m["sender"]["nick"] == self.account["username"]
+- m["url"] = "/".join((self.account["url_prefix"], "notice", m["mid"]))
++ m["url"] = to_unicode("/".join((self.account["url_prefix"], "notice", m["mid"])))
+ return m
+
+ def _private(self, data):
+ m = self._message(data)
+ m["private"] = True
+ m["recipient"] = {}
+- m["recipient"]["name"] = data["recipient"]["name"]
+- m["recipient"]["nick"] = data["recipient"]["screen_name"]
++ m["recipient"]["name"] = to_unicode(data["recipient"]["name"])
++ m["recipient"]["nick"] = to_unicode(data["recipient"]["screen_name"])
+ m["recipient"]["id"] = data["recipient"]["id"]
+- m["recipient"]["image"] = data["recipient"]["profile_image_url"]
+- m["recipient"]["location"] = data["recipient"]["location"]
+- m["recipient"]["url"] = "/".join((self.account["url_prefix"], m["recipient"]["nick"]))
++ m["recipient"]["image"] = to_unicode(data["recipient"]["profile_image_url"])
++ m["recipient"]["location"] = to_unicode(data["recipient"]["location"])
++ m["recipient"]["url"] = to_unicode("/".join((self.account["url_prefix"], m["recipient"]["nick"])))
+ m["recipient"]["is_me"] = m["recipient"]["nick"].lower() == self.account["username"].lower()
+ m["to_me"] = m["recipient"]["is_me"]
+ return m
+@@ -144,11 +145,11 @@ class Client:
+ m["reply"]["nick"] = data["to_user"]
+
+ m["sender"] = {}
+- m["sender"]["nick"] = data["from_user"]
++ m["sender"]["nick"] = to_unicode(data["from_user"])
+ m["sender"]["id"] = data["from_user_id"]
+- m["sender"]["image"] = data["profile_image_url"]
+- m["sender"]["url"] = "/".join((self.account["url_prefix"], m["sender"]["nick"]))
+- m["url"] = "/".join((self.account["url_prefix"], "notice", str(m["mid"])))
++ m["sender"]["image"] = to_unicode(data["profile_image_url"])
++ m["sender"]["url"] = to_unicode("/".join((self.account["url_prefix"], m["sender"]["nick"])))
++ m["url"] = to_unicode("/".join((self.account["url_prefix"], "notice", str(m["mid"]))))
+ return m
+
+ def _get(self, path, parse="message", post=False, single=False, **args):
+diff -up gwibber-986bzr/gwibber/microblog/plugins/twitter/__init__.py.kitchen gwibber-986bzr/gwibber/microblog/plugins/twitter/__init__.py
+--- gwibber-986bzr/gwibber/microblog/plugins/twitter/__init__.py.kitchen 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/microblog/plugins/twitter/__init__.py 2012-03-02 12:01:58.969264734 -0500
+@@ -5,6 +5,7 @@ import gnomekeyring
+ from oauth import oauth
+ from gwibber.microblog.util import log, resources
+ from gettext import lgettext as _
++from kitchen.text.converters import to_unicode
+ log.logger.name = "Twitter"
+
+ PROTOCOL_INFO = {
+@@ -76,19 +77,19 @@ class Client:
+ m = {};
+ try:
+ m["mid"] = str(data["id"])
+- m["service"] = "twitter"
++ m["service"] = u"twitter"
+ m["account"] = self.account["id"]
+ m["time"] = util.parsetime(data["created_at"])
+- m["text"] = unescape(data["text"])
++ m["text"] = to_unicode(unescape(data["text"]))
+ m["to_me"] = ("@%s" % self.account["username"]) in data["text"]
+
+- m["html"] = util.linkify(data["text"],
++ m["html"] = to_unicode(util.linkify(data["text"],
+ ((util.PARSE_HASH, '#<a class="hash" href="%s#search?q=\\1">\\1</a>' % URL_PREFIX),
+- (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % URL_PREFIX)), escape=False)
++ (util.PARSE_NICK, '@<a class="nick" href="%s/\\1">\\1</a>' % URL_PREFIX)), escape=False))
+
+- m["content"] = util.linkify(data["text"],
++ m["content"] = to_unicode(util.linkify(data["text"],
+ ((util.PARSE_HASH, '#<a class="hash" href="gwibber:/tag?acct=%s&query=\\1">\\1</a>' % m["account"]),
+- (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"])), escape=False)
++ (util.PARSE_NICK, '@<a class="nick" href="gwibber:/user?acct=%s&name=\\1">\\1</a>' % m["account"])), escape=False))
+
+ if data.has_key("retweeted_status"):
+ m["retweeted_status"] = data["retweeted_status"]
+@@ -107,13 +108,13 @@ class Client:
+
+ def _user(self, user):
+ return {
+- "name": user["name"],
+- "nick": user["screen_name"],
++ "name": to_unicode(user["name"]),
++ "nick": to_unicode(user["screen_name"]),
+ "id": user["id"],
+- "location": user["location"],
++ "location": to_unicode(user["location"]),
+ "followers": user.get("followers", None),
+- "image": user["profile_image_url"],
+- "url": "/".join((URL_PREFIX, user["screen_name"])),
++ "image": to_unicode(user["profile_image_url"]),
++ "url": to_unicode("/".join((URL_PREFIX, user["screen_name"]))),
+ "is_me": user["screen_name"] == self.account["username"],
+ }
+
+@@ -128,14 +129,14 @@ class Client:
+ if data["in_reply_to_status_id"]:
+ m["reply"] = {}
+ m["reply"]["id"] = data["in_reply_to_status_id"]
+- m["reply"]["nick"] = data["in_reply_to_screen_name"]
++ m["reply"]["nick"] = to_unicode(data["in_reply_to_screen_name"])
+ if m["reply"]["id"] and m["reply"]["nick"]:
+- m["reply"]["url"] = "/".join((URL_PREFIX, m["reply"]["nick"], "statuses", str(m["reply"]["id"])))
++ m["reply"]["url"] = to_unicode("/".join((URL_PREFIX, m["reply"]["nick"], "statuses", str(m["reply"]["id"]))))
+ else:
+ m["reply"]["url"] = None
+
+ m["sender"] = self._user(data["user"] if "user" in data else data["sender"])
+- m["url"] = "/".join((m["sender"]["url"], "statuses", str(m["mid"])))
++ m["url"] = to_unicode("/".join((m["sender"]["url"], "statuses", str(m["mid"]))))
+
+ return m
+
+@@ -144,12 +145,12 @@ class Client:
+ m["private"] = True
+
+ m["recipient"] = {}
+- m["recipient"]["name"] = data["recipient"]["name"]
+- m["recipient"]["nick"] = data["recipient"]["screen_name"]
++ m["recipient"]["name"] = to_unicode(data["recipient"]["name"])
++ m["recipient"]["nick"] = to_unicode(data["recipient"]["screen_name"])
+ m["recipient"]["id"] = data["recipient"]["id"]
+- m["recipient"]["image"] = data["recipient"]["profile_image_url"]
+- m["recipient"]["location"] = data["recipient"]["location"]
+- m["recipient"]["url"] = "/".join((URL_PREFIX, m["recipient"]["nick"]))
++ m["recipient"]["image"] = to_unicode(data["recipient"]["profile_image_url"])
++ m["recipient"]["location"] = to_unicode(data["recipient"]["location"])
++ m["recipient"]["url"] = to_unicode("/".join((URL_PREFIX, m["recipient"]["nick"])))
+ m["recipient"]["is_me"] = m["recipient"]["nick"] == self.account["username"]
+ m["to_me"] = m["recipient"]["is_me"]
+
+@@ -161,37 +162,37 @@ class Client:
+ if data["to_user_id"]:
+ m["reply"] = {}
+ m["reply"]["id"] = data["to_user_id"]
+- m["reply"]["nick"] = data["to_user"]
++ m["reply"]["nick"] = to_unicode(data["to_user"])
+
+ m["sender"] = {}
+- m["sender"]["nick"] = data["from_user"]
++ m["sender"]["nick"] = to_unicode(data["from_user"])
+ m["sender"]["id"] = data["from_user_id"]
+- m["sender"]["image"] = data["profile_image_url"]
+- m["sender"]["url"] = "/".join((URL_PREFIX, m["sender"]["nick"]))
++ m["sender"]["image"] = to_unicode(data["profile_image_url"])
++ m["sender"]["url"] = to_unicode("/".join((URL_PREFIX, m["sender"]["nick"])))
+ m["sender"]["is_me"] = m["sender"]["nick"] == self.account["username"]
+- m["url"] = "/".join((m["sender"]["url"], "statuses", str(m["mid"])))
++ m["url"] = to_unicode("/".join((m["sender"]["url"], "statuses", str(m["mid"]))))
+ return m
+
+ def _list(self, data):
+ return {
+ "mid": data["id"],
+- "service": "twitter",
++ "service": u"twitter",
+ "account": self.account["id"],
+ "time": 0,
+- "text": data["description"],
+- "html": data["description"],
+- "content": data["description"],
+- "url": "/".join((URL_PREFIX, data["uri"])),
+- "sender": self._user(data["user"]),
+- "name": data["name"],
+- "nick": data["slug"],
++ "text": to_unicode(data["description"]),
++ "html": to_unicode(data["description"]),
++ "content": to_unicode(data["description"]),
++ "url": to_unicode("/".join((URL_PREFIX, data["uri"]))),
++ "sender": to_unicode(self._user(data["user"])),
++ "name": to_unicode(data["name"]),
++ "nick": to_unicode(data["slug"]),
+ "key": data["slug"],
+- "full": data["full_name"],
+- "uri": data["uri"],
++ "full": to_unicode(data["full_name"]),
++ "uri": to_unicode(data["uri"]),
+ "mode": data["mode"],
+ "members": data["member_count"],
+ "followers": data["subscriber_count"],
+- "kind": "list",
++ "kind": u"list",
+ }
+
+ def _get(self, path, parse="message", post=False, single=False, **args):
diff --git a/gwibber-986bzr-minimize-chars.patch b/gwibber-986bzr-minimize-chars.patch
new file mode 100644
index 0000000..0c67261
--- /dev/null
+++ b/gwibber-986bzr-minimize-chars.patch
@@ -0,0 +1,111 @@
+diff -up gwibber-986bzr/gwibber/gwui.py.minimize gwibber-986bzr/gwibber/gwui.py
+--- gwibber-986bzr/gwibber/gwui.py.minimize 2012-03-02 11:59:14.555144138 -0500
++++ gwibber-986bzr/gwibber/gwui.py 2012-03-02 11:59:14.576143925 -0500
+@@ -1,4 +1,5 @@
+-
++# -*- coding: utf-8 -*-
++#
+ import os, json, urlparse, util
+ import subprocess
+ import gtk, gobject, pango, webkit, time, gconf
+@@ -1055,6 +1056,14 @@ class InputTextView(gtk.TextView):
+ except:
+ pass
+
++ # Replace these characters with shorter ones
++ # First field: search for string if this character was entered
++ # Second field: string to search for
++ # Third field: replace with this string
++ self.replacements = [(".", "...", "…"), ("-", "--", "—")]
++ # Keep replacements from triggering themselves
++ self.__replace_lock = False
++
+ def get_text(self):
+ buf = self.get_buffer()
+ return buf.get_text(*buf.get_bounds()).strip()
+@@ -1063,8 +1072,11 @@ class InputTextView(gtk.TextView):
+ return len(unicode(self.get_text(), "utf-8"))
+
+ def on_add_text(self, buf, iter, text, tlen):
++ if not text:
++ return
++
+ if self.model.settings["shorten_urls"]:
+- if text and text.startswith("http") and not " " in text \
++ if text.startswith("http") and not " " in text \
+ and len(text) > 30:
+
+ buf = self.get_buffer()
+@@ -1092,6 +1104,26 @@ class InputTextView(gtk.TextView):
+ self.shortener.Shorten(text,
+ reply_handler=add_shortened,
+ error_handler=error_shortened)
++ if self.model.settings["minimize_chars"] and not self.__replace_lock:
++ for entry in self.replacements:
++ if entry[0] in text:
++ buf = self.get_buffer()
++ buf.stop_emission("insert-text")
++ try:
++ self.__replace_lock = True
++ buf.insert(iter, text)
++ finally:
++ self.__replace_lock = False
++
++ # Search the whole buffer in case someone pastes something with the
++ # replacement string as a subset
++ search_iter = buf.get_start_iter()
++ match = search_iter.forward_search(entry[1], 0)
++ while match:
++ buf.delete(match[0], match[1])
++ buf.insert(match[0], entry[2])
++ search_iter = buf.get_start_iter()
++ match = search_iter.forward_search(entry[1], 0)
+
+ def set_overlay_text(self, text):
+ if not hasattr(self, 'pango_overlay'):
+diff -up gwibber-986bzr/gwibber/microblog/util/const.py.minimize gwibber-986bzr/gwibber/microblog/util/const.py
+--- gwibber-986bzr/gwibber/microblog/util/const.py.minimize 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/microblog/util/const.py 2012-03-02 12:00:08.737596220 -0500
+@@ -38,6 +38,7 @@ DEFAULT_SETTINGS = {
+ "presence_check": True,
+ "show_fullname": True,
+ "shorten_urls": True,
++ "minimize_chars": False,
+ "urlshorter": "is.gd",
+ "reply_append_colon": True,
+ "retweet_style": "recycle",
+diff -up gwibber-986bzr/gwibber/preferences.py.minimize gwibber-986bzr/gwibber/preferences.py
+--- gwibber-986bzr/gwibber/preferences.py.minimize 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/gwibber/preferences.py 2012-03-02 11:59:14.579143895 -0500
+@@ -69,6 +69,7 @@ class GwibberPreferences(object):
+ "no_notifications",
+ "show_fullname",
+ "shorten_urls",
++ "minimize_chars",
+ "reply_append_colon",
+ "global_retweet",
+ "interval",
+diff -up gwibber-986bzr/ui/gwibber-preferences-dialog.ui.minimize gwibber-986bzr/ui/gwibber-preferences-dialog.ui
+--- gwibber-986bzr/ui/gwibber-preferences-dialog.ui.minimize 2012-03-02 11:56:26.000000000 -0500
++++ gwibber-986bzr/ui/gwibber-preferences-dialog.ui 2012-03-02 11:59:14.580143885 -0500
+@@ -396,6 +396,20 @@
+ <property name="n_rows">3</property>
+ <property name="homogeneous">True</property>
+ <child>
++ <object class="GtkCheckButton" id="minimize_chars">
++ <property name="label" translatable="yes">Automatically replace common strings with unicode equivalents to minimize characters (e.g. ... replaced with …)</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="receives_default">False</property>
++ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
++ <property name="draw_indicator">True</property>
++ </object>
++ <packing>
++ <property name="top_attach">3</property>
++ <property name="bottom_attach">4</property>
++ </packing>
++ </child>
++ <child>
+ <object class="GtkCheckButton" id="reply_append_colon">
+ <property name="label" translatable="yes">Append colon to username when replying</property>
+ <property name="visible">True</property>
diff --git a/gwibber-986bzr-undefined-mark.patch b/gwibber-986bzr-undefined-mark.patch
new file mode 100644
index 0000000..01cd585
--- /dev/null
+++ b/gwibber-986bzr-undefined-mark.patch
@@ -0,0 +1,12 @@
+diff -up gwibber-986bzr/gwibber/gwui.py.missing-mark gwibber-986bzr/gwibber/gwui.py
+--- gwibber-986bzr/gwibber/gwui.py.missing-mark 2012-03-02 12:00:45.000000000 -0500
++++ gwibber-986bzr/gwibber/gwui.py 2012-03-02 12:01:26.065603846 -0500
+@@ -1090,7 +1090,7 @@ class InputTextView(gtk.TextView):
+ buf.insert(iter_start, shortened_url)
+ def error_shortened(dbus_exc):
+ "Internal shortening-url-died function: a closure"
+- iter = buf.get_iter_at_mark(mark)
++ iter = buf.get_iter_at_mark(mark_start)
+ buf.insert(iter, text) # shortening failed
+
+ # set a mark at iter, so that the callback knows where to insert
diff --git a/gwibber.spec b/gwibber.spec
index 64550b0..4951558 100644
--- a/gwibber.spec
+++ b/gwibber.spec
@@ -1,10 +1,10 @@
%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
-%global bzr_rev 894
+%global bzr_rev 986
Name: gwibber
Version: 3.1.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Epoch: 1
Summary: An open source microblogging client for GNOME developed with Python and GTK
Group: Applications/Internet
@@ -13,9 +13,9 @@ URL: https://launchpad.net/gwibber
# NOTE: Leaving this in case we need to go back to bzr checkouts.
# The source for this package can be pulled from upstream's vcs. Use the
# following command to generate the tarball:
-# bzr export -r %{bzr_rev} gwibber-%{bzr_rev}bzr.tar.gz lp:gwibber
-# Source0: %{name}-%{bzr_rev}bzr.tar.gz
-Source0: http://launchpad.net/gwibber/3.2/3.1.0/+download/%{name}-%{version}.tar.gz
+# bzr export -r %{bzr_rev} gwibber-%{bzr_rev}bzr.tar.gz lp:gwibber/3.0
+Source0: %{name}-%{bzr_rev}bzr.tar.gz
+# Source0: http://launchpad.net/gwibber/3.2/3.1.0/+download/%{name}-%{version}.tar.gz
# Fix situation where pango_overlay can be undefined
# https://bugs.launchpad.net/gwibber/+bug/577050
@@ -34,14 +34,14 @@ Patch3: gwibber-2.91.92-handle-x00-in-content.patch
Patch6: gwibber-832bzr-twitter-oauth.patch
# Minimize characters with unicode equivs
-Patch10: gwibber-3.1.0-minimize-chars.patch
+Patch10: gwibber-986bzr-minimize-chars.patch
# Fix iter call to non-existent "mark", use "mark_start"
# bz635345 bz623754
-Patch11: gwibber-3.1.0-undefined-mark.patch
+Patch11: gwibber-986bzr-undefined-mark.patch
# Use kitchen to force all strings generated by microblog inputs to unicode
-Patch13: gwibber-3.1.0-kitchen-unicode.patch
+Patch13: gwibber-986bzr-kitchen-unicode.patch
# Right click on a stream in the navigation bar to close it.
Patch14: gwibber-875bzr-right-click-to-close-stream.patch
@@ -76,9 +76,6 @@ Patch48: gwibber-3.0.0.1-sqlite-catch_error.patch
# Overwrite default oauth key
Patch49: gwibber-3.1.0-fix-twitter-oauth.patch
-# Set facebook scope
-Patch50: gwibber-3.1.0-addscope.patch
-
Requires: libsoup, python-pycurl
Requires: python
Requires: dbus-python >= 0.80.2
@@ -107,7 +104,7 @@ and GTK. It supports Twitter, Jaiku, Identi.ca, Facebook, and Digg.
%prep
-%setup -q
+%setup -q -n gwibber-%{bzr_rev}bzr
%patch1 -p1 -b .undefined
%patch2 -p1 -b .no-libproxy
@@ -150,9 +147,6 @@ and GTK. It supports Twitter, Jaiku, Identi.ca, Facebook, and Digg.
# Overwrite default oauth key for twitter
%patch49 -p1
-# Add facebook scope
-%patch50 -p1
-
# sed -i -e '/^#! \?\//, 1d' $(find %{name} | grep "\.py$")
%build
@@ -196,7 +190,7 @@ cp -a build/mo %{buildroot}%{_datadir}/locale
%{_datadir}/applications/fedora-%{name}.desktop
%{_datadir}/dbus-1/services/com.Gwibber.Accounts.service
%{_datadir}/dbus-1/services/com.Gwibber.Connection.service
-%{_datadir}/dbus-1/services/com.Gwibber.Messages.service
+# %%{_datadir}/dbus-1/services/com.Gwibber.Messages.service
%{_datadir}/dbus-1/services/com.Gwibber.Searches.service
%{_datadir}/dbus-1/services/com.Gwibber.Service.service
%{_datadir}/dbus-1/services/com.Gwibber.Streams.service
@@ -205,6 +199,9 @@ cp -a build/mo %{buildroot}%{_datadir}/locale
%{_datadir}/indicators/messages/applications/gwibber
%changelog
+* Fri Mar 2 2012 Tom Callaway <spot at fedoraproject.org> - 1.3.1.0-4
+- sync with latest in 3.0 branch in bzr
+
* Thu Jul 7 2011 Tom Callaway <spot at fedoraproject.org> - 1:3.1.0-2
- really use our oauth key
diff --git a/sources b/sources
index 5afb9d0..51b4930 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-e022ad230bd7ef0c735069ba6407df0d gwibber-3.1.0.tar.gz
+1efcd135e2493251cae8b6a3645dab65 gwibber-986bzr.tar.gz
More information about the scm-commits
mailing list