Merge lp:~ubuntu-branches/ubuntu/precise/gwibber/precise-proposed-201212050210 into lp:ubuntu/precise-proposed/gwibber

Proposed by Ubuntu Package Importer
Status: Needs review
Proposed branch: lp:~ubuntu-branches/ubuntu/precise/gwibber/precise-proposed-201212050210
Merge into: lp:ubuntu/precise-proposed/gwibber
Diff against target: 1402 lines (+27/-1243) (has conflicts)
14 files modified
.pc/.quilt_patches (+0/-1)
.pc/.quilt_series (+0/-1)
.pc/.version (+0/-1)
.pc/lp_1012231.patch/gwibber/microblog/plugins/foursquare/__init__.py (+0/-214)
.pc/lp_934530.patch/gwibber/microblog/network.py (+0/-57)
.pc/lpi.patch/client/Makefile.am (+0/-122)
.pc/lpi.patch/client/gwibber-client.vala (+0/-461)
.pc/lpi.patch/configure.ac (+0/-368)
client/Makefile.am (+0/-1)
client/gwibber-client.vala (+0/-5)
configure.ac (+0/-1)
debian/patches/lp_1058672.patch (+22/-0)
gwibber/microblog/network.py (+2/-8)
gwibber/microblog/plugins/foursquare/__init__.py (+3/-3)
Conflict: can't delete .pc because it is not empty.  Not deleting.
Conflict because .pc is not versioned, but has versioned children.  Versioned directory.
Contents conflict in .pc/applied-patches
Conflict adding file debian/patches/lp_1058672.patch.  Moved existing file to debian/patches/lp_1058672.patch.moved.
To merge this branch: bzr merge lp:~ubuntu-branches/ubuntu/precise/gwibber/precise-proposed-201212050210
Reviewer Review Type Date Requested Status
Ubuntu Development Team Pending
Review via email: mp+138047@code.launchpad.net

Description of the change

The package importer has detected a possible inconsistency between the package history in the archive and the history in bzr. As the archive is authoritative the importer has made lp:ubuntu/precise-proposed/gwibber reflect what is in the archive and the old bzr branch has been pushed to lp:~ubuntu-branches/ubuntu/precise/gwibber/precise-proposed-201212050210. This merge proposal was created so that an Ubuntu developer can review the situations and perform a merge/upload if necessary. There are three typical cases where this can happen.
  1. Where someone pushes a change to bzr and someone else uploads the package without that change. This is the reason that this check is done by the importer. If this appears to be the case then a merge/upload should be done if the changes that were in bzr are still desirable.
  2. The importer incorrectly detected the above situation when someone made a change in bzr and then uploaded it.
  3. The importer incorrectly detected the above situation when someone just uploaded a package and didn't touch bzr.

If this case doesn't appear to be the first situation then set the status of the merge proposal to "Rejected" and help avoid the problem in future by filing a bug at https://bugs.launchpad.net/udd linking to this merge proposal.

(this is an automatically generated message)

To post a comment you must log in.

Unmerged revisions

135. By Ken VanDine

releasing version 3.4.2-0ubuntu2.1

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== removed file '.pc/.quilt_patches'
--- .pc/.quilt_patches 2012-06-27 15:42:00 +0000
+++ .pc/.quilt_patches 1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
1debian/patches
20
=== removed file '.pc/.quilt_series'
--- .pc/.quilt_series 2012-06-27 15:42:00 +0000
+++ .pc/.quilt_series 1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
1series
20
=== removed file '.pc/.version'
--- .pc/.version 2011-06-07 13:38:48 +0000
+++ .pc/.version 1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
12
20
=== renamed file '.pc/applied-patches' => '.pc/applied-patches.THIS'
=== removed directory '.pc/lp_1012231.patch'
=== removed directory '.pc/lp_1012231.patch/gwibber'
=== removed directory '.pc/lp_1012231.patch/gwibber/microblog'
=== removed directory '.pc/lp_1012231.patch/gwibber/microblog/plugins'
=== removed directory '.pc/lp_1012231.patch/gwibber/microblog/plugins/foursquare'
=== removed file '.pc/lp_1012231.patch/gwibber/microblog/plugins/foursquare/__init__.py'
--- .pc/lp_1012231.patch/gwibber/microblog/plugins/foursquare/__init__.py 2012-06-27 15:42:00 +0000
+++ .pc/lp_1012231.patch/gwibber/microblog/plugins/foursquare/__init__.py 1970-01-01 00:00:00 +0000
@@ -1,214 +0,0 @@
1from gwibber.microblog import network, util
2from gwibber.microblog.util import resources
3import json, re
4from gettext import lgettext as _
5
6import logging
7logger = logging.getLogger("FourSquare")
8logger.debug("Initializing.")
9
10PROTOCOL_INFO = {
11 "name": "Foursquare",
12 "version": "4.0",
13
14 "config": [
15 "private:secret_token",
16 "access_token",
17 "receive_enabled",
18 "username",
19 "color",
20 ],
21
22 "authtype": "oauth2",
23 "color": "#990099",
24
25 "features": [
26 "receive",
27 ],
28
29 "default_streams": [
30 "receive",
31 ],
32}
33
34URL_PREFIX = "https://api.foursquare.com/v2"
35
36class Client:
37 def __init__(self, acct):
38 self.service = util.getbus("Service")
39 if acct.has_key("secret_token") and acct.has_key("password"): acct.pop("password")
40 self.account = acct
41
42 if not acct.has_key("access_token") and not acct.has_key("secret_token"):
43 return [{"error": {"type": "auth", "account": self.account, "message": _("Failed to find credentials")}}]
44
45 self.token = acct["access_token"]
46
47 def _message(self, data):
48
49 m = {};
50 m["mid"] = str(data["id"])
51 m["service"] = "foursquare"
52 m["account"] = self.account["id"]
53 m["time"] = data["createdAt"]
54
55 shouttext = ""
56 text = ""
57
58 if data.has_key("shout"):
59 shout = data["shout"]
60 shout = shout.replace('& ', '& ')
61
62 if data.has_key("venue"):
63 venuename = data["venue"]["name"]
64 venuename = venuename.replace('& ', '& ')
65
66 if data.has_key("shout"):
67 shouttext += shout + "\n\n"
68 text += shout + "\n"
69 if data["venue"].has_key("id"):
70 m["url"] = "https://foursquare.com/venue/%s" % data["venue"]["id"]
71 else:
72 m["url"] = "https://foursquare.com"
73 shouttext += "Checked in at <a href='" + m["url"] + "'>" + venuename + "</a>"
74 text += "Checked in at " + venuename
75 if data["venue"]["location"].has_key("address"):
76 shouttext += ", " + data["venue"]["location"]["address"]
77 text += ", " + data["venue"]["location"]["address"]
78 if data["venue"]["location"].has_key("crossstreet"):
79 shouttext += " and " + data["venue"]["location"]["crossstreet"]
80 text += " and " + data["venue"]["location"]["crossstreet"]
81 if data["venue"]["location"].has_key("city"):
82 shouttext += ", " + data["venue"]["location"]["city"]
83 text += ", " + data["venue"]["location"]["city"]
84 if data["venue"]["location"].has_key("state"):
85 shouttext += ", " + data["venue"]["location"]["state"]
86 text += ", " + data["venue"]["location"]["state"]
87 if data.has_key("event"):
88 if data["event"].has_key("name"):
89 shouttext += " for " + data["event"]["name"]
90 else:
91 if data.has_key("shout"):
92 shouttext += shout + "\n\n"
93 text += shout + "\n"
94 else:
95 text= "Checked in off the grid"
96 shouttext= "Checked in off the grid"
97
98 m["text"] = text
99 m["content"] = shouttext
100 m["html"] = shouttext
101
102 m["sender"] = {}
103 m["sender"]["id"] = data["user"]["id"]
104 m["sender"]["image"] = data["user"]["photo"]
105 m["sender"]["url"] = data["user"]["canonicalUrl"]
106 if data["user"]["relationship"] == "self":
107 m["sender"]["is_me"] = True
108 else:
109 m["sender"]["is_me"] = False
110 fullname = ""
111 if data["user"].has_key("firstName"):
112 fullname += data["user"]["firstName"] + " "
113 if data["user"].has_key("lastName"):
114 fullname += data["user"]["lastName"]
115
116 if data.has_key("photos"):
117 if data["photos"]["count"] > 0:
118 m["photo"] = {}
119 m["photo"]["url"] = ""
120 m["photo"]["picture"] = data["photos"]["items"][0]["url"]
121 m["photo"]["name"] = ""
122 m["type"] = "photo"
123
124 m["sender"]["name"] = fullname
125 m["sender"]["nick"] = fullname
126
127 if data.has_key("source"):
128 m["source"] = "<a href='" + data["source"]["url"] + "'>" + data["source"]["name"] + "</a>"
129 else:
130 m["source"] = "<a href='https://foursquare.com/'>Foursquare</a>"
131
132 if data.has_key("comments"):
133 if data["comments"]["count"] > 0:
134
135 m["comments"] = []
136 comments = self._get_comments(data["id"])
137 for comment in comments:
138 # Get the commenter's name
139 fullname = ""
140 if comment["user"].has_key("firstName"):
141 fullname += comment["user"]["firstName"] + " "
142 if comment["user"].has_key("lastName"):
143 fullname += comment["user"]["lastName"]
144
145 # Create a sender
146 sender = {
147 "name" : fullname,
148 "id" : comment["user"]["id"],
149 "is_me": False,
150 "image": comment["user"]["photo"],
151 "url" : comment["user"]["canonicalUrl"]
152 }
153 # Create a comment
154 m["comments"].append({
155 "text" : comment["text"],
156 "time" : comment["createdAt"],
157 "sender": sender,
158 })
159
160 return m
161
162 def _check_error(self, data):
163 if isinstance(data, dict) and "recent" in data:
164 return True
165 else:
166 logger.error("Foursquare error %s", data)
167 return False
168
169 def _get_comments(self, checkin_id):
170 url = "/".join((URL_PREFIX, "checkins", checkin_id))
171 url = url + "?oauth_token=" + self.token
172 data = network.Download(url, None, False).get_json()["response"]
173 return data["checkin"]["comments"]["items"]
174
175 def _get(self, path, parse="message", post=False, single=False, **args):
176 url = "/".join((URL_PREFIX, path))
177
178 url = url + "?oauth_token=" + self.token
179
180 data = network.Download(url, None, post).get_json()["response"]
181
182 resources.dump(self.account["service"], self.account["id"], data)
183
184 if isinstance(data, dict) and data.get("errors", 0):
185 if "authenticate" in data["errors"][0]["message"]:
186 logstr = """%s: %s - %s""" % (PROTOCOL_INFO["name"], _("Authentication failed"), error["message"])
187 logger.error("%s", logstr)
188 return [{"error": {"type": "auth", "account": self.account, "message": data["errors"][0]["message"]}}]
189 else:
190 for error in data["errors"]:
191 logstr = """%s: %s - %s""" % (PROTOCOL_INFO["name"], _("Unknown failure"), error["message"])
192 return [{"error": {"type": "unknown", "account": self.account, "message": error["message"]}}]
193 elif isinstance(data, dict) and data.get("error", 0):
194 if "Incorrect signature" in data["error"]:
195 logstr = """%s: %s - %s""" % (PROTOCOL_INFO["name"], _("Request failed"), data["error"])
196 logger.error("%s", logstr)
197 return [{"error": {"type": "auth", "account": self.account, "message": data["error"]}}]
198 elif isinstance(data, str):
199 logstr = """%s: %s - %s""" % (PROTOCOL_INFO["name"], _("Request failed"), data)
200 logger.error("%s", logstr)
201 return [{"error": {"type": "request", "account": self.account, "message": data}}]
202 if not self._check_error(data):
203 return []
204
205 checkins = data["recent"]
206 if single: return [getattr(self, "_%s" % parse)(checkins)]
207 if parse: return [getattr(self, "_%s" % parse)(m) for m in checkins]
208 else: return []
209
210 def __call__(self, opname, **args):
211 return getattr(self, opname)(**args)
212
213 def receive(self):
214 return self._get("checkins/recent")
2150
=== removed directory '.pc/lp_934530.patch'
=== removed directory '.pc/lp_934530.patch/gwibber'
=== removed directory '.pc/lp_934530.patch/gwibber/microblog'
=== removed file '.pc/lp_934530.patch/gwibber/microblog/network.py'
--- .pc/lp_934530.patch/gwibber/microblog/network.py 2012-06-27 15:42:00 +0000
+++ .pc/lp_934530.patch/gwibber/microblog/network.py 1970-01-01 00:00:00 +0000
@@ -1,57 +0,0 @@
1#!/usr/bin/env python
2
3import urllib, json
4import urllib2, base64
5import logging
6logger = logging.getLogger("Network")
7
8class UrlLib2Downloader:
9 def __init__(self, url, params=None, post=False, username=None,
10 password=None, header=None, body=None, proxy=None):
11
12 data = None
13
14 if params:
15 if post:
16 data = urllib.urlencode(params)
17 else:
18 url = "?".join((url, urllib.urlencode(params)))
19
20 url = url.encode('utf-8')
21 self.url = url
22
23 if header:
24 req = urllib2.Request(url, data, headers=header)
25 else:
26 req = urllib2.Request(url, data)
27
28 if username and password:
29 base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
30 req.add_header("Authorization", "Basic %s" % base64string)
31 if proxy and len(proxy) > 1: # If didn't get a list, we're screwed
32 req.set_proxy(proxy[1], proxy[0])
33
34 try:
35 self.res = urllib2.urlopen(req)
36 except urllib2.HTTPError, e:
37 logger.error("HTTP Error for %s - error code: %s", e.geturl().split("?")[0], e.getcode())
38 self.res = "HTTP error: {0}".format(e.getcode())
39 except urllib2.URLError, e:
40 logger.error("Network failure: %s", e.reason)
41 self.res = "Network error: {0}".format(e.reason)
42
43 def get_json(self):
44 try:
45 return json.loads(self.get_string())
46 except ValueError as e:
47 logger.debug("Failed to parse the response for %s, error was: %s", self.url.split("?")[0], str(e))
48 return []
49
50 def get_string(self):
51 try:
52 return self.res.read()
53 except AttributeError:
54 return self.res
55
56
57Download = UrlLib2Downloader
580
=== removed directory '.pc/lpi.patch'
=== removed directory '.pc/lpi.patch/client'
=== removed file '.pc/lpi.patch/client/Makefile.am'
--- .pc/lpi.patch/client/Makefile.am 2012-02-16 16:13:17 +0000
+++ .pc/lpi.patch/client/Makefile.am 1970-01-01 00:00:00 +0000
@@ -1,122 +0,0 @@
1GETTEXT_PACKAGE = gwibber
2
3bin_PROGRAMS = \
4 gwibber \
5 gwibber-poster \
6 gwibber-preferences
7
8gwibber_SOURCES = \
9 gwibber-client.vala \
10 attachments-item.vala \
11 searches-item.vala \
12 users-item.vala \
13 home-item.vala \
14 private-item.vala \
15 replies-item.vala \
16 public-item.vala \
17 messages-item.vala \
18 stream-entry.vala \
19 status-bar.vala \
20 tab-bar.vala \
21 tab-bar-item.vala \
22 tab-bar-widgets.vala
23
24gwibber_CFLAGS = \
25 $(BASE_CFLAGS) \
26 -DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\" \
27 -I$(top_srcdir)/libgwibber \
28 -I$(top_srcdir)/libgwibber-gtk
29
30gwibber_VALAFLAGS = \
31 -X -I$(top_srcdir)/libgwibber \
32 -X -L../libgwibber/.libs \
33 -X -I$(top_srcdir)/libgwibber-gtk \
34 -X -L../libgwibber-gtk/.libs \
35 ../libgwibber/gwibber-@GWIBBER_API_VERSION@.vapi \
36 ../libgwibber-gtk/gwibber-gtk-@GWIBBER_API_VERSION@.vapi \
37 --vapidir $(top_srcdir)/vapi \
38 --pkg config \
39 --pkg json-glib-1.0 \
40 --pkg gee-1.0 \
41 --pkg gtk+-3.0 \
42 --pkg gdk-3.0 \
43 --pkg atk \
44 --pkg glib-2.0 \
45 --pkg dee-1.0 \
46 --basedir ./ \
47 $(MAINTAINER_VALAFLAGS) \
48 $(NULL)
49
50gwibber_LDADD = \
51 $(BASE_LIBS) \
52 -L../libgwibber/.libs -lgwibber \
53 -L../libgwibber-gtk/.libs -lgwibber-gtk \
54 -lpangocairo-1.0 -ldee-1.0
55
56gwibber_preferences_SOURCES = \
57 gwibber-preferences.vala
58
59gwibber_preferences_CFLAGS = \
60 $(BASE_CFLAGS) \
61 -DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\" \
62 -I$(top_srcdir)/libgwibber \
63 -I$(top_srcdir)/libgwibber-gtk
64
65gwibber_preferences_VALAFLAGS = \
66 --vapidir $(top_srcdir)/vapi \
67 --pkg config \
68 --pkg gtk+-3.0 \
69 --pkg gdk-3.0 \
70 --pkg atk \
71 --pkg glib-2.0 \
72 --pkg gmodule-2.0 \
73 --pkg Dbusmenu-0.4 \
74 $(MAINTAINER_VALAFLAGS) \
75 $(NULL)
76
77gwibber_preferences_LDADD = \
78 $(BASE_LIBS)
79
80gwibber_poster_SOURCES = \
81 stream-entry.vala \
82 gwibber-poster.vala
83
84gwibber_poster_CFLAGS = \
85 $(BASE_CFLAGS) \
86 -I$(top_srcdir)/libgwibber \
87 -I$(top_srcdir)/libgwibber-gtk
88
89gwibber_poster_VALAFLAGS = \
90 -X -I$(top_srcdir)/libgwibber \
91 -X -L../libgwibber/.libs \
92 -X -I$(top_srcdir)/libgwibber-gtk \
93 -X -L../libgwibber-gtk/.libs \
94 ../libgwibber/gwibber-@GWIBBER_API_VERSION@.vapi \
95 ../libgwibber-gtk/gwibber-gtk-@GWIBBER_API_VERSION@.vapi \
96 --vapidir $(top_srcdir)/vapi \
97 --pkg config \
98 --pkg json-glib-1.0 \
99 --pkg gtk+-3.0 \
100 --pkg gdk-3.0 \
101 --pkg atk \
102 --pkg glib-2.0 \
103 --pkg gee-1.0 \
104 --pkg dee-1.0 \
105 --pkg pango \
106 --basedir ./ \
107 $(MAINTAINER_VALAFLAGS) \
108 $(NULL)
109
110gwibber_poster_LDADD = \
111 $(BASE_LIBS) \
112 -L../libgwibber/.libs -lgwibber \
113 -L../libgwibber-gtk/.libs -lgwibber-gtk
114
115VALASOURCES = \
116 $(gwibber_SOURCES) \
117 $(gwibber_poster_SOURCES) \
118 $(gwibber_preferences_SOURCES)
119
120CLEANFILES = \
121 *.stamp \
122 $(VALASOURCES:.vala=.c)
1230
=== removed file '.pc/lpi.patch/client/gwibber-client.vala'
--- .pc/lpi.patch/client/gwibber-client.vala 2012-02-23 14:18:14 +0000
+++ .pc/lpi.patch/client/gwibber-client.vala 1970-01-01 00:00:00 +0000
@@ -1,461 +0,0 @@
1/*
2 * Copyright (C) 2010 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by Ken VanDine <ken.vandine@canonical.com>
17 */
18
19public class Client : Gtk.Window
20{
21 private Gwibber.Streams streams_service;
22 private Gwibber.Service _service;
23 private GLib.Settings state_settings;
24 public Gee.HashMap <string, Dee.Model?> streams_map;
25 public Gee.HashMap <string, TabBarItem?> items_map;
26 public TabBar tabbar;
27 public GwibberGtk.StreamView view;
28 public Gtk.UIManager manager;
29 private StatusBar _status_bar;
30 private int _sort_order = 1;
31
32 public int sort_order {
33 get { return _sort_order; }
34 set {
35 if (value != _sort_order)
36 {
37 _sort_order = value;
38 foreach (var v in items_map.values)
39 {
40 var _view = v.get_view () as GwibberGtk.StreamView;
41 if (_view.sort_order != _sort_order)
42 _view.sort_order = _sort_order;
43 }
44 }
45 }
46 }
47
48
49 public Client ()
50 {
51 Object ();
52 }
53
54 construct
55 {
56 state_settings = new GLib.Settings ("org.gwibber.state");
57 streams_map = new Gee.HashMap<string?, Dee.Model?> ();
58 items_map = new Gee.HashMap<string?, TabBarItem?> ();
59
60 var icon_theme = Gtk.IconTheme.get_default ();
61 icon_theme.prepend_search_path (Config.PKGDATADIR + "/ui/icons");
62
63 // Prepend local icon path if running from a source checkout
64 var local_icon_path = GLib.Path.build_path (Path.DIR_SEPARATOR_S, Environment.get_current_dir (), "data/icons");
65 if (GLib.FileUtils.test (local_icon_path, GLib.FileTest.IS_DIR))
66 {
67 icon_theme.prepend_search_path (local_icon_path);
68 }
69
70 configure_event.connect (on_configure_event);
71 delete_event.connect (() => {
72 this.hide ();
73 Idle.add (() => { this.destroy (); return false; });
74 return true;
75 });
76
77 set_name(Config.PACKAGE);
78 set_icon_name("gwibber");
79 set_title("Gwibber");
80 set_wmclass("gwibber", "Gwibber");
81
82 set_default_size(400,800);
83
84 // Move to last known location and resize
85 move(state_settings.get_int("position-x"), state_settings.get_int("position-y"));
86 resize(state_settings.get_int("width"), state_settings.get_int("height"));
87
88 // Tab Bar
89 tabbar = new TabBar ();
90
91 var main_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
92
93 _status_bar = new StatusBar ();
94 /* We don't need this yet
95 _status_bar.add_button (Gtk.Stock.OK, Gtk.ResponseType.OK);
96 _status_bar.response.connect((r) => {
97 _status_bar.showing = false;
98 });
99 */
100 main_box.pack_end (_status_bar, false, false, 0);
101 _status_bar.notify["showing"].connect (()=>
102 {
103 debug ("StatusBar showing changed");
104 });
105
106 _service = new Gwibber.Service ();
107 _service.loading_started.connect((source) => {
108 debug ("Loading started");
109 if (!_status_bar.showing)
110 {
111 _status_bar.reset ();
112 _status_bar.set_message_type (Gtk.MessageType.OTHER);
113 _status_bar.message = _("Refreshing");
114 _status_bar.showing = true;
115 }
116 });
117 _service.loading_complete.connect((source) => {
118 debug ("Loading completed");
119 if (_status_bar.showing)
120 _status_bar.showing = false;
121 });
122
123 main_box.pack_end (tabbar, true, true, 0);
124 add (main_box);
125
126 streams_service = new Gwibber.Streams ();
127
128 streams_map["home"] = streams_service.stream_filter_model (streams_service.stream_model, "home");
129
130 var home_item = new HomeItem (streams_map);
131 view = (GwibberGtk.StreamView)home_item.get_view ();
132
133 tabbar.add_item (home_item);
134 items_map["home"] = home_item;
135
136 streams_map["messages"] = streams_service.stream_filter_model (streams_service.stream_model, "messages");
137 streams_map["replies"] = streams_service.stream_filter_model (streams_service.stream_model, "replies");
138 streams_map["private"] = streams_service.stream_filter_model (streams_service.stream_model, "private");
139 streams_map["images"] = streams_service.stream_filter_model (streams_service.stream_model, "images");
140 streams_map["videos"] = streams_service.stream_filter_model (streams_service.stream_model, "videos");
141 streams_map["links"] = streams_service.stream_filter_model (streams_service.stream_model, "links");
142 streams_map["public"] = streams_service.stream_filter_model (streams_service.stream_model, "public");
143
144 var messages_item = new MessagesItem (streams_map);
145 tabbar.add_item (messages_item);
146 items_map["messages"] = messages_item;
147
148 var replies_item = new RepliesItem (streams_map);
149 tabbar.add_item (replies_item);
150 items_map["replies"] = replies_item;
151
152 var private_item = new PrivateItem (streams_map);
153 tabbar.add_item (private_item);
154 items_map["private"] = private_item;
155
156 var public_item = new PublicItem (streams_map);
157 tabbar.add_item (public_item);
158 items_map["public"] = public_item;
159
160 var attach_item = new AttachmentsItem (streams_map);
161 tabbar.add_item (attach_item);
162 items_map["attach"] = attach_item;
163
164 var searches_item = new SearchesItem (streams_service);
165 tabbar.add_item (searches_item as TabBarItem);
166 items_map["searches"] = searches_item;
167
168 searches_item.raise.connect ((item) => {
169 searches_item.clicked ();
170 });
171
172 var users_item = new UsersItem (streams_service);
173 tabbar.add_item (users_item as TabBarItem);
174 items_map["users"] = users_item;
175
176 users_item.raise.connect ((item) => {
177 users_item.clicked ();
178 });
179
180 view.notify["prepared"].connect (() => {
181 sort_order = state_settings.get_int("stream-sort-order");
182 });
183
184 state_settings.changed.connect ((key) => {
185 if (key == "stream-sort-order") {
186 if (sort_order != state_settings.get_int("stream-sort-order"))
187 sort_order = state_settings.get_int("stream-sort-order");
188 }
189 });
190 messages_item.clicked ();
191
192 Idle.add (() => {
193 var menubar = create_menus ();
194 main_box.pack_start(menubar, false, true, 0);
195 return false;
196 });
197
198 }
199
200 public Gtk.MenuBar create_menus ()
201 {
202 /**** Create menus ****/
203
204 Gtk.ActionEntry[] entries = new Gtk.ActionEntry[0];
205
206 Gtk.ActionEntry menu = {"Gwibber", null, _("_Gwibber"), null, null, null};
207 entries += menu;
208 menu = {"View", null, _("_View"), null, null, null};
209 entries += menu;
210 menu = {"Edit", null, _("_Edit"), null, null, null};
211 entries += menu;
212 menu = {"Help", null, _("_Help"), null, null, null};
213 entries += menu;
214 menu = {"refresh", Gtk.Stock.REFRESH, _("_Refresh"), "F5", null, on_refresh};
215 entries += menu;
216 menu = {"quit", Gtk.Stock.QUIT, _("_Quit"), "<ctrl>Q", null, on_quit};
217 entries += menu;
218 menu = {"sort", null, _("_Sort"), null, null, null};
219 entries += menu;
220 menu = {"accounts", null, _("_Accounts"), "<ctrl><shift>A", null,on_accounts};
221 entries += menu;
222 menu = {"preferences", Gtk.Stock.PREFERENCES, _("_Preferences"), "<ctrl>P", null, on_preferences};
223 entries += menu;
224 menu = {"about", Gtk.Stock.ABOUT, _("_About"), null, null, on_about};
225 entries += menu;
226
227 var sort_entries = new Gtk.RadioActionEntry[0];
228 Gtk.RadioActionEntry radio = {"ascending", Gtk.Stock.SORT_ASCENDING, _("_Ascending"), null, null, 0};
229 sort_entries += radio;
230 radio = {"descending", Gtk.Stock.SORT_DESCENDING, _("_Descending"), null, null, 1};
231 sort_entries += radio;
232
233 string ui = """
234 <ui>
235 <menubar name="MenuBar">
236 <menu action="Gwibber">
237 <menuitem action="refresh" />
238 <separator/>
239 <menuitem action="quit" />
240 </menu>
241
242 <menu action="View">
243 <menu action="sort">
244 <menuitem action="ascending" />
245 <menuitem action="descending" />
246 </menu>
247 </menu>
248
249 <menu action="Edit">
250 <menuitem action="accounts" />
251 <menuitem name="preferences" action="preferences" />
252 </menu>
253
254 <menu action="Help">
255 <menuitem action="about" />
256 </menu>
257 </menubar>
258 </ui>
259 """;
260
261 var main_group = new Gtk.ActionGroup("client");
262 main_group.add_actions(entries, this);
263 main_group.add_radio_actions(sort_entries, sort_order, ((a,c) => {
264 Gtk.RadioAction current = (Gtk.RadioAction) c;
265 state_settings.set_int("stream-sort-order", current.get_current_value ());
266 }));
267
268 var manager = new Gtk.UIManager();
269
270 try {
271 manager.add_ui_from_string(ui, -1);
272 } catch (Error e) { error("%s", e.message); }
273
274 manager.insert_action_group(main_group, 0);
275
276 var menubar = manager.get_widget("/MenuBar") as Gtk.MenuBar;
277 add_accel_group(manager.get_accel_group());
278
279 /**** End menu setup ****/
280
281 return menubar;
282 }
283
284
285 static void on_refresh() {
286 var service = new Gwibber.Service();
287 service.refresh();
288 }
289
290 static void on_preferences() {
291 GLib.Pid pid;
292 try {
293 GLib.Process.spawn_async(null, {"gwibber-preferences"}, null,
294 GLib.SpawnFlags.SEARCH_PATH, null, out pid);
295 } catch {
296 }
297 }
298
299 static void on_accounts() {
300 GLib.Pid pid;
301 try {
302 GLib.Process.spawn_async(null, {"gwibber-accounts"}, null,
303 GLib.SpawnFlags.SEARCH_PATH, null, out pid);
304 } catch {
305
306 }
307 }
308
309
310 static void on_about() {
311
312 string license = _("Gwibber is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n\nGwibber is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with Gwibber; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA");
313
314 string[] authors = {"Ken VanDine <ken@vandine.org>", "Neil Jagdish Patel <njpatel@gmail.com>"};
315 var about_dialog = new Gtk.AboutDialog ();
316 about_dialog.set_program_name("Gwibber");
317 about_dialog.set_logo_icon_name("gwibber");
318 about_dialog.set_version(Config.VERSION);
319 about_dialog.set_website("http://www.gwibber.com");
320 about_dialog.set_license(license);
321 about_dialog.set_wrap_license(true);
322 about_dialog.set_authors (authors);
323 about_dialog.run ();
324 about_dialog.destroy ();
325 }
326
327 private void on_quit ()
328 {
329 destroy ();
330 var service = new Gwibber.Service();
331
332 /* Check if the unity lens is running and only shutdown the
333 * service if it isn't
334 */
335 bool has_owner = false;
336 try {
337 string name = "com.canonical.Unity.Lens.Gwibber";
338 DBusConnection bus = Bus.get_sync (BusType.SESSION);
339 Variant result = bus.call_sync ("org.freedesktop.DBus",
340 "/org/freedesktop/dbus",
341 "org.freedesktop.DBus",
342 "NameHasOwner",
343 new Variant ("(s)", name),
344 new VariantType ("(b)"),
345 DBusCallFlags.NO_AUTO_START,
346 -1);
347 result.get ("(b)", out has_owner);
348 } catch (Error e) {
349 warning ("Unable to decide if '%s' is running: %s", name, e.message);
350 }
351
352 if (!has_owner)
353 {
354 debug ("Lens isn't running");
355 service.quit ();
356 }
357
358 }
359
360 bool on_configure_event (Gdk.EventConfigure event) {
361 int width, height, x, y;
362 get_size(out width, out height);
363 get_position (out x, out y);
364 state_settings.set_int("width", width);
365 state_settings.set_int("height", height);
366 state_settings.set_int("position-x", x);
367 state_settings.set_int("position-y", y);
368 return false;
369 }
370}
371
372public class Main : Gtk.Application
373{
374 static string stream;
375
376 static Client main_window;
377
378 const OptionEntry[] options = {
379 {"stream", 's', 0, OptionArg.STRING, ref stream, N_("Stream"), N_("STREAM")},
380 {null}
381 };
382
383 public Main (string app_id, ApplicationFlags flags)
384 {
385 GLib.Object (application_id: app_id, flags: flags);
386 }
387
388 public void on_activate ()
389 {
390 if (get_windows () != null)
391 main_window.present ();
392 else
393 {
394 main_window = new Client ();
395
396 add_window (main_window);
397
398 Environment.set_application_name (Config.PACKAGE);
399
400 Gtk.IconTheme.get_default ().append_search_path (GLib.Path.build_filename (Config.PKGDATADIR, "ui/icons"));
401
402 main_window.set_application (this);
403 main_window.show_all ();
404
405 var accounts_service = new Gwibber.Accounts();
406 var accounts_list = accounts_service.list ();
407 if (accounts_list.length() == 0)
408 {
409 GLib.Pid pid;
410 try {
411 GLib.Process.spawn_async(null, {"gwibber-accounts"}, null,
412 GLib.SpawnFlags.SEARCH_PATH, null, out pid);
413 } catch {
414 }
415 }
416 }
417 }
418
419 public int on_command_line (ApplicationCommandLine command_line)
420 {
421 var args = command_line.get_arguments ();
422 unowned string[] arguments = args;
423 try {
424 var context = new OptionContext (_("— Gwibber Client"));
425 context.set_help_enabled (false);
426 context.add_main_entries (options, Config.GETTEXT_PACKAGE);
427 context.parse (ref arguments);
428 }
429 catch (OptionError error) {
430 command_line.set_exit_status (1);
431 }
432
433 activate ();
434
435 var items_map = main_window.items_map;
436 if (stream != null)
437 {
438 if ((main_window.tabbar is TabBar) && (items_map[stream] is TabBarItem))
439 main_window.tabbar.on_tab_clicked(items_map[stream]);
440 }
441
442 command_line.set_exit_status (0);
443 return command_line.get_exit_status ();
444 }
445}
446
447public int main (string[] args)
448{
449 Gtk.init (ref args);
450
451 Intl.bindtextdomain(Config.GETTEXT_PACKAGE, Config.LOCALE_DIR);
452 Intl.bind_textdomain_codeset(Config.GETTEXT_PACKAGE, "UTF-8");
453 Intl.textdomain(Config.GETTEXT_PACKAGE);
454
455 var app = new Main ("org.gwibber.client", GLib.ApplicationFlags.HANDLES_COMMAND_LINE);
456
457 app.activate.connect (app.on_activate);
458 app.command_line.connect (app.on_command_line);
459 int result = app.run (args);
460 return result;
461}
4620
=== removed file '.pc/lpi.patch/configure.ac'
--- .pc/lpi.patch/configure.ac 2012-06-11 23:25:25 +0000
+++ .pc/lpi.patch/configure.ac 1970-01-01 00:00:00 +0000
@@ -1,368 +0,0 @@
1m4_define([gwibber_major], [3])
2m4_define([gwibber_minor], [4])
3m4_define([gwibber_micro], [2])
4m4_define([gwibber_version],
5 [gwibber_major.gwibber_minor.gwibber_micro])
6
7m4_define([gwibber_api_version], [0.2])
8
9AC_INIT([gwibber],[gwibber_version],[https://launchpad.net/gwibber])
10AC_COPYRIGHT([Copyright 2010 Canonical])
11m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
12
13AC_PREREQ(2.65)
14
15AC_CONFIG_HEADERS([config.h])
16AM_INIT_AUTOMAKE(gwibber, gwibber_version)
17
18dnl Get version number into Autoconf
19GWIBBER_MAJOR_VERSION=gwibber_major
20GWIBBER_MINOR_VERSION=gwibber_minor
21GWIBBER_MICRO_VERSION=gwibber_micro
22GWIBBER_VERSION=gwibber_version
23GWIBBER_API_VERSION=gwibber_api_version
24AC_SUBST(GWIBBER_MAJOR_VERSION)
25AC_SUBST(GWIBBER_MINOR_VERSION)
26AC_SUBST(GWIBBER_MICRO_VERSION)
27AC_SUBST(GWIBBER_VERSION)
28AC_SUBST(GWIBBER_API_VERSION)
29
30
31dnl Init the other things we depend on
32AM_MAINTAINER_MODE
33GWIBBER_PROG_VALAC([0.15.0])
34
35AS_IF([test -z "$VALAC"], [AC_MSG_ERROR(["No valac compiler found."])])
36AC_PROG_CC
37AM_PROG_CC_C_O
38AC_HEADER_STDC
39AC_PROG_LIBTOOL
40
41LT_INIT
42AC_CONFIG_MACRO_DIR([m4])
43
44# Check for python 2.6
45AM_PATH_PYTHON([2.6])
46
47###########################
48# Internationalization
49###########################
50
51GETTEXT_PACKAGE="${PACKAGE}"
52AC_SUBST(GETTEXT_PACKAGE)
53AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Name of the default get text domain])
54localedir='$(prefix)/$(DATADIRNAME)/locale'
55AC_SUBST(localedir)
56AM_GNU_GETTEXT([external])
57AM_GNU_GETTEXT_VERSION([0.17])
58IT_PROG_INTLTOOL([0.40])
59
60
61###########################
62# Lib versioning
63###########################
64
65LIBGWIBBER_CURRENT=2
66LIBGWIBBER_REVISION=0
67LIBGWIBBER_AGE=0
68
69AC_SUBST(LIBGWIBBER_CURRENT)
70AC_SUBST(LIBGWIBBER_REVISION)
71AC_SUBST(LIBGWIBBER_AGE)
72
73GLIB_GSETTINGS
74
75# Setup a few consts
76if test "x${prefix}" = "xNONE"; then
77 PREFIX="${ac_default_prefix}"
78else
79 PREFIX="${prefix}"
80fi
81
82AC_DEFINE_UNQUOTED(LOCALE_DIR, "${PREFIX}/${DATADIRNAME}/locale",[Locale directory])
83AC_DEFINE_UNQUOTED(PKGDATADIR, "${PREFIX}/${DATADIRNAME}/${PACKAGE}", [Package data directory])
84
85######################################################
86# intltool rule for generating translated .lens file
87######################################################
88INTLTOOL_LENS_RULE='%.lens: %.lens.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
89AC_SUBST(INTLTOOL_LENS_RULE)
90
91dnl Use strict compiler flags only on development releases
92m4_define([maintainer_flags_default],
93 [m4_if(m4_eval(gwibber_minor % 2), [1], [yes], [no])])
94AC_ARG_ENABLE([maintainer-flags],
95 [AS_HELP_STRING([--enable-maintainer-flags=@<:@no/yes@:>:],[Use string compiler flags @<:@default=no@:>@])],
96 [],
97 [enable_maintainer_flags=maintainer_flags_default])
98MAINTAINER_CFLAGS=""
99MAINTAINER_VALAFLAGS=""
100AS_IF([test "x$enable_maintainer_flags" = "xyes" && test "x$GCC" = "xyes"],
101 [
102 MAINTAINER_CFLAGS="-g -Wall -Werror -Wshadow -Wcast-align -Wno-uninitialized -Wempty-body -Wformat-security -Winit-self -Wno-unused-but-set-variable -Wno-unused-variable -Wno-error"
103 MAINTAINER_VALAFLAGS="-g --save-temps"
104 ]
105)
106AC_SUBST(MAINTAINER_CFLAGS)
107AC_SUBST(MAINTAINER_VALAFLAGS)
108
109
110
111dnl disable deprecated APIs
112DEPRECATED_CFLAGS=""
113AC_ARG_ENABLE([deprecated],
114 [AC_HELP_STRING([--disable-deprecated],
115 [Add extra compiler flags disabling deprecated APIs])],
116 [disable_deprecated=$enableval],
117 [disable_deprecated='yes'])
118
119if test "$disable_deprecated" = 'no'; then
120 DEPRECATED_CFLAGS="-DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED -DGSEAL_ENABLE -DG_DISABLE_DEPRECATED -DGTK_DISABLE_SINGLE_INCLUDES"
121fi
122AC_SUBST(DEPRECATED_CFLAGS)
123
124
125dnl Check for module and library dependancies
126GLIB_REQUIRED=2.26
127GTK_REQUIRED=3.2
128GDK_REQUIRED=3.2
129DEE_REQUIRED=1.0.0
130DBUSMENU_REQUIRED=0.4
131INDICATE_REQUIRED=0.5
132LIBNOTIFY_REQUIRED=0.7
133UNITY_REQUIRED=5.0.0
134PKG_CHECK_MODULES(BASE,
135 glib-2.0 >= $GLIB_REQUIRED
136 gobject-2.0 >= $GLIB_REQUIRED
137 gtk+-3.0 >= $GTK_REQUIRED
138 gdk-3.0 >= $GDK_REQUIRED
139 gio-2.0
140 gio-unix-2.0 >= $GLIB_REQUIRED
141 gee-1.0
142 libnotify >= $LIBNOTIFY_REQUIRED
143 libsoup-2.4
144 pangocairo
145 dee-1.0 >= $DEE_REQUIRED
146 json-glib-1.0
147 gmodule-2.0
148 gsettings-desktop-schemas)
149AC_SUBST(BASE_CFLAGS)
150AC_SUBST(BASE_LIBS)
151
152AC_ARG_ENABLE([spell],
153 AS_HELP_STRING([--enable-spell],
154 [enable gtkspell @<:@default=yes@:>@]),
155 enable_spell=$enableval,
156 enable_spell=yes)
157
158if test "x$enable_spell" = "xyes"; then
159 PKG_CHECK_MODULES(GTKSPELL,
160 gtkspell-3.0)
161 AC_SUBST(GTKSPELL_CFLAGS)
162 AC_SUBST(GTKSPELL_CFLAGS)
163 GTKSPELL_PKG="--pkg gtkspell-3.0"
164 AC_SUBST(GTKSPELL_PKG)
165fi
166
167AM_CONDITIONAL(HAVE_GTKSPELL, [test "x$enable_spell" = "xyes"])
168
169###########################
170# GObject Introspection
171###########################
172
173GOBJECT_INTROSPECTION_CHECK([0.6.7])
174
175PKG_CHECK_EXISTS([gobject-introspection-1.0 >= 0.10],
176 introspection_ten=yes,
177 introspection_ten=no)
178
179AM_CONDITIONAL(INTROSPECTION_TEN, [test "x$introspection_ten" = "xyes"])
180
181###########################
182# DBus Service Info
183###########################
184
185if test "x$with_localinstall" = "xyes"; then
186 DBUSSERVICEDIR="${datadir}/dbus-1/services/"
187else
188 DBUSSERVICEDIR=`$PKG_CONFIG --variable=session_bus_services_dir dbus-1`
189fi
190AC_SUBST(DBUSSERVICEDIR)
191
192dnl local install for distcheck and stand-alone running
193with_localinstall="no"
194AC_ARG_ENABLE(localinstall,
195 AS_HELP_STRING([--enable-localinstall],
196 [Install all of the files locally instead of in system directories (for distcheck)]),
197 with_localinstall=$enableval,
198 with_localinstall=no)
199
200AM_CONDITIONAL([HAVE_LOCALINSTALL], [test "x$with_localinstall" = "xyes"])
201
202with_unity="yes"
203AC_ARG_ENABLE(unity,
204 AS_HELP_STRING([--enable-unity],
205 [Enable building of the Unity lens]),
206 with_unity=$enableval,
207 with_unity=yes)
208
209AM_CONDITIONAL([HAVE_UNITY], [test "x$with_unity" = "xyes"])
210
211if test "x$with_unity" = "xyes"; then
212 PKG_CHECK_MODULES(UNITY,
213 dbusmenu-glib-0.4 >= $DBUSMENU_REQUIRED
214 unity >= $UNITY_REQUIRED)
215 AC_SUBST(UNITY_CFLAGS)
216 AC_SUBST(UNITY_LIBS)
217 if test "x$with_localinstall" = "xyes"; then
218 LENSESDIR="${datadir}/unity/lenses"
219 else
220 LENSESDIR=`$PKG_CONFIG --variable=lensesdir unity`
221 fi
222 AC_SUBST(LENSESDIR)
223fi
224
225dnl Create the Makefiles
226AC_CONFIG_FILES([
227 Makefile
228 man/Makefile
229 gwibber/Makefile
230 gwibber/lib/Makefile
231 gwibber/lib/gtk/Makefile
232 gwibber/microblog/Makefile
233 gwibber/microblog/util/Makefile
234 gwibber/microblog/util/const.py
235 gwibber/microblog/uploader/Makefile
236 gwibber/microblog/uploader/imageshack/Makefile
237 gwibber/microblog/uploader/ubuntuone_uploader/Makefile
238 gwibber/microblog/urlshorter/Makefile
239 gwibber/microblog/plugins/Makefile
240 gwibber/microblog/plugins/buzz/Makefile
241 gwibber/microblog/plugins/buzz/gtk/Makefile
242 gwibber/microblog/plugins/buzz/gtk/buzz/Makefile
243 gwibber/microblog/plugins/buzz/ui/Makefile
244 gwibber/microblog/plugins/buzz/ui/icons/Makefile
245 gwibber/microblog/plugins/buzz/ui/icons/hicolor/Makefile
246 gwibber/microblog/plugins/buzz/ui/icons/hicolor/16x16/Makefile
247 gwibber/microblog/plugins/buzz/ui/icons/hicolor/16x16/apps/Makefile
248 gwibber/microblog/plugins/buzz/ui/icons/hicolor/22x22/Makefile
249 gwibber/microblog/plugins/buzz/ui/icons/hicolor/22x22/apps/Makefile
250 gwibber/microblog/plugins/buzz/ui/icons/hicolor/32x32/Makefile
251 gwibber/microblog/plugins/buzz/ui/icons/hicolor/32x32/apps/Makefile
252 gwibber/microblog/plugins/digg/Makefile
253 gwibber/microblog/plugins/digg/gtk/Makefile
254 gwibber/microblog/plugins/digg/gtk/digg/Makefile
255 gwibber/microblog/plugins/digg/ui/Makefile
256 gwibber/microblog/plugins/facebook/Makefile
257 gwibber/microblog/plugins/facebook/gtk/Makefile
258 gwibber/microblog/plugins/facebook/gtk/facebook/Makefile
259 gwibber/microblog/plugins/facebook/ui/Makefile
260 gwibber/microblog/plugins/flickr/Makefile
261 gwibber/microblog/plugins/flickr/gtk/Makefile
262 gwibber/microblog/plugins/flickr/gtk/flickr/Makefile
263 gwibber/microblog/plugins/flickr/ui/Makefile
264 gwibber/microblog/plugins/foursquare/Makefile
265 gwibber/microblog/plugins/foursquare/gtk/Makefile
266 gwibber/microblog/plugins/foursquare/gtk/foursquare/Makefile
267 gwibber/microblog/plugins/foursquare/ui/Makefile
268 gwibber/microblog/plugins/foursquare/ui/icons/Makefile
269 gwibber/microblog/plugins/foursquare/ui/icons/hicolor/Makefile
270 gwibber/microblog/plugins/foursquare/ui/icons/hicolor/16x16/Makefile
271 gwibber/microblog/plugins/foursquare/ui/icons/hicolor/16x16/apps/Makefile
272 gwibber/microblog/plugins/foursquare/ui/icons/hicolor/22x22/Makefile
273 gwibber/microblog/plugins/foursquare/ui/icons/hicolor/22x22/apps/Makefile
274 gwibber/microblog/plugins/foursquare/ui/icons/hicolor/32x32/Makefile
275 gwibber/microblog/plugins/foursquare/ui/icons/hicolor/32x32/apps/Makefile
276 gwibber/microblog/plugins/friendfeed/Makefile
277 gwibber/microblog/plugins/friendfeed/gtk/Makefile
278 gwibber/microblog/plugins/friendfeed/gtk/friendfeed/Makefile
279 gwibber/microblog/plugins/friendfeed/ui/Makefile
280 gwibber/microblog/plugins/identica/Makefile
281 gwibber/microblog/plugins/identica/gtk/Makefile
282 gwibber/microblog/plugins/identica/gtk/identica/Makefile
283 gwibber/microblog/plugins/identica/ui/Makefile
284 gwibber/microblog/plugins/pingfm/Makefile
285 gwibber/microblog/plugins/pingfm/gtk/Makefile
286 gwibber/microblog/plugins/pingfm/gtk/pingfm/Makefile
287 gwibber/microblog/plugins/pingfm/ui/Makefile
288 gwibber/microblog/plugins/qaiku/Makefile
289 gwibber/microblog/plugins/qaiku/gtk/Makefile
290 gwibber/microblog/plugins/qaiku/gtk/qaiku/Makefile
291 gwibber/microblog/plugins/qaiku/ui/Makefile
292 gwibber/microblog/plugins/statusnet/Makefile
293 gwibber/microblog/plugins/statusnet/gtk/Makefile
294 gwibber/microblog/plugins/statusnet/gtk/statusnet/Makefile
295 gwibber/microblog/plugins/statusnet/ui/Makefile
296 gwibber/microblog/plugins/twitter/Makefile
297 gwibber/microblog/plugins/twitter/gtk/Makefile
298 gwibber/microblog/plugins/twitter/gtk/twitter/Makefile
299 gwibber/microblog/plugins/twitter/ui/Makefile
300 data/Makefile
301 data/icons/Makefile
302 data/icons/hicolor/Makefile
303 data/icons/hicolor/16x16/Makefile
304 data/icons/hicolor/16x16/status/Makefile
305 data/icons/hicolor/16x16/apps/Makefile
306 data/icons/hicolor/22x22/Makefile
307 data/icons/hicolor/22x22/places/Makefile
308 data/icons/hicolor/22x22/status/Makefile
309 data/icons/hicolor/22x22/apps/Makefile
310 data/icons/hicolor/48x48/Makefile
311 data/icons/hicolor/48x48/places/Makefile
312 data/icons/hicolor/scalable/Makefile
313 data/icons/hicolor/scalable/apps/Makefile
314 data/icons/hicolor/scalable/places/Makefile
315 data/icons/streams/Makefile
316 data/icons/streams/16x16/Makefile
317 data/icons/streams/24x24/Makefile
318 data/icons/streams/32x32/Makefile
319 data/icons/scalable/apps/Makefile
320 data/icons/16x16/apps/Makefile
321 data/icons/24x24/apps/Makefile
322 data/icons/32x32/apps/Makefile
323 data/icons/48x48/apps/Makefile
324 data/icons/256x256/apps/Makefile
325 data/icons/scalable/Makefile
326 data/icons/16x16/Makefile
327 data/icons/24x24/Makefile
328 data/icons/32x32/Makefile
329 data/icons/48x48/Makefile
330 data/icons/256x256/Makefile
331 data/gwibber.desktop.in
332 data/org.gwibber.gschema.xml.in
333 libgwibber/Makefile
334 libgwibber-gtk/Makefile
335 vapi/Makefile
336 po/Makefile.in
337 gwibber-$GWIBBER_API_VERSION.pc
338 gwibber-gtk-$GWIBBER_API_VERSION.pc
339 lens/Makefile
340 lens/src/Makefile
341 lens/data/Makefile
342 lens/data/gwibber.lens.in
343 client/Makefile
344 bin/Makefile
345 tests/Makefile
346 tests/vala/Makefile
347 tests/python/Makefile
348])
349AC_OUTPUT
350
351dnl Output the results
352AC_MSG_NOTICE([
353
354 libgwibber $VERSION
355 ----------------------
356
357 Prefix : ${prefix}
358
359 Localinstall : ${with_localinstall}
360
361 Unity : ${with_unity}
362 gtkspell : ${enable_spell}
363
364 Lenses Directory: ${LENSESDIR}
365
366 Extra CFlags : ${CPPFLAGS} $MAINTAINER_CFLAGS $DEPRECATED_CFLAGS
367 Extra ValaFlags: ${CPPFLAGS} $MAINTAINER_VALAFLAGS
368])
3690
=== modified file 'client/Makefile.am'
--- client/Makefile.am 2012-02-16 16:13:17 +0000
+++ client/Makefile.am 2012-12-05 02:19:23 +0000
@@ -43,7 +43,6 @@
43 --pkg atk \43 --pkg atk \
44 --pkg glib-2.0 \44 --pkg glib-2.0 \
45 --pkg dee-1.0 \45 --pkg dee-1.0 \
46 --pkg launchpad-integration-3.0 \
47 --basedir ./ \46 --basedir ./ \
48 $(MAINTAINER_VALAFLAGS) \47 $(MAINTAINER_VALAFLAGS) \
49 $(NULL)48 $(NULL)
5049
=== modified file 'client/gwibber-client.vala'
--- client/gwibber-client.vala 2012-02-23 14:18:14 +0000
+++ client/gwibber-client.vala 2012-12-05 02:19:23 +0000
@@ -252,8 +252,6 @@
252 </menu>252 </menu>
253253
254 <menu action="Help">254 <menu action="Help">
255 <placeholder name="LaunchpadItems" />
256 <separator />
257 <menuitem action="about" />255 <menuitem action="about" />
258 </menu>256 </menu>
259 </menubar>257 </menubar>
@@ -275,9 +273,6 @@
275273
276 manager.insert_action_group(main_group, 0);274 manager.insert_action_group(main_group, 0);
277275
278 LaunchpadIntegration.set_sourcepackagename("gwibber");
279 LaunchpadIntegration.add_ui(manager, "/MenuBar/Help/LaunchpadItems");
280
281 var menubar = manager.get_widget("/MenuBar") as Gtk.MenuBar;276 var menubar = manager.get_widget("/MenuBar") as Gtk.MenuBar;
282 add_accel_group(manager.get_accel_group());277 add_accel_group(manager.get_accel_group());
283278
284279
=== modified file 'configure.ac'
--- configure.ac 2012-06-11 23:25:25 +0000
+++ configure.ac 2012-12-05 02:19:23 +0000
@@ -145,7 +145,6 @@
145 dee-1.0 >= $DEE_REQUIRED145 dee-1.0 >= $DEE_REQUIRED
146 json-glib-1.0146 json-glib-1.0
147 gmodule-2.0147 gmodule-2.0
148 launchpad-integration-3.0
149 gsettings-desktop-schemas)148 gsettings-desktop-schemas)
150AC_SUBST(BASE_CFLAGS)149AC_SUBST(BASE_CFLAGS)
151AC_SUBST(BASE_LIBS)150AC_SUBST(BASE_LIBS)
152151
=== added file 'debian/patches/lp_1058672.patch'
--- debian/patches/lp_1058672.patch 1970-01-01 00:00:00 +0000
+++ debian/patches/lp_1058672.patch 2012-12-05 02:19:23 +0000
@@ -0,0 +1,22 @@
1=== modified file 'gwibber/microblog/plugins/facebook/gtk/facebook/__init__.py'
2--- old/gwibber/microblog/plugins/facebook/gtk/facebook/__init__.py 2012-06-07 14:03:13 +0000
3+++ new/gwibber/microblog/plugins/facebook/gtk/facebook/__init__.py 2012-10-18 14:51:12 +0000
4@@ -105,7 +105,7 @@
5 "redirect_uri": "http://www.facebook.com/connect/login_success.html",
6 })
7 web.load_uri("https://graph.facebook.com/oauth/authorize?" + url)
8- web.connect("title-changed", self.on_facebook_auth_title_change)
9+ web.connect("onload-event", self.on_facebook_auth_title_change)
10
11 self.scroll = Gtk.ScrolledWindow()
12
13@@ -126,7 +126,7 @@
14 self.dialog.infobar_content_area.show()
15
16 url = web.get_main_frame().get_uri()
17- if title.get_title() == "Success":
18+ if "/login_success" in url:
19 try:
20 self.account["access_token"] = str(urlparse.parse_qs(url.split("#", 1)[1])["access_token"][0])
21 except:
22
023
=== renamed file 'debian/patches/lp_1058672.patch' => 'debian/patches/lp_1058672.patch.moved'
=== modified file 'gwibber/microblog/network.py'
--- gwibber/microblog/network.py 2012-06-27 15:42:00 +0000
+++ gwibber/microblog/network.py 2012-12-05 02:19:23 +0000
@@ -37,14 +37,8 @@
37 logger.error("HTTP Error for %s - error code: %s", e.geturl().split("?")[0], e.getcode())37 logger.error("HTTP Error for %s - error code: %s", e.geturl().split("?")[0], e.getcode())
38 self.res = "HTTP error: {0}".format(e.getcode())38 self.res = "HTTP error: {0}".format(e.getcode())
39 except urllib2.URLError, e:39 except urllib2.URLError, e:
40 logger.error("Network failure: %s", e.message)40 logger.error("Network failure: %s", e.reason)
41 self.res = "Network error: {0}".format(e.message)41 self.res = "Network error: {0}".format(e.reason)
42 except IOError, e:
43 logger.error("Network failure: %s", e.message)
44 self.res = "Network error: {0}".format(e.message)
45 except:
46 logger.error("Network failure: UNKNOWN")
47 self.res = "Network error: UNKNOWN"
4842
49 def get_json(self):43 def get_json(self):
50 try:44 try:
5145
=== modified file 'gwibber/microblog/plugins/foursquare/__init__.py'
--- gwibber/microblog/plugins/foursquare/__init__.py 2012-06-27 15:42:00 +0000
+++ gwibber/microblog/plugins/foursquare/__init__.py 2012-12-05 02:19:23 +0000
@@ -9,7 +9,7 @@
99
10PROTOCOL_INFO = {10PROTOCOL_INFO = {
11 "name": "Foursquare",11 "name": "Foursquare",
12 "version": "5.0",12 "version": "4.0",
13 13
14 "config": [14 "config": [
15 "private:secret_token",15 "private:secret_token",
@@ -102,7 +102,7 @@
102 m["sender"] = {}102 m["sender"] = {}
103 m["sender"]["id"] = data["user"]["id"]103 m["sender"]["id"] = data["user"]["id"]
104 m["sender"]["image"] = data["user"]["photo"]104 m["sender"]["image"] = data["user"]["photo"]
105 m["sender"]["url"] = "https://www.foursquare.com/user/" + data["user"]["id"]105 m["sender"]["url"] = data["user"]["canonicalUrl"]
106 if data["user"]["relationship"] == "self": 106 if data["user"]["relationship"] == "self":
107 m["sender"]["is_me"] = True 107 m["sender"]["is_me"] = True
108 else: 108 else:
@@ -148,7 +148,7 @@
148 "id" : comment["user"]["id"],148 "id" : comment["user"]["id"],
149 "is_me": False,149 "is_me": False,
150 "image": comment["user"]["photo"],150 "image": comment["user"]["photo"],
151 "url" : "https://www.foursquare.com/user/" + comment["user"]["id"]151 "url" : comment["user"]["canonicalUrl"]
152 }152 }
153 # Create a comment153 # Create a comment
154 m["comments"].append({154 m["comments"].append({

Subscribers

People subscribed via source and target branches

to all changes: