aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Makefile.am2
-rwxr-xr-xautogen.sh8
-rw-r--r--configure.ac4
-rw-r--r--empathy.doap2
-rw-r--r--extensions/Makefile.am26
-rw-r--r--libempathy-gtk/Makefile.am14
-rw-r--r--libempathy/Makefile.am14
-rw-r--r--libempathy/empathy-tp-chat.c8
-rw-r--r--libempathy/empathy-tp-file.c275
-rw-r--r--libempathy/empathy-tp-file.h3
-rw-r--r--m4/shave.m477
-rw-r--r--megaphone/data/Makefile.am4
-rw-r--r--nothere/data/Makefile.am4
-rw-r--r--po/es.po382
-rw-r--r--python/pyempathy/Makefile.am4
-rw-r--r--python/pyempathy/pyempathy.defs77
-rw-r--r--python/pyempathygtk/Makefile.am4
-rw-r--r--python/pyempathygtk/pyempathygtk.defs12
-rw-r--r--shave-libtool.in69
-rw-r--r--shave.in79
-rw-r--r--src/Makefile.am6
-rw-r--r--src/empathy-ft-manager.c26
-rw-r--r--src/empathy-main-window.c16
-rw-r--r--src/empathy-main-window.ui9
-rw-r--r--tools/Makefile.am20
-rw-r--r--tools/shave.mk1
27 files changed, 864 insertions, 284 deletions
diff --git a/.gitignore b/.gitignore
index 6f644672c..e67be83e0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,3 +44,5 @@ cscope.out
tags
TAGS
gnome-doc-utils.make
+shave
+shave-libtool
diff --git a/Makefile.am b/Makefile.am
index 20e196234..3929d3931 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -38,7 +38,7 @@ DISTCLEANFILES = \
distuninstallcheck_listfiles = find . -type f -print | grep -v '^\./var/scrollkeeper'
distclean-local:
- if test $(srdcir) = .; then :; else \
+ if test "x$(srdcir)" = "x."; then :; else \
rm -f ChangeLog; \
fi
diff --git a/autogen.sh b/autogen.sh
index b1a24fc3a..e1bf4d55f 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -13,6 +13,14 @@ REQUIRED_AUTOMAKE_VERSION=1.9
exit 1
}
+# Fix to make shave + libtool 1.x + gtk-doc work.
+# See http://git.lespiau.name/cgit/shave/tree/README#n83
+sed -e 's#) --mode=compile#) --tag=CC --mode=compile#' gtk-doc.make \
+ > gtk-doc.temp \
+ && mv gtk-doc.temp gtk-doc.make
+sed -e 's#) --mode=link#) --tag=CC --mode=link#' gtk-doc.make \
+ > gtk-doc.temp \
+ && mv gtk-doc.temp gtk-doc.make
which gnome-autogen.sh || {
echo "You need to install gnome-common from the GNOME CVS"
diff --git a/configure.ac b/configure.ac
index 0ff17396d..7d2d5d2ac 100644
--- a/configure.ac
+++ b/configure.ac
@@ -303,6 +303,8 @@ AM_CONDITIONAL(HAVE_PYTHON, test "x$have_python" = "xyes")
# -----------------------------------------------------------
+SHAVE_INIT(.)
+
AC_OUTPUT([
Makefile
data/Makefile
@@ -333,4 +335,6 @@ AC_OUTPUT([
tests/Makefile
tests/xml/Makefile
tools/Makefile
+ shave
+ shave-libtool
])
diff --git a/empathy.doap b/empathy.doap
index acd6494bc..e37ed35c3 100644
--- a/empathy.doap
+++ b/empathy.doap
@@ -14,7 +14,7 @@
<maintainer>
<foaf:Person>
<foaf:name>Xavier Claessens</foaf:name>
- <foaf:mbox rdf:resource="xclaesse@gmail.com" />
+ <foaf:mbox rdf:resource="mailto:xclaesse@gmail.com" />
<gnome:userid>xclaesse</gnome:userid>
</foaf:Person>
</maintainer>
diff --git a/extensions/Makefile.am b/extensions/Makefile.am
index e5b1ea113..7591109e8 100644
--- a/extensions/Makefile.am
+++ b/extensions/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/tools/shave.mk
+
tools_dir = $(top_srcdir)/tools
AM_CPPFLAGS = $(DISABLE_DEPRECATED)
@@ -60,45 +62,45 @@ XSLTPROCFLAGS = --nonet --novalid
_gen/all.xml: all.xml $(wildcard *.xml)
$(mkdir_p) _gen
- $(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \
+ $(QUIET_GEN)$(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \
$< > $@
extensions.html: _gen/all.xml $(tools_dir)/doc-generator.xsl
- $(XSLTPROC) $(XSLTPROCFLAGS) \
+ $(QUIET_GEN)$(XSLTPROC) $(XSLTPROCFLAGS) \
--param "allow-undefined-interfaces" "true()" \
$(tools_dir)/doc-generator.xsl \
$< > $@
_gen/gtypes.h _gen/gtypes-body.h: _gen/all.xml \
$(top_srcdir)/tools/glib-gtypes-generator.py
- $(PYTHON) $(top_srcdir)/tools/glib-gtypes-generator.py \
+ $(QUIET_GEN)$(PYTHON) $(top_srcdir)/tools/glib-gtypes-generator.py \
$< _gen/gtypes Emp
_gen/signals-marshal.list: _gen/all.xml \
$(tools_dir)/glib-signals-marshal-gen.py
- $(PYTHON) $(tools_dir)/glib-signals-marshal-gen.py $< > $@
+ $(QUIET_GEN)$(PYTHON) $(tools_dir)/glib-signals-marshal-gen.py $< > $@
_gen/signals-marshal.h: _gen/signals-marshal.list Makefile.am
- $(GLIB_GENMARSHAL) --header --prefix=_emp_ext_marshal $< > $@
+ $(QUIET_GEN)$(GLIB_GENMARSHAL) --header --prefix=_emp_ext_marshal $< > $@
_gen/signals-marshal.c: _gen/signals-marshal.list Makefile.am
- { echo '#include "_gen/signals-marshal.h"' && \
+ $(QUIET_GEN){ echo '#include "_gen/signals-marshal.h"' && \
$(GLIB_GENMARSHAL) --body --prefix=_emp_ext_marshal $< ; } > $@
_gen/register-dbus-glib-marshallers-body.h: _gen/all.xml \
$(tools_dir)/glib-client-marshaller-gen.py
- $(PYTHON) $(tools_dir)/glib-client-marshaller-gen.py $< \
+ $(QUIET_GEN)$(PYTHON) $(tools_dir)/glib-client-marshaller-gen.py $< \
_emp_ext > $@
_gen/enums.h: _gen/all.xml \
$(tools_dir)/c-constants-gen.py
- $(PYTHON) $(tools_dir)/c-constants-gen.py \
+ $(QUIET_GEN)$(PYTHON) $(tools_dir)/c-constants-gen.py \
Emp \
$< > $@
_gen/interfaces-body.h _gen/interfaces.h: _gen/all.xml \
$(tools_dir)/glib-interfaces-gen.py
- $(PYTHON) $(tools_dir)/glib-interfaces-gen.py \
+ $(QUIET_GEN)$(PYTHON) $(tools_dir)/glib-interfaces-gen.py \
Emp _gen/interfaces-body.h _gen/interfaces.h $<
# Generated files which must be generated per "category". Each TpProxy
@@ -107,12 +109,12 @@ _gen/interfaces-body.h _gen/interfaces.h: _gen/all.xml \
_gen/misc.xml: misc.xml $(wildcard *.xml)
$(mkdir_p) _gen
- $(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \
+ $(QUIET_GEN)$(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \
$< > $@
_gen/cli-misc-body.h _gen/cli-misc.h: _gen/misc.xml \
$(tools_dir)/glib-client-gen.py
- $(PYTHON) $(tools_dir)/glib-client-gen.py \
+ $(QUIET_GEN)$(PYTHON) $(tools_dir)/glib-client-gen.py \
--group=misc \
--subclass=TpProxy \
--subclass-assert=TP_IS_PROXY \
@@ -122,7 +124,7 @@ _gen/cli-misc-body.h _gen/cli-misc.h: _gen/misc.xml \
_gen/svc-misc.c _gen/svc-misc.h: _gen/misc.xml \
$(tools_dir)/glib-ginterface-gen.py
- $(PYTHON) $(tools_dir)/glib-ginterface-gen.py \
+ $(QUIET_GEN)$(PYTHON) $(tools_dir)/glib-ginterface-gen.py \
--filename=_gen/svc-misc \
--signal-marshal-prefix=_emp_ext \
--include='<telepathy-glib/dbus.h>' \
diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am
index 2065589e3..210b6d4b0 100644
--- a/libempathy-gtk/Makefile.am
+++ b/libempathy-gtk/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/tools/shave.mk
+
AM_CPPFLAGS = \
-I. \
-I$(top_srcdir) \
@@ -133,7 +135,7 @@ ui_DATA = \
empathy-new-message-dialog.ui
empathy-gtk-marshal.list: $(libempathy_gtk_la_SOURCES) Makefile.am
- ( cd $(srcdir) && \
+ $(QUIET_GEN)( cd $(srcdir) && \
sed -n -e 's/.*empathy_gtk_marshal_\([[:upper:][:digit:]]*__[[:upper:][:digit:]_]*\).*/\1/p' \
$(libempathy_gtk_la_SOURCES) ) \
| sed -e 's/__/:/' -e 'y/_/,/' | sort -u > $@.tmp
@@ -144,16 +146,16 @@ empathy-gtk-marshal.list: $(libempathy_gtk_la_SOURCES) Makefile.am
fi
%-marshal.h: %-marshal.list Makefile
- $(GLIB_GENMARSHAL) --header --prefix=_$(subst -,_,$*)_marshal $< > $*-marshal.h
+ $(QUIET_GEN)$(GLIB_GENMARSHAL) --header --prefix=_$(subst -,_,$*)_marshal $< > $*-marshal.h
%-marshal.c: %-marshal.list Makefile
- echo "#include \"empathy-gtk-marshal.h\"" > $@ && \
+ $(QUIET_GEN)echo "#include \"empathy-gtk-marshal.h\"" > $@ && \
$(GLIB_GENMARSHAL) --body --prefix=_$(subst -,_,$*)_marshal $< >> $*-marshal.c
empathy-gtk-enum-types.h: stamp-empathy-gtk-enum-types.h
- @true
+ $(QUIET_GEN)true
stamp-empathy-gtk-enum-types.h: Makefile $(libempathy_gtk_headers)
- (cd $(srcdir) \
+ $(QUIET_GEN)(cd $(srcdir) \
&& glib-mkenums \
--fhead "#ifndef __LIBEMPATHY_GTK_ENUM_TYPES_H__\n" \
--fhead "#define __LIBEMPATHY_GTK_ENUM_TYPES_H__ 1\n\n" \
@@ -170,7 +172,7 @@ stamp-empathy-gtk-enum-types.h: Makefile $(libempathy_gtk_headers)
&& echo timestamp > $(@F)
empathy-gtk-enum-types.c: Makefile $(libempathy_gtk_headers)
- (cd $(srcdir) \
+ $(QUIET_GEN)(cd $(srcdir) \
&& glib-mkenums \
--fhead "#include <config.h>\n" \
--fhead "#include <glib-object.h>\n" \
diff --git a/libempathy/Makefile.am b/libempathy/Makefile.am
index ba1f6f8c7..67966695e 100644
--- a/libempathy/Makefile.am
+++ b/libempathy/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/tools/shave.mk
+
AM_CPPFLAGS = \
-I. \
-I$(top_srcdir) \
@@ -104,7 +106,7 @@ libempathy_include_HEADERS = \
empathy-enum-types.h
empathy-marshal.list: $(libempathy_la_SOURCES) Makefile.am
- ( cd $(srcdir) && \
+ $(QUIET_GEN)( cd $(srcdir) && \
sed -n -e 's/.*empathy_marshal_\([[:upper:][:digit:]]*__[[:upper:][:digit:]_]*\).*/\1/p' \
$(libempathy_la_SOURCES) ) \
| sed -e 's/__/:/' -e 'y/_/,/' | sort -u > $@.tmp
@@ -115,16 +117,16 @@ empathy-marshal.list: $(libempathy_la_SOURCES) Makefile.am
fi
%-marshal.h: %-marshal.list Makefile
- $(GLIB_GENMARSHAL) --header --prefix=_$(subst -,_,$*)_marshal $< > $*-marshal.h
+ $(QUIET_GEN)$(GLIB_GENMARSHAL) --header --prefix=_$(subst -,_,$*)_marshal $< > $*-marshal.h
%-marshal.c: %-marshal.list Makefile
- echo "#include \"empathy-marshal.h\"" > $@ && \
+ $(QUIET_GEN)echo "#include \"empathy-marshal.h\"" > $@ && \
$(GLIB_GENMARSHAL) --body --prefix=_$(subst -,_,$*)_marshal $< >> $*-marshal.c
empathy-enum-types.h: stamp-empathy-enum-types.h
- @true
+ $(QUIET_GEN)true
stamp-empathy-enum-types.h: $(libempathy_headers) Makefile
- (cd $(srcdir) \
+ $(QUIET_GEN)(cd $(srcdir) \
&& glib-mkenums \
--fhead "#ifndef __LIBEMPATHY_ENUM_TYPES_H__\n" \
--fhead "#define __LIBEMPATHY_ENUM_TYPES_H__ 1\n\n" \
@@ -141,7 +143,7 @@ stamp-empathy-enum-types.h: $(libempathy_headers) Makefile
&& echo timestamp > $(@F)
empathy-enum-types.c: $(libempathy_headers) Makefile
- (cd $(srcdir) \
+ $(QUIET_GEN)(cd $(srcdir) \
&& glib-mkenums \
--fhead "#include <config.h>\n" \
--fhead "#include <glib-object.h>\n" \
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
index 54e08d071..2f951e040 100644
--- a/libempathy/empathy-tp-chat.c
+++ b/libempathy/empathy-tp-chat.c
@@ -753,6 +753,10 @@ tp_chat_check_if_ready (EmpathyTpChat *chat)
DEBUG ("Ready!");
+ tp_cli_channel_type_text_connect_to_received (priv->channel,
+ tp_chat_received_cb,
+ NULL, NULL,
+ G_OBJECT (chat), NULL);
priv->listing_pending_messages = TRUE;
tp_cli_channel_type_text_call_list_pending_messages (priv->channel, -1,
FALSE,
@@ -760,10 +764,6 @@ tp_chat_check_if_ready (EmpathyTpChat *chat)
NULL, NULL,
G_OBJECT (chat));
- tp_cli_channel_type_text_connect_to_received (priv->channel,
- tp_chat_received_cb,
- NULL, NULL,
- G_OBJECT (chat), NULL);
tp_cli_channel_type_text_connect_to_sent (priv->channel,
tp_chat_sent_cb,
NULL, NULL,
diff --git a/libempathy/empathy-tp-file.c b/libempathy/empathy-tp-file.c
index 6796f5a0b..079390c37 100644
--- a/libempathy/empathy-tp-file.c
+++ b/libempathy/empathy-tp-file.c
@@ -1,4 +1,3 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2007-2008 Collabora Ltd.
* Copyright (C) 2007 Marco Barisione <marco@barisione.org>
@@ -51,11 +50,18 @@
/**
* SECTION:empathy-tp-file
- * @short_description: File channel
- * @see_also: #EmpathyTpFile, #EmpathyContact, empathy_dispatcher_send_file()
- * @include: libempthy/empathy-tp-file.h
+ * @title: EmpathyTpFile
+ * @short_description: Object which represents a Telepathy file channel
+ * @include: libempathy/empathy-tp-file.h
*
- * The #EmpathyTpFile object represents a Telepathy file channel.
+ * #EmpathyTpFile is an object which represents a Telepathy file channel.
+ */
+
+/**
+ * EmpathyTpFile:
+ * @parent: parent object
+ *
+ * Object which represents a Telepathy file channel.
*/
/**
@@ -69,6 +75,7 @@
#define N_BUFFERS 2
#define BUFFER_SIZE 4096
+#define STALLED_TIMEOUT 5
typedef struct {
GInputStream *in;
@@ -298,7 +305,11 @@ struct _EmpathyTpFilePriv {
gboolean incoming;
TpFileTransferStateChangeReason state_change_reason;
- time_t start_time;
+ time_t last_update_time;
+ guint64 last_update_transferred_bytes;
+ gdouble speed;
+ gint remaining_time;
+ guint stalled_id;
GValue *socket_address;
GCancellable *cancellable;
};
@@ -317,6 +328,13 @@ enum {
PROP_CONTENT_HASH,
};
+enum {
+ REFRESH,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
G_DEFINE_TYPE (EmpathyTpFile, empathy_tp_file, G_TYPE_OBJECT);
static void
@@ -391,9 +409,25 @@ tp_file_finalize (GObject *object)
if (tp_file->priv->cancellable)
g_object_unref (tp_file->priv->cancellable);
+ if (tp_file->priv->stalled_id != 0)
+ g_source_remove (tp_file->priv->stalled_id);
+
G_OBJECT_CLASS (empathy_tp_file_parent_class)->finalize (object);
}
+static gboolean
+tp_file_stalled_cb (EmpathyTpFile *tp_file)
+{
+ /* We didn't get transferred bytes update for a while, the transfer is
+ * stalled. */
+
+ tp_file->priv->speed = 0;
+ tp_file->priv->remaining_time = -1;
+ g_signal_emit (tp_file, signals[REFRESH], 0);
+
+ return FALSE;
+}
+
static void
tp_file_start_transfer (EmpathyTpFile *tp_file)
{
@@ -425,7 +459,11 @@ tp_file_start_transfer (EmpathyTpFile *tp_file)
DEBUG ("Start the transfer");
- tp_file->priv->start_time = empathy_time_get_current ();
+ tp_file->priv->last_update_time = empathy_time_get_current ();
+ tp_file->priv->last_update_transferred_bytes = tp_file->priv->transferred_bytes;
+ tp_file->priv->stalled_id = g_timeout_add_seconds (STALLED_TIMEOUT,
+ (GSourceFunc) tp_file_stalled_cb, tp_file);
+
tp_file->priv->cancellable = g_cancellable_new ();
if (tp_file->priv->incoming)
{
@@ -487,19 +525,47 @@ tp_file_transferred_bytes_changed_cb (TpChannel *channel,
GObject *weak_object)
{
EmpathyTpFile *tp_file = EMPATHY_TP_FILE (weak_object);
+ time_t curr_time, elapsed_time;
+ guint64 transferred_bytes;
+ /* If we didn't progress since last update, return */
if (tp_file->priv->transferred_bytes == count)
return;
+ /* Update the transferred bytes count */
tp_file->priv->transferred_bytes = count;
g_object_notify (G_OBJECT (tp_file), "transferred-bytes");
+
+ /* We got a progress, reset the stalled timeout */
+ if (tp_file->priv->stalled_id != 0)
+ g_source_remove (tp_file->priv->stalled_id);
+ tp_file->priv->stalled_id = g_timeout_add_seconds (STALLED_TIMEOUT,
+ (GSourceFunc) tp_file_stalled_cb, tp_file);
+
+ /* Calculate the transfer speed and remaining time estimation. We recalculate
+ * that each second to get more dynamic values that react faster to network
+ * changes. This is better than calculating the average from the begining of
+ * the transfer, I think. */
+ curr_time = empathy_time_get_current ();
+ elapsed_time = curr_time - tp_file->priv->last_update_time;
+ if (elapsed_time >= 1)
+ {
+ transferred_bytes = count - tp_file->priv->last_update_transferred_bytes;
+ tp_file->priv->speed = (gdouble) transferred_bytes / (gdouble) elapsed_time;
+ tp_file->priv->remaining_time = (tp_file->priv->size - count) /
+ tp_file->priv->speed;
+ tp_file->priv->last_update_transferred_bytes = count;
+ tp_file->priv->last_update_time = curr_time;
+
+ g_signal_emit (tp_file, signals[REFRESH], 0);
+ }
}
static void
tp_file_check_if_ready (EmpathyTpFile *tp_file)
{
if (tp_file->priv->ready || tp_file->priv->contact == NULL ||
- tp_file->priv->state == 0)
+ tp_file->priv->state == TP_FILE_TRANSFER_STATE_NONE)
return;
tp_file->priv->ready = TRUE;
@@ -518,7 +584,7 @@ tp_file_got_contact_cb (EmpathyTpContactFactory *factory,
if (error)
{
DEBUG ("Error: %s", error->message);
- empathy_tp_file_close (tp_file);
+ empathy_tp_file_cancel (tp_file);
return;
}
@@ -764,12 +830,13 @@ tp_file_weak_notify_cb (gpointer channel,
/**
* empathy_tp_file_new:
- * @channel: a Telepathy channel
+ * @channel: a #TpChannel
*
* Creates a new #EmpathyTpFile wrapping @channel, or return a new ref to an
- * existing #EmpathyTpFile for that channel.
+ * existing #EmpathyTpFile for that channel. The returned #EmpathyTpFile
+ * should be unrefed with g_object_unref() when finished with.
*
- * Returns: a new #EmpathyTpFile
+ * Return value: a new #EmpathyTpFile
*/
EmpathyTpFile *
empathy_tp_file_new (TpChannel *channel)
@@ -803,9 +870,9 @@ empathy_tp_file_new (TpChannel *channel)
* empathy_tp_file_get_channel
* @tp_file: an #EmpathyTpFile
*
- * Returns the Telepathy file transfer channel
+ * Returns the #TpChannel associated with @tp_file.
*
- * Returns: the #TpChannel
+ * Returns: the #TpChannel associated with @tp_file
*/
TpChannel *
empathy_tp_file_get_channel (EmpathyTpFile *tp_file)
@@ -874,7 +941,7 @@ tp_file_method_cb (TpChannel *channel,
* @error: a #GError set if there is an error when opening @gfile
*
* Accepts a file transfer that's in the "local pending" state (i.e.
- * TP_FILE_TRANSFER_STATE_LOCAL_PENDING).
+ * %TP_FILE_TRANSFER_STATE_LOCAL_PENDING).
*/
void
empathy_tp_file_accept (EmpathyTpFile *tp_file,
@@ -913,7 +980,7 @@ empathy_tp_file_accept (EmpathyTpFile *tp_file,
* @error: a #GError set if there is an error when opening @gfile
*
* Offers a file transfer that's in the "not offered" state (i.e.
- * TP_FILE_TRANSFER_STATE_NOT_OFFERED).
+ * %TP_FILE_TRANSFER_STATE_NOT_OFFERED).
*/
void
empathy_tp_file_offer (EmpathyTpFile *tp_file, GFile *gfile, GError **error)
@@ -934,6 +1001,14 @@ empathy_tp_file_offer (EmpathyTpFile *tp_file, GFile *gfile, GError **error)
&nothing, tp_file_method_cb, NULL, NULL, G_OBJECT (tp_file));
}
+/**
+ * empathy_tp_file_get_contact:
+ * @tp_file: an #EmpathyTpFile
+ *
+ * Returns the #EmpathyContact that @tp_file is open with.
+ *
+ * Return value: the #EmpathyContact that @tp_file is open with.
+ */
EmpathyContact *
empathy_tp_file_get_contact (EmpathyTpFile *tp_file)
{
@@ -948,6 +1023,14 @@ empathy_tp_file_get_filename (EmpathyTpFile *tp_file)
return tp_file->priv->filename;
}
+/**
+ * empathy_tp_file_is_incoming:
+ * @tp_file: an #EmpathyTpFile
+ *
+ * Returns whether @tp_file is incoming.
+ *
+ * Return value: %TRUE if the @tp_file is incoming, otherwise %FALSE
+ */
gboolean
empathy_tp_file_is_incoming (EmpathyTpFile *tp_file)
{
@@ -955,6 +1038,16 @@ empathy_tp_file_is_incoming (EmpathyTpFile *tp_file)
return tp_file->priv->incoming;
}
+/**
+ * empathy_tp_file_get_state:
+ * @tp_file: an #EmpathyTpFile
+ * @reason: return location for state change reason, or %NULL
+ *
+ * Gets the current state of @tp_file. If @reason is not %NULL, then
+ * it is set to the reason of the last state change.
+ *
+ * Return value: a #TpFileTransferState
+ */
TpFileTransferState
empathy_tp_file_get_state (EmpathyTpFile *tp_file,
TpFileTransferStateChangeReason *reason)
@@ -968,6 +1061,14 @@ empathy_tp_file_get_state (EmpathyTpFile *tp_file,
return tp_file->priv->state;
}
+/**
+ * empathy_tp_file_get_size:
+ * @tp_file: an #EmpathyTpFile
+ *
+ * Gets the size of the file being transferred over @tp_file, in bytes.
+ *
+ * Return value: the size of the file being transferred, in bytes
+ */
guint64
empathy_tp_file_get_size (EmpathyTpFile *tp_file)
{
@@ -976,6 +1077,14 @@ empathy_tp_file_get_size (EmpathyTpFile *tp_file)
return tp_file->priv->size;
}
+/**
+ * empathy_tp_file_get_transferred_bytes:
+ * @tp_file: an #EmpathyTpFile
+ *
+ * Gets the number of transferred bytes of @tp_file so far, in bytes.
+ *
+ * Return value: number of transferred bytes of @tp_file, in bytes
+ */
guint64
empathy_tp_file_get_transferred_bytes (EmpathyTpFile *tp_file)
{
@@ -983,13 +1092,17 @@ empathy_tp_file_get_transferred_bytes (EmpathyTpFile *tp_file)
return tp_file->priv->transferred_bytes;
}
+/**
+ * empathy_tp_file_get_remaining_time:
+ * @tp_file: a #EmpathyTpFile
+ *
+ * Gets the estimated time remaining of @tp_file, in seconds.
+ *
+ * Return value: the estimated time remaining of @tp_file, in seconds
+ **/
gint
empathy_tp_file_get_remaining_time (EmpathyTpFile *tp_file)
{
- time_t curr_time, elapsed_time;
- gdouble time_per_byte;
- gdouble remaining_time;
-
g_return_val_if_fail (EMPATHY_IS_TP_FILE (tp_file), -1);
if (tp_file->priv->size == EMPATHY_TP_FILE_UNKNOWN_SIZE)
@@ -998,14 +1111,28 @@ empathy_tp_file_get_remaining_time (EmpathyTpFile *tp_file)
if (tp_file->priv->transferred_bytes == tp_file->priv->size)
return 0;
- curr_time = empathy_time_get_current ();
- elapsed_time = curr_time - tp_file->priv->start_time;
- time_per_byte = (gdouble) elapsed_time /
- (gdouble) tp_file->priv->transferred_bytes;
- remaining_time = time_per_byte * (tp_file->priv->size -
- tp_file->priv->transferred_bytes);
+ return tp_file->priv->remaining_time;
+}
+
+/**
+ * empathy_tp_file_get_speed:
+ * @tp_file: an #EmpathyTpFile
+ *
+ * Gets the current speed of the transfer @tp_file, in bytes per
+ * second.
+ *
+ * Return value: the current speed of the transfer @tp_file, in
+ * bytes per second
+ **/
+gdouble
+empathy_tp_file_get_speed (EmpathyTpFile *tp_file)
+{
+ g_return_val_if_fail (EMPATHY_IS_TP_FILE (tp_file), 0);
- return (gint) remaining_time;
+ if (tp_file->priv->transferred_bytes == tp_file->priv->size)
+ return 0;
+
+ return tp_file->priv->speed;
}
const gchar *
@@ -1015,6 +1142,12 @@ empathy_tp_file_get_content_type (EmpathyTpFile *tp_file)
return tp_file->priv->content_type;
}
+/**
+ * empathy_tp_file_cancel:
+ * @tp_file: an #EmpathyTpFile
+ *
+ * Cancels the file transfer, @tp_file.
+ */
void
empathy_tp_file_cancel (EmpathyTpFile *tp_file)
{
@@ -1028,12 +1161,18 @@ empathy_tp_file_cancel (EmpathyTpFile *tp_file)
g_cancellable_cancel (tp_file->priv->cancellable);
}
-void
-empathy_tp_file_close (EmpathyTpFile *tp_file)
-{
- empathy_tp_file_cancel (tp_file);
-}
-
+/**
+ * empathy_tp_file_is_ready:
+ * @tp_file: an #EmpathyTpFile
+ *
+ * Returns whether the file channel @tp_file is ready for use.
+ *
+ * @tp_file is classed as ready if its state is no longer
+ * %TP_FILE_TRANSFER_STATE_NONE, or if details about the remote
+ * contact have been fully received.
+ *
+ * Return value: %TRUE if @tp_file is ready for use
+ */
gboolean
empathy_tp_file_is_ready (EmpathyTpFile *tp_file)
{
@@ -1053,6 +1192,12 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
object_class->set_property = tp_file_set_property;
/* Construct-only properties */
+
+ /**
+ * EmpathyTpFile:channel:
+ *
+ * The #TpChannel associated with the #EmpathyTpFile.
+ */
g_object_class_install_property (object_class,
PROP_CHANNEL,
g_param_spec_object ("channel",
@@ -1062,6 +1207,11 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
+ /**
+ * EmpathyTpFile:state:
+ *
+ * The #TpFileTransferState of the #EmpathyTpFile.
+ */
g_object_class_install_property (object_class,
PROP_STATE,
g_param_spec_uint ("state",
@@ -1073,6 +1223,11 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
+ /**
+ * EmpathyTpFile:incoming:
+ *
+ * Whether the #EmpathyTpFile is incoming.
+ */
g_object_class_install_property (object_class,
PROP_INCOMING,
g_param_spec_boolean ("incoming",
@@ -1082,6 +1237,12 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
+ /**
+ * EmpathyTpFile:ready:
+ *
+ * Whether the #EmpathyTpFile is ready to use. This property returns
+ * the same as empathy_tp_file_is_ready().
+ */
g_object_class_install_property (object_class,
PROP_READY,
g_param_spec_boolean ("ready",
@@ -1090,6 +1251,11 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
FALSE,
G_PARAM_READABLE));
+ /**
+ * EmpathyTpFile:filename:
+ *
+ * The name of the file being transferred.
+ */
g_object_class_install_property (object_class,
PROP_FILENAME,
g_param_spec_string ("filename",
@@ -1098,6 +1264,11 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
"",
G_PARAM_READWRITE));
+ /**
+ * EmpathyTpFile:size:
+ *
+ * The size of the file being transferred.
+ */
g_object_class_install_property (object_class,
PROP_SIZE,
g_param_spec_uint64 ("size",
@@ -1108,6 +1279,11 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
G_MAXUINT64,
G_PARAM_READWRITE));
+ /**
+ * EmpathyTpFile:content-type:
+ *
+ * The content-type of the file being transferred.
+ */
g_object_class_install_property (object_class,
PROP_CONTENT_TYPE,
g_param_spec_string ("content-type",
@@ -1116,6 +1292,12 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
"",
G_PARAM_READWRITE));
+ /**
+ * EmpathyTpFile:content-hash-type:
+ *
+ * The type of hash type stored in #EmpathyTpFile:content-hash,
+ * from #TpFileHashType.
+ */
g_object_class_install_property (object_class,
PROP_CONTENT_HASH_TYPE,
g_param_spec_uint ("content-hash-type",
@@ -1126,6 +1308,11 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
0,
G_PARAM_READWRITE));
+ /**
+ * EmpathyTpFile:content-hash:
+ *
+ * A hash of the contents of the file being transferred.
+ */
g_object_class_install_property (object_class,
PROP_CONTENT_HASH,
g_param_spec_string ("content-hash",
@@ -1134,6 +1321,11 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
"",
G_PARAM_READWRITE));
+ /**
+ * EmpathyTpFile:transferred-bytes:
+ *
+ * The number of bytes transferred in the #EmpathyTpFile.
+ */
g_object_class_install_property (object_class,
PROP_TRANSFERRED_BYTES,
g_param_spec_uint64 ("transferred-bytes",
@@ -1144,6 +1336,23 @@ empathy_tp_file_class_init (EmpathyTpFileClass *klass)
0,
G_PARAM_READWRITE));
+ /**
+ * EmpathyTpFile::refresh:
+ * @tp_file: the #EmpathyTpFile
+ *
+ * The progress of @tp_file has changed. This can either be an update
+ * in the number of bytes transferred, or it can be to inform of the
+ * transfer stalling.
+ *
+ * This signal is designed for clients to provide more user feedback
+ * when something to do with @tp_file changes. To avoid emitting this
+ * signal too much, it is guaranteed that it will only ever be fired
+ * at least every two seconds.
+ */
+ signals[REFRESH] = g_signal_new ("refresh", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
g_type_class_add_private (object_class, sizeof (EmpathyTpFilePriv));
}
diff --git a/libempathy/empathy-tp-file.h b/libempathy/empathy-tp-file.h
index 5f239c8e0..1d4443153 100644
--- a/libempathy/empathy-tp-file.h
+++ b/libempathy/empathy-tp-file.h
@@ -52,6 +52,7 @@ struct _EmpathyTpFile
{
GObject parent;
+ /*<private>*/
EmpathyTpFilePriv *priv;
};
@@ -68,7 +69,6 @@ TpChannel *empathy_tp_file_get_channel (EmpathyTpFile *tp_file);
void empathy_tp_file_accept (EmpathyTpFile *tp_file, guint64 offset,
GFile *gfile, GError **error);
void empathy_tp_file_cancel (EmpathyTpFile *tp_file);
-void empathy_tp_file_close (EmpathyTpFile *tp_file);
void empathy_tp_file_offer (EmpathyTpFile *tp_file, GFile *gfile,
GError **error);
@@ -80,6 +80,7 @@ TpFileTransferState empathy_tp_file_get_state (
guint64 empathy_tp_file_get_size (EmpathyTpFile *tp_file);
guint64 empathy_tp_file_get_transferred_bytes (EmpathyTpFile *tp_file);
gint empathy_tp_file_get_remaining_time (EmpathyTpFile *tp_file);
+gdouble empathy_tp_file_get_speed (EmpathyTpFile *tp_file);
const gchar *empathy_tp_file_get_content_type (EmpathyTpFile *tp_file);
gboolean empathy_tp_file_is_ready (EmpathyTpFile *tp_file);
diff --git a/m4/shave.m4 b/m4/shave.m4
new file mode 100644
index 000000000..0a3509e59
--- /dev/null
+++ b/m4/shave.m4
@@ -0,0 +1,77 @@
+dnl Make automake/libtool output more friendly to humans
+dnl Damien Lespiau <damien.lespiau@gmail.com>
+dnl
+dnl SHAVE_INIT([shavedir],[default_mode])
+dnl
+dnl shavedir: the directory where the shave scripts are, it defaults to
+dnl $(top_builddir)
+dnl default_mode: (enable|disable) default shave mode. This parameter
+dnl controls shave's behaviour when no option has been
+dnl given to configure. It defaults to disable.
+dnl
+dnl * SHAVE_INIT should be called late in your configure.(ac|in) file (just
+dnl before AC_CONFIG_FILE/AC_OUTPUT is perfect. This macro rewrites CC and
+dnl LIBTOOL, you don't want the configure tests to have these variables
+dnl re-defined.
+dnl * This macro requires GNU make's -s option.
+
+AC_DEFUN([_SHAVE_ARG_ENABLE],
+[
+ AC_ARG_ENABLE([shave],
+ AS_HELP_STRING(
+ [--enable-shave],
+ [use shave to make the build pretty [[default=$1]]]),,
+ [enable_shave=$1]
+ )
+])
+
+AC_DEFUN([SHAVE_INIT],
+[
+ dnl you can tweak the default value of enable_shave
+ m4_if([$2], [enable], [_SHAVE_ARG_ENABLE(yes)], [_SHAVE_ARG_ENABLE(no)])
+
+ if test x"$enable_shave" = xyes; then
+ dnl where can we find the shave scripts?
+ m4_if([$1],,
+ [shavedir="$ac_pwd"],
+ [shavedir="$ac_pwd/$1"])
+ AC_SUBST(shavedir)
+
+ dnl make is now quiet
+ AC_SUBST([MAKEFLAGS], [-s])
+ AC_SUBST([AM_MAKEFLAGS], ['`test -z $V && echo -s`'])
+
+ dnl we need sed
+ AC_CHECK_PROG(SED,sed,sed,false)
+
+ dnl substitute libtool
+ SHAVE_SAVED_LIBTOOL=$LIBTOOL
+ LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
+ AC_SUBST(LIBTOOL)
+
+ dnl substitute cc/cxx
+ SHAVE_SAVED_CC=$CC
+ SHAVE_SAVED_CXX=$CXX
+ SHAVE_SAVED_FC=$FC
+ SHAVE_SAVED_F77=$F77
+ SHAVE_SAVED_OBJC=$OBJC
+ CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
+ CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
+ FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
+ F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
+ OBJC="${SHELL} ${shavedir}/shave objc ${SHAVE_SAVED_OBJC}"
+ AC_SUBST(CC)
+ AC_SUBST(CXX)
+ AC_SUBST(FC)
+ AC_SUBST(F77)
+ AC_SUBST(OBJC)
+
+ V=@
+ else
+ V=1
+ fi
+ Q='$(V:1=)'
+ AC_SUBST(V)
+ AC_SUBST(Q)
+])
+
diff --git a/megaphone/data/Makefile.am b/megaphone/data/Makefile.am
index c2e378fae..875756cd0 100644
--- a/megaphone/data/Makefile.am
+++ b/megaphone/data/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/tools/shave.mk
+
# Panel applet bonobo stuff
serverdir = $(libdir)/bonobo/servers
server_in_files = GNOME_Megaphone_Applet.server.in
@@ -21,7 +23,7 @@ megaphonebindir = $(libexecdir)
@INTLTOOL_SCHEMAS_RULE@
$(server_in_files): $(server_in_files:.server.in=.server.in.in)
- sed -e "s|\@LIBEXECDIR\@|$(megaphonebindir)|" $< > $@
+ $(QUIET_GEN)sed -e "s|\@LIBEXECDIR\@|$(megaphonebindir)|" $< > $@
DISTCLEANFILES = \
$(server_DATA) \
diff --git a/nothere/data/Makefile.am b/nothere/data/Makefile.am
index ce60c3cb2..730406577 100644
--- a/nothere/data/Makefile.am
+++ b/nothere/data/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/tools/shave.mk
+
# Panel applet bonobo stuff
serverdir = $(libdir)/bonobo/servers
server_in_files = GNOME_NotHere_Applet.server.in
@@ -21,7 +23,7 @@ notherebindir = $(libexecdir)
@INTLTOOL_SCHEMAS_RULE@
$(server_in_files): $(server_in_files:.server.in=.server.in.in)
- sed -e "s|\@LIBEXECDIR\@|$(notherebindir)|" $< > $@
+ $(QUIET_GEN)sed -e "s|\@LIBEXECDIR\@|$(notherebindir)|" $< > $@
DISTCLEANFILES = \
$(server_DATA) \
diff --git a/po/es.po b/po/es.po
index 7e5b0c26d..a1c0627b1 100644
--- a/po/es.po
+++ b/po/es.po
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: empathy.HEAD\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=empathy&component=general\n"
-"POT-Creation-Date: 2009-04-21 15:44+0000\n"
-"PO-Revision-Date: 2009-04-21 21:02+0200\n"
+"POT-Creation-Date: 2009-04-24 20:08+0000\n"
+"PO-Revision-Date: 2009-04-25 20:26+0200\n"
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"MIME-Version: 1.0\n"
@@ -355,31 +355,31 @@ msgstr ""
"predeterminado es ordenar por el nombre del contacto con el valor \"name"
"\" (nombre). Un valor \"state\" (estado) ordenará la lista por el estado."
-#: ../libempathy/empathy-tp-contact-list.c:732 ../src/empathy.c:271
+#: ../libempathy/empathy-tp-contact-list.c:727 ../src/empathy.c:278
msgid "People nearby"
msgstr "Gente cerca"
-#: ../libempathy/empathy-utils.c:252
+#: ../libempathy/empathy-utils.c:251
msgid "Available"
msgstr "Disponible"
-#: ../libempathy/empathy-utils.c:254
+#: ../libempathy/empathy-utils.c:253
msgid "Busy"
msgstr "Ocupado"
-#: ../libempathy/empathy-utils.c:257
+#: ../libempathy/empathy-utils.c:256
msgid "Away"
msgstr "Ausente"
-#: ../libempathy/empathy-utils.c:259
+#: ../libempathy/empathy-utils.c:258
msgid "Hidden"
msgstr "Oculto"
-#: ../libempathy/empathy-utils.c:262
+#: ../libempathy/empathy-utils.c:261
msgid "Offline"
msgstr "Desconectado"
-#: ../libempathy-gtk/empathy-account-chooser.c:325
+#: ../libempathy-gtk/empathy-account-chooser.c:419
msgid "All"
msgstr "Todo"
@@ -449,7 +449,7 @@ msgstr "_UIN ICQ:"
msgid "_Charset:"
msgstr "Conjunto de _caracteres:"
-#: ../libempathy-gtk/empathy-account-widget-irc.c:244
+#: ../libempathy-gtk/empathy-account-widget-irc.c:241
msgid "New Network"
msgstr "Red nueva"
@@ -570,114 +570,118 @@ msgstr "_Ignorar invitaciones a conferencias y salas de chat"
msgid "_Room List locale:"
msgstr "Configuración de la lista de _salas:"
-#: ../libempathy-gtk/empathy-avatar-chooser.c:462
-#: ../libempathy-gtk/empathy-avatar-chooser.c:538
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+#: ../libempathy-gtk/empathy-avatar-chooser.c:525
msgid "Couldn't convert image"
msgstr "No se pudo convertir la imagen"
-#: ../libempathy-gtk/empathy-avatar-chooser.c:463
+#: ../libempathy-gtk/empathy-avatar-chooser.c:450
msgid "None of the accepted image formats is supported on your system"
msgstr "Su sistema no soporta ninguno de los formatos de imagen aceptados"
-#: ../libempathy-gtk/empathy-avatar-chooser.c:957
+#: ../libempathy-gtk/empathy-avatar-chooser.c:933
msgid "Select Your Avatar Image"
msgstr "Seleccione su imagen de avatar"
-#: ../libempathy-gtk/empathy-avatar-chooser.c:960
+#: ../libempathy-gtk/empathy-avatar-chooser.c:936
msgid "No Image"
msgstr "Sin imagen"
-#: ../libempathy-gtk/empathy-avatar-chooser.c:1022
+#: ../libempathy-gtk/empathy-avatar-chooser.c:998
msgid "Images"
msgstr "Imágenes"
-#: ../libempathy-gtk/empathy-avatar-chooser.c:1026
+#: ../libempathy-gtk/empathy-avatar-chooser.c:1002
msgid "All Files"
msgstr "Todos los archivos"
-#: ../libempathy-gtk/empathy-avatar-image.c:294
+#: ../libempathy-gtk/empathy-avatar-image.c:324
msgid "Click to enlarge"
msgstr "Pulse para agrandar"
-#: ../libempathy-gtk/empathy-chat.c:180
+#: ../libempathy-gtk/empathy-chat.c:178
msgid "Failed to reconnect this chat"
msgstr "Falló al reconectar a este chat"
-#: ../libempathy-gtk/empathy-chat.c:398
+#: ../libempathy-gtk/empathy-chat.c:396
msgid "Unsupported command"
msgstr "Comando no soportado"
-#: ../libempathy-gtk/empathy-chat.c:533
+#: ../libempathy-gtk/empathy-chat.c:531
msgid "offline"
msgstr "desconectado"
-#: ../libempathy-gtk/empathy-chat.c:536
+#: ../libempathy-gtk/empathy-chat.c:534
msgid "invalid contact"
msgstr "contacto no válido"
-#: ../libempathy-gtk/empathy-chat.c:539
+#: ../libempathy-gtk/empathy-chat.c:537
msgid "permission denied"
msgstr "permiso denegado"
-#: ../libempathy-gtk/empathy-chat.c:542
+#: ../libempathy-gtk/empathy-chat.c:540
msgid "too long message"
msgstr "mensaje demasiado largo"
-#: ../libempathy-gtk/empathy-chat.c:545
+#: ../libempathy-gtk/empathy-chat.c:543
msgid "not implemented"
msgstr "no implementado"
-#: ../libempathy-gtk/empathy-chat.c:548
+#: ../libempathy-gtk/empathy-chat.c:546
msgid "unknown"
msgstr "desconocido"
-#: ../libempathy-gtk/empathy-chat.c:552
+#: ../libempathy-gtk/empathy-chat.c:550
#, c-format
msgid "Error sending message '%s': %s"
msgstr "Error al enviar el mensaje «%s»: %s"
-#: ../libempathy-gtk/empathy-chat.c:582
+#: ../libempathy-gtk/empathy-chat.c:580
#, c-format
msgid "Topic set to: %s"
msgstr "El tema se ha establecido a: %s"
-#: ../libempathy-gtk/empathy-chat.c:584
+#: ../libempathy-gtk/empathy-chat.c:582
msgid "No topic defined"
msgstr "No se ha definido el tema"
-#: ../libempathy-gtk/empathy-chat.c:977
+#: ../libempathy-gtk/empathy-chat.c:951
+msgid "(No Suggestions)"
+msgstr "(Sin sugerencias)"
+
+#: ../libempathy-gtk/empathy-chat.c:1005
msgid "Insert Smiley"
msgstr "Insertar emoticono"
#. send button
-#: ../libempathy-gtk/empathy-chat.c:995
+#: ../libempathy-gtk/empathy-chat.c:1023
#: ../libempathy-gtk/empathy-ui-utils.c:1507
msgid "_Send"
msgstr "E_nviar"
-#: ../libempathy-gtk/empathy-chat.c:1029
-msgid "_Check Word Spelling..."
-msgstr "_Comprobar ortografía…"
+#: ../libempathy-gtk/empathy-chat.c:1057
+msgid "_Spelling Suggestions"
+msgstr "_Sugerencias ortográficas"
-#: ../libempathy-gtk/empathy-chat.c:1147
+#: ../libempathy-gtk/empathy-chat.c:1171
#, c-format
msgid "%s has joined the room"
msgstr "%s ha entrado en la sala"
-#: ../libempathy-gtk/empathy-chat.c:1150
+#: ../libempathy-gtk/empathy-chat.c:1174
#, c-format
msgid "%s has left the room"
msgstr "%s ha dejado la sala"
-#: ../libempathy-gtk/empathy-chat.c:1265 ../src/empathy-call-window.c:756
+#: ../libempathy-gtk/empathy-chat.c:1289 ../src/empathy-call-window.c:757
msgid "Disconnected"
msgstr "Desconectado"
-#: ../libempathy-gtk/empathy-chat.c:1660
+#: ../libempathy-gtk/empathy-chat.c:1700
msgid "Connected"
msgstr "Conectado"
-#: ../libempathy-gtk/empathy-chat.c:1710
+#: ../libempathy-gtk/empathy-chat.c:1750
#: ../libempathy-gtk/empathy-log-window.c:501
msgid "Conversation"
msgstr "Conversación"
@@ -700,23 +704,20 @@ msgstr "_Abrir enlace"
msgid "%A %B %d %Y"
msgstr "%A %d %B %Y"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:181
-msgid "Personal Information"
-msgstr "Información personal"
-
-#: ../libempathy-gtk/empathy-contact-dialogs.c:184
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+#: ../libempathy-gtk/empathy-contact-dialogs.c:237
msgid "Edit Contact Information"
msgstr "Editar información del contacto"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:187
-msgid "Contact Information"
-msgstr "Información del contacto"
+#: ../libempathy-gtk/empathy-contact-dialogs.c:288
+msgid "Personal Information"
+msgstr "Información personal"
-#: ../libempathy-gtk/empathy-contact-dialogs.c:269
+#: ../libempathy-gtk/empathy-contact-dialogs.c:368
msgid "I would like to add you to my contact list."
msgstr "Me gustaría añadirte a mi lista de contactos."
-#: ../libempathy-gtk/empathy-contact-dialogs.c:293
+#: ../libempathy-gtk/empathy-contact-dialogs.c:392
msgid "New Contact"
msgstr "Contacto nuevo"
@@ -728,30 +729,30 @@ msgstr "Decidir _luego"
msgid "Subscription Request"
msgstr "Petición de suscripción"
-#: ../libempathy-gtk/empathy-contact-list-view.c:1255
+#: ../libempathy-gtk/empathy-contact-list-view.c:1315
#, c-format
msgid "Do you really want to remove the group '%s'?"
msgstr "¿Realmente quiere quitar el grupo «%s»?"
-#: ../libempathy-gtk/empathy-contact-list-view.c:1257
+#: ../libempathy-gtk/empathy-contact-list-view.c:1317
msgid "Removing group"
msgstr "Quitando grupo"
-#: ../libempathy-gtk/empathy-contact-list-view.c:1304
-#: ../libempathy-gtk/empathy-contact-list-view.c:1383
+#: ../libempathy-gtk/empathy-contact-list-view.c:1364
+#: ../libempathy-gtk/empathy-contact-list-view.c:1443
msgid "_Remove"
msgstr "_Quitar"
-#: ../libempathy-gtk/empathy-contact-list-view.c:1334
+#: ../libempathy-gtk/empathy-contact-list-view.c:1394
#, c-format
msgid "Do you really want to remove the contact '%s'?"
msgstr "¿Realmente quiere quitar el contacto «%s»?"
-#: ../libempathy-gtk/empathy-contact-list-view.c:1336
+#: ../libempathy-gtk/empathy-contact-list-view.c:1396
msgid "Removing contact"
msgstr "Quitando el contacto"
-#: ../libempathy-gtk/empathy-contact-list-view.c:1341
+#: ../libempathy-gtk/empathy-contact-list-view.c:1401
msgid "Sorry, I don't want you in my contact list anymore."
msgstr "Lo siento, no te quiero en mi lista de contactos."
@@ -761,7 +762,6 @@ msgid "_Chat"
msgstr "_Chat"
#: ../libempathy-gtk/empathy-contact-menu.c:161
-#| msgid "_Call"
msgctxt "menu item"
msgid "_Call"
msgstr "_Llamar"
@@ -792,24 +792,24 @@ msgstr "Invitando a esta sala"
msgid "_Invite to chatroom"
msgstr "_Invitar a la sala"
-#: ../libempathy-gtk/empathy-contact-selector.c:112
+#: ../libempathy-gtk/empathy-contact-selector.c:129
msgid "Select a contact"
msgstr "Seleccionar un contacto"
-#: ../libempathy-gtk/empathy-contact-widget.c:353
+#: ../libempathy-gtk/empathy-contact-widget.c:413
msgid "Save Avatar"
msgstr "Guardar avatar"
-#: ../libempathy-gtk/empathy-contact-widget.c:409
+#: ../libempathy-gtk/empathy-contact-widget.c:469
msgid "Unable to save avatar"
msgstr "No se pudo guardar el avatar"
-#: ../libempathy-gtk/empathy-contact-widget.c:904
+#: ../libempathy-gtk/empathy-contact-widget.c:952
msgid "Select"
msgstr "Seleccionar"
-#: ../libempathy-gtk/empathy-contact-widget.c:913
-#: ../src/empathy-main-window.c:882
+#: ../libempathy-gtk/empathy-contact-widget.c:961
+#: ../src/empathy-main-window.c:879
msgid "Group"
msgstr "Grupo"
@@ -952,66 +952,60 @@ msgstr "Conversación nueva"
#. COL_DISPLAY_MARKUP
#. COL_STATUS_CUSTOMISABLE
#. COL_TYPE
-#: ../libempathy-gtk/empathy-presence-chooser.c:162
+#: ../libempathy-gtk/empathy-presence-chooser.c:169
msgid "Custom Message..."
msgstr "Mensaje personalizado…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:217
+#: ../libempathy-gtk/empathy-presence-chooser.c:225
msgid "Edit Custom Messages..."
msgstr "Editar mensajes personalizados…"
-#: ../libempathy-gtk/empathy-presence-chooser.c:316
+#: ../libempathy-gtk/empathy-presence-chooser.c:324
msgid "Click to remove this status as a favorite"
msgstr "Pulse pare eliminar este estado de los favoritos"
-#: ../libempathy-gtk/empathy-presence-chooser.c:325
+#: ../libempathy-gtk/empathy-presence-chooser.c:333
msgid "Click to make this status a favorite"
msgstr "Pulse para hacer este estado uno favorito"
-#: ../libempathy-gtk/empathy-presence-chooser.c:359
+#: ../libempathy-gtk/empathy-presence-chooser.c:367
msgid "Set status"
msgstr "Establecer estado"
-#: ../libempathy-gtk/empathy-presence-chooser.c:766
+#: ../libempathy-gtk/empathy-presence-chooser.c:776
msgid "Set your presence and current status"
msgstr "Establecer su presencia y estado actual"
#. Custom messages
-#: ../libempathy-gtk/empathy-presence-chooser.c:987
+#: ../libempathy-gtk/empathy-presence-chooser.c:1011
msgid "Custom messages..."
msgstr "Mensajes personalizados…"
-#: ../libempathy-gtk/empathy-presence-chooser.ui.h:1
-msgid "Custom message"
-msgstr "Mensaje personalizado…"
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:360
+msgid "Enter Custom Message"
+msgstr "Introducir mensaje personalizado"
-#: ../libempathy-gtk/empathy-presence-chooser.ui.h:2
-msgid "Message:"
-msgstr "Mensaje:"
+#: ../libempathy-gtk/empathy-status-preset-dialog.c:482
+msgid "Edit Custom Messages"
+msgstr "Editar mensajes personalizados"
-#: ../libempathy-gtk/empathy-presence-chooser.ui.h:3
-msgid "Save message"
-msgstr "Guardar mensaje"
-
-#: ../libempathy-gtk/empathy-presence-chooser.ui.h:4
-msgid "Status:"
-msgstr "Estado:"
-
-#: ../libempathy-gtk/empathy-spell-dialog.c:81
-msgid "Word"
-msgstr "Palabra"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1
+msgid "Add _New Preset"
+msgstr ""
-#: ../libempathy-gtk/empathy-spell-dialog.c:255
-msgid "Suggestions for the word"
-msgstr "Sugerencias para la palabra"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2
+#, fuzzy
+#| msgid "Save message"
+msgid "Saved Presets"
+msgstr "Guardar mensaje"
-#: ../libempathy-gtk/empathy-spell-dialog.ui.h:1
-msgid "Spell Checker"
-msgstr "Corrector ortográfico"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3
+msgid "gtk-add"
+msgstr "gtk-add"
-#: ../libempathy-gtk/empathy-spell-dialog.ui.h:2
-msgid "Suggestions for the word:"
-msgstr "Sugerencias para la palabra:"
+#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4
+msgid "gtk-remove"
+msgstr "gtk-remove"
#: ../libempathy-gtk/empathy-theme-manager.c:60
msgid "Classic"
@@ -1263,7 +1257,7 @@ msgid "Megaphone"
msgstr "Megáfono"
#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
-#: ../megaphone/src/megaphone-applet.c:417
+#: ../megaphone/src/megaphone-applet.c:527
msgid "Talk!"
msgstr "Hablar"
@@ -1281,11 +1275,11 @@ msgstr "_Información"
msgid "_Preferences"
msgstr "_Preferencias"
-#: ../megaphone/src/megaphone-applet.c:255
+#: ../megaphone/src/megaphone-applet.c:168
msgid "Please configure a contact."
msgstr "Configure un contacto."
-#: ../megaphone/src/megaphone-applet.c:348
+#: ../megaphone/src/megaphone-applet.c:258
msgid "Select contact..."
msgstr "Seleccione un contacto…"
@@ -1298,19 +1292,19 @@ msgstr "Presencia"
msgid "Set your own presence"
msgstr "Establezca su propia presencia"
-#: ../src/empathy.c:430
+#: ../src/empathy.c:437
msgid "Don't connect on startup"
msgstr "No conectarse automáticamente al inicio"
-#: ../src/empathy.c:434
+#: ../src/empathy.c:441
msgid "Don't show the contact list on startup"
msgstr "No mostrar la lista de contactos al inicio"
-#: ../src/empathy.c:438
+#: ../src/empathy.c:445
msgid "Show the accounts dialog"
msgstr "Mostrar el diálogo de las cuentas"
-#: ../src/empathy.c:450
+#: ../src/empathy.c:457
msgid "- Empathy Instant Messenger"
msgstr "- Mensajería instantánea Empathy"
@@ -1365,12 +1359,12 @@ msgid "Accounts"
msgstr "Cuentas"
#. To translator: %s is the protocol name
-#: ../src/empathy-accounts-dialog.c:833
+#: ../src/empathy-accounts-dialog.c:834
#, c-format
msgid "New %s account"
msgstr "Cuenta de %s nueva"
-#: ../src/empathy-accounts-dialog.c:943
+#: ../src/empathy-accounts-dialog.c:944
#, c-format
msgid ""
"You are about to remove your %s account!\n"
@@ -1379,7 +1373,7 @@ msgstr ""
"Va a eliminar su cuenta %s\n"
"¿Seguro que quiere continuar?"
-#: ../src/empathy-accounts-dialog.c:949
+#: ../src/empathy-accounts-dialog.c:950
msgid ""
"Any associated conversations and chat rooms will NOT be removed if you "
"decide to proceed.\n"
@@ -1429,48 +1423,47 @@ msgid "Type:"
msgstr "Tipo:"
#: ../src/empathy-accounts-dialog.ui.h:10
-#| msgid "_Add Contact..."
msgid "_Add..."
msgstr "_Añadir…"
-#: ../src/empathy-call-window.c:319
+#: ../src/empathy-call-window.c:320
msgid "Contrast"
msgstr "Contraste"
-#: ../src/empathy-call-window.c:322
+#: ../src/empathy-call-window.c:323
msgid "Brightness"
msgstr "Brillo"
-#: ../src/empathy-call-window.c:325
+#: ../src/empathy-call-window.c:326
msgid "Gamma"
msgstr "Gamma"
-#: ../src/empathy-call-window.c:429
+#: ../src/empathy-call-window.c:430
msgid "Volume"
msgstr "Volumen"
-#: ../src/empathy-call-window.c:532
+#: ../src/empathy-call-window.c:533
msgid "_Sidebar"
msgstr "Barra _lateral"
-#: ../src/empathy-call-window.c:550
+#: ../src/empathy-call-window.c:551
msgid "Dialpad"
msgstr "Teclado de llamada"
-#: ../src/empathy-call-window.c:556
+#: ../src/empathy-call-window.c:557
msgid "Audio input"
msgstr "Entrada de sonido"
-#: ../src/empathy-call-window.c:560
+#: ../src/empathy-call-window.c:561
msgid "Video input"
msgstr "Entrada de vídeo"
-#: ../src/empathy-call-window.c:573
+#: ../src/empathy-call-window.c:574
msgid "Connecting..."
msgstr "Conectando…"
#. Translators: number of minutes:seconds the caller has been connected
-#: ../src/empathy-call-window.c:837
+#: ../src/empathy-call-window.c:839
#, c-format
msgid "Connected — %d:%02dm"
msgstr "Conectado — %d:%02dm"
@@ -1550,59 +1543,59 @@ msgstr "_Rechazar"
msgid "_Answer"
msgstr "Re_spuesta"
-#: ../src/empathy-event-manager.c:516
+#: ../src/empathy-event-manager.c:507
#, c-format
msgid "Incoming call from %s"
msgstr "Llamada entrante de %s"
-#: ../src/empathy-event-manager.c:564
+#: ../src/empathy-event-manager.c:547
#, c-format
msgid "%s is offering you an invitation"
msgstr "%s le está ofreciendo una invitación"
-#: ../src/empathy-event-manager.c:570
+#: ../src/empathy-event-manager.c:553
msgid "An external application will be started to handle it."
msgstr "Se iniciará una aplicación externa para manejarla."
-#: ../src/empathy-event-manager.c:575
+#: ../src/empathy-event-manager.c:558
msgid "You don't have the needed external application to handle it."
msgstr "No tiene la aplicación externa necesaria para manejarla."
-#: ../src/empathy-event-manager.c:698
+#: ../src/empathy-event-manager.c:685
msgid "Room invitation"
msgstr "Invitación a una sala"
-#: ../src/empathy-event-manager.c:701
+#: ../src/empathy-event-manager.c:688
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s"
#. Decline button
-#: ../src/empathy-event-manager.c:709 ../src/empathy-ft-manager.c:1031
+#: ../src/empathy-event-manager.c:696 ../src/empathy-ft-manager.c:1037
msgid "_Decline"
msgstr "_Rechazar"
-#: ../src/empathy-event-manager.c:714
+#: ../src/empathy-event-manager.c:701
#: ../src/empathy-new-chatroom-dialog.ui.h:6
msgid "_Join"
msgstr "_Unirse"
-#: ../src/empathy-event-manager.c:744
+#: ../src/empathy-event-manager.c:740
#, c-format
msgid "%s invited you to join %s"
msgstr "%s le ha invitado a unirse a %s"
-#: ../src/empathy-event-manager.c:867
+#: ../src/empathy-event-manager.c:848
#, c-format
msgid "Incoming file transfer from %s"
msgstr "Transferencia de archivo entrante de %s"
-#: ../src/empathy-event-manager.c:961
+#: ../src/empathy-event-manager.c:923
#, c-format
msgid "Subscription requested by %s"
msgstr "Petición de suscripción de %s"
-#: ../src/empathy-event-manager.c:965
+#: ../src/empathy-event-manager.c:927
#, c-format
msgid ""
"\n"
@@ -1652,109 +1645,115 @@ msgid "Unknown reason"
msgstr "Razón desconocida"
#. translators: first %s is filename, second %s is the contact name
-#: ../src/empathy-ft-manager.c:226
+#: ../src/empathy-ft-manager.c:228
#, c-format
msgid "Receiving \"%s\" from %s"
msgstr "Recibiendo «%s» de %s"
#. translators: first %s is filename, second %s is the contact name
-#: ../src/empathy-ft-manager.c:229
+#: ../src/empathy-ft-manager.c:231
#, c-format
msgid "Sending \"%s\" to %s"
msgstr "Enviando «%s» a %s"
-#: ../src/empathy-ft-manager.c:239
+#: ../src/empathy-ft-manager.c:242
msgctxt "file size"
msgid "Unknown"
msgstr "Desconocido"
#. translators: first %s is the transferred size, second %s is
#. * the total file size
-#: ../src/empathy-ft-manager.c:247
+#: ../src/empathy-ft-manager.c:251
#, c-format
-msgid "%s of %s"
-msgstr "%s de %s"
+#| msgid "%s of %s"
+msgid "%s of %s at %s/s"
+msgstr "%s de %s en %s/s"
-#: ../src/empathy-ft-manager.c:254
+#: ../src/empathy-ft-manager.c:259
msgid "Waiting for the other participant's response"
msgstr "Esperando la respuesta del otro participante"
-#: ../src/empathy-ft-manager.c:264
+#: ../src/empathy-ft-manager.c:269
#, c-format
msgid "\"%s\" received from %s"
msgstr "«%s» recibido de %s"
-#: ../src/empathy-ft-manager.c:270
+#: ../src/empathy-ft-manager.c:275
#, c-format
msgid "\"%s\" sent to %s"
msgstr "«%s» enviado a %s"
-#: ../src/empathy-ft-manager.c:273
+#: ../src/empathy-ft-manager.c:278
msgid "File transfer completed"
msgstr "Transferencia de archivo completada"
-#: ../src/empathy-ft-manager.c:282
+#: ../src/empathy-ft-manager.c:287
#, c-format
msgid "\"%s\" receiving from %s"
msgstr "«%s» recibiendo de %s"
-#: ../src/empathy-ft-manager.c:288
+#: ../src/empathy-ft-manager.c:293
#, c-format
msgid "\"%s\" sending to %s"
msgstr "«%s» enviando a %s"
-#: ../src/empathy-ft-manager.c:291
+#: ../src/empathy-ft-manager.c:296
#, c-format
msgid "File transfer canceled: %s"
msgstr "Transferencia de archivo cancelada: %s"
-#: ../src/empathy-ft-manager.c:306
+#: ../src/empathy-ft-manager.c:310
+msgctxt "remaining time"
+msgid "Stalled"
+msgstr "Parado"
+
+#: ../src/empathy-ft-manager.c:313
msgctxt "remaining time"
msgid "Unknown"
msgstr "Desconocido"
-#: ../src/empathy-ft-manager.c:366
+#: ../src/empathy-ft-manager.c:372
msgctxt "file transfer percent"
msgid "Unknown"
msgstr "Desconocido"
-#: ../src/empathy-ft-manager.c:662
+#: ../src/empathy-ft-manager.c:668
msgid "%"
msgstr "%"
-#: ../src/empathy-ft-manager.c:674
+#: ../src/empathy-ft-manager.c:680
msgid "File"
msgstr "Archivo"
-#: ../src/empathy-ft-manager.c:696
+#: ../src/empathy-ft-manager.c:702
msgid "Remaining"
msgstr "Restantes"
-#: ../src/empathy-ft-manager.c:894
+#: ../src/empathy-ft-manager.c:900
msgid "Cannot save file to this location"
msgstr "No se puede guardar el archivo en esta ubicación"
-#: ../src/empathy-ft-manager.c:940
+#: ../src/empathy-ft-manager.c:946
msgid "Save file as..."
msgstr "Guardar archivo como…"
-#: ../src/empathy-ft-manager.c:1010
+#: ../src/empathy-ft-manager.c:1016
msgid "unknown size"
msgstr "tamaño desconocido"
-#: ../src/empathy-ft-manager.c:1016
+#: ../src/empathy-ft-manager.c:1022
#, c-format
msgid "%s would like to send you a file"
msgstr "%s quiere enviarle un archivo"
#. Translators: the first %s is the file name, the second %s is the file size
-#: ../src/empathy-ft-manager.c:1022
+#: ../src/empathy-ft-manager.c:1028
#, c-format
msgid "Do you want to accept the file \"%s\" (%s)?"
msgstr "¿Quiere aceptar el archivo «%s» (%s)?"
#. Accept button
-#: ../src/empathy-ft-manager.c:1040
+#: ../src/empathy-ft-manager.c:1046
msgid "_Accept"
msgstr "_Aceptar"
@@ -1793,71 +1792,71 @@ msgstr ""
msgid "Import Accounts"
msgstr "Importar cuentas"
-#: ../src/empathy-main-window.c:393
+#: ../src/empathy-main-window.c:392
msgid "_Edit account"
msgstr "_Editar cuenta"
-#: ../src/empathy-main-window.c:496
+#: ../src/empathy-main-window.c:495
msgid "No error specified"
msgstr "No se especificó el error"
-#: ../src/empathy-main-window.c:499
+#: ../src/empathy-main-window.c:498
msgid "Network error"
msgstr "Error de red"
-#: ../src/empathy-main-window.c:502
+#: ../src/empathy-main-window.c:501
msgid "Authentication failed"
msgstr "Falló la autenticación"
-#: ../src/empathy-main-window.c:505
+#: ../src/empathy-main-window.c:504
msgid "Encryption error"
msgstr "Error de cifrado"
-#: ../src/empathy-main-window.c:508
+#: ../src/empathy-main-window.c:507
msgid "Name in use"
msgstr "Nombre en uso"
-#: ../src/empathy-main-window.c:511
+#: ../src/empathy-main-window.c:510
msgid "Certificate not provided"
msgstr "No se proporcionó el certificado"
-#: ../src/empathy-main-window.c:514
+#: ../src/empathy-main-window.c:513
msgid "Certificate untrusted"
msgstr "Certificado sin confianza"
-#: ../src/empathy-main-window.c:517
+#: ../src/empathy-main-window.c:516
msgid "Certificate expired"
msgstr "El certificado ha expirado"
-#: ../src/empathy-main-window.c:520
+#: ../src/empathy-main-window.c:519
msgid "Certificate not activated"
msgstr "El certificado no está activado"
-#: ../src/empathy-main-window.c:523
+#: ../src/empathy-main-window.c:522
msgid "Certificate hostname mismatch"
msgstr "El nombre del equipo del certificado no coincide"
-#: ../src/empathy-main-window.c:526
+#: ../src/empathy-main-window.c:525
msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide"
-#: ../src/empathy-main-window.c:529
+#: ../src/empathy-main-window.c:528
msgid "Certificate self-signed"
msgstr "Certificado firmado consigo mismo"
-#: ../src/empathy-main-window.c:532
+#: ../src/empathy-main-window.c:531
msgid "Certificate error"
msgstr "Error del certificado"
-#: ../src/empathy-main-window.c:535
+#: ../src/empathy-main-window.c:534
msgid "Unknown error"
msgstr "Error desconocido"
-#: ../src/empathy-main-window.c:865
+#: ../src/empathy-main-window.c:862
msgid "Contact"
msgstr "Contacto"
-#: ../src/empathy-main-window.c:1205
+#: ../src/empathy-main-window.c:1178
msgid "Show and edit accounts"
msgstr "Mostrar y editar cuentas"
@@ -1921,7 +1920,7 @@ msgstr "Sala de chat"
msgid "Members"
msgstr "Miembros"
-#: ../src/empathy-new-chatroom-dialog.c:447
+#: ../src/empathy-new-chatroom-dialog.c:449
#, c-format
msgctxt ""
"Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no "
@@ -1937,13 +1936,13 @@ msgstr ""
"Contraseña necesaria: %s\n"
"Miembros: %s"
-#: ../src/empathy-new-chatroom-dialog.c:449
-#: ../src/empathy-new-chatroom-dialog.c:450
+#: ../src/empathy-new-chatroom-dialog.c:451
+#: ../src/empathy-new-chatroom-dialog.c:452
msgid "Yes"
msgstr "Sí"
-#: ../src/empathy-new-chatroom-dialog.c:449
-#: ../src/empathy-new-chatroom-dialog.c:450
+#: ../src/empathy-new-chatroom-dialog.c:451
+#: ../src/empathy-new-chatroom-dialog.c:452
msgid "No"
msgstr "No"
@@ -2142,6 +2141,33 @@ msgstr ""
"Se le ha ofrecido una invitación para el servicio %s pero no tiene la "
"aplicación necesaria para manejarla"
+#~ msgid "_Check Word Spelling..."
+#~ msgstr "_Comprobar ortografía…"
+
+#~ msgid "Contact Information"
+#~ msgstr "Información del contacto"
+
+#~ msgid "Custom message"
+#~ msgstr "Mensaje personalizado…"
+
+#~ msgid "Message:"
+#~ msgstr "Mensaje:"
+
+#~ msgid "Status:"
+#~ msgstr "Estado:"
+
+#~ msgid "Word"
+#~ msgstr "Palabra"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "Sugerencias para la palabra"
+
+#~ msgid "Spell Checker"
+#~ msgstr "Corrector ortográfico"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "Sugerencias para la palabra:"
+
#~ msgid "Forget password and clear the entry."
#~ msgstr "Olvidar la contraseña y limpiar la entrada."
@@ -2323,15 +2349,9 @@ msgstr ""
#~ "Indica si se debe mostrar una ventana emergente cuando un contacto vuelva "
#~ "a estar disponible."
-#~ msgid "gtk-clear"
-#~ msgstr "gtk-clear"
-
#~ msgid "gtk-cancel"
#~ msgstr "gtk-cancel"
-#~ msgid "gtk-ok"
-#~ msgstr "gtk-ok"
-
#~ msgid "Invitation Error"
#~ msgstr "Error en la invitación"
diff --git a/python/pyempathy/Makefile.am b/python/pyempathy/Makefile.am
index 8ec61ff8e..ef6faa0a7 100644
--- a/python/pyempathy/Makefile.am
+++ b/python/pyempathy/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/tools/shave.mk
+
PYDEFS=`pkg-config --variable=defsdir pygtk-2.0`
AM_CPPFLAGS = \
@@ -31,7 +33,7 @@ empathy_la_LDFLAGS = \
-module -avoid-version
pyempathy.c: pyempathy.override pyempathy.defs
- $(PYGOBJECTCODEGEN) \
+ $(QUIET_GEN)$(PYGOBJECTCODEGEN) \
--prefix empathy \
--register $(PYDEFS)/gdk-types.defs \
--register $(PYDEFS)/gtk-types.defs \
diff --git a/python/pyempathy/pyempathy.defs b/python/pyempathy/pyempathy.defs
index 3e9fd624c..6f8f0f65d 100644
--- a/python/pyempathy/pyempathy.defs
+++ b/python/pyempathy/pyempathy.defs
@@ -474,6 +474,30 @@
(return-type "EmpathyTpChat*")
)
+(define-method set_tp_chat
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_set_tp_chat")
+ (return-type "none")
+ (parameters
+ '("EmpathyTpChat*" "tp_chat")
+ )
+)
+
+(define-method is_favorite
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_is_favorite")
+ (return-type "gboolean")
+)
+
+(define-method set_favorite
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_set_favorite")
+ (return-type "none")
+ (parameters
+ '("gboolean" "favorite")
+ )
+)
+
;; From empathy-chatroom-manager.h
@@ -642,6 +666,17 @@
)
)
+(define-function contact_new_for_log
+ (c-name "empathy_contact_new_for_log")
+ (return-type "EmpathyContact*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "id")
+ '("const-gchar*" "name")
+ '("gboolean" "is_user")
+ )
+)
+
(define-method get_tp_contact
(of-object "EmpathyContact")
(c-name "empathy_contact_get_tp_contact")
@@ -2187,7 +2222,7 @@
(parameters
'("guint" "n_ids")
'("const-gchar*-const*" "ids")
- '("EmpathyTpContactFactoryGotContactsCb" "callback")
+ '("EmpathyTpContactFactoryContactsByIdCb" "callback")
'("gpointer" "user_data")
'("GDestroyNotify" "destroy")
'("GObject*" "weak_object")
@@ -2201,7 +2236,33 @@
(parameters
'("guint" "n_handles")
'("const-TpHandle*" "handles")
- '("EmpathyTpContactFactoryGotContactsCb" "callback")
+ '("EmpathyTpContactFactoryContactsByHandleCb" "callback")
+ '("gpointer" "user_data")
+ '("GDestroyNotify" "destroy")
+ '("GObject*" "weak_object")
+ )
+)
+
+(define-method get_from_id
+ (of-object "EmpathyTpContactFactory")
+ (c-name "empathy_tp_contact_factory_get_from_id")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "id")
+ '("EmpathyTpContactFactoryContactCb" "callback")
+ '("gpointer" "user_data")
+ '("GDestroyNotify" "destroy")
+ '("GObject*" "weak_object")
+ )
+)
+
+(define-method get_from_handle
+ (of-object "EmpathyTpContactFactory")
+ (c-name "empathy_tp_contact_factory_get_from_handle")
+ (return-type "none")
+ (parameters
+ '("TpHandle" "handle")
+ '("EmpathyTpContactFactoryContactCb" "callback")
'("gpointer" "user_data")
'("GDestroyNotify" "destroy")
'("GObject*" "weak_object")
@@ -2306,12 +2367,6 @@
(return-type "none")
)
-(define-method close
- (of-object "EmpathyTpFile")
- (c-name "empathy_tp_file_close")
- (return-type "none")
-)
-
(define-method offer
(of-object "EmpathyTpFile")
(c-name "empathy_tp_file_offer")
@@ -2367,6 +2422,12 @@
(return-type "gint")
)
+(define-method get_speed
+ (of-object "EmpathyTpFile")
+ (c-name "empathy_tp_file_get_speed")
+ (return-type "gdouble")
+)
+
(define-method get_content_type
(of-object "EmpathyTpFile")
(c-name "empathy_tp_file_get_content_type")
diff --git a/python/pyempathygtk/Makefile.am b/python/pyempathygtk/Makefile.am
index 84204e764..3f4c6d52d 100644
--- a/python/pyempathygtk/Makefile.am
+++ b/python/pyempathygtk/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/tools/shave.mk
+
PYDEFS=`pkg-config --variable=defsdir pygtk-2.0`
AM_CPPFLAGS = \
@@ -31,7 +33,7 @@ empathygtk_la_LDFLAGS = \
-module -avoid-version
pyempathygtk.c: pyempathygtk.override pyempathygtk.defs
- $(PYGOBJECTCODEGEN) \
+ $(QUIET_GEN)$(PYGOBJECTCODEGEN) \
--prefix empathy \
--register $(PYDEFS)/gdk-types.defs \
--register $(PYDEFS)/gtk-types.defs \
diff --git a/python/pyempathygtk/pyempathygtk.defs b/python/pyempathygtk/pyempathygtk.defs
index df829a031..816261d39 100644
--- a/python/pyempathygtk/pyempathygtk.defs
+++ b/python/pyempathygtk/pyempathygtk.defs
@@ -278,9 +278,9 @@
(return-type "GtkWidget*")
)
-(define-method get_account
+(define-method dup_account
(of-object "EmpathyAccountChooser")
- (c-name "empathy_account_chooser_get_account")
+ (c-name "empathy_account_chooser_dup_account")
(return-type "McAccount*")
)
@@ -1145,9 +1145,9 @@
)
)
-(define-method get_selected
+(define-method dup_selected
(of-object "EmpathyContactListView")
- (c-name "empathy_contact_list_view_get_selected")
+ (c-name "empathy_contact_list_view_dup_selected")
(return-type "EmpathyContact*")
)
@@ -1546,8 +1546,8 @@
(return-type "GtkWidget*")
)
-(define-function profile_chooser_get_selected
- (c-name "empathy_profile_chooser_get_selected")
+(define-function profile_chooser_dup_selected
+ (c-name "empathy_profile_chooser_dup_selected")
(return-type "McProfile*")
(parameters
'("GtkWidget*" "widget")
diff --git a/shave-libtool.in b/shave-libtool.in
new file mode 100644
index 000000000..1f3a720c1
--- /dev/null
+++ b/shave-libtool.in
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+# we need sed
+SED=@SED@
+if test -z "$SED" ; then
+SED=sed
+fi
+
+lt_unmangle ()
+{
+ last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
+}
+
+# the real libtool to use
+LIBTOOL="$1"
+shift
+
+# if 1, don't print anything, the underlaying wrapper will do it
+pass_though=0
+
+# scan the arguments, keep the right ones for libtool, and discover the mode
+preserved_args=
+while test "$#" -gt 0; do
+ opt="$1"
+ shift
+
+ case $opt in
+ --mode=*)
+ mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
+ preserved_args="$preserved_args $opt"
+ ;;
+ -o)
+ lt_output="$1"
+ preserved_args="$preserved_args $opt"
+ ;;
+ *)
+ preserved_args="$preserved_args $opt"
+ ;;
+ esac
+done
+
+case "$mode" in
+compile)
+ # shave will be called and print the actual CC/CXX/LINK line
+ preserved_args="$preserved_args --shave-mode=$mode"
+ pass_though=1
+ ;;
+link)
+ preserved_args="$preserved_args --shave-mode=$mode"
+ Q=" LINK "
+ ;;
+*)
+ # let's u
+ # echo "*** libtool: Unimplemented mode: $mode, fill a bug report"
+ ;;
+esac
+
+lt_unmangle "$lt_output"
+output=$last_result
+
+if test -z $V; then
+ if test $pass_though -eq 0; then
+ echo "$Q$output"
+ fi
+ $LIBTOOL --silent $preserved_args
+else
+ echo $LIBTOOL $preserved_args
+ $LIBTOOL $preserved_args
+fi
diff --git a/shave.in b/shave.in
new file mode 100644
index 000000000..5c16f27ae
--- /dev/null
+++ b/shave.in
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+# we need sed
+SED=@SED@
+if test -z "$SED" ; then
+SED=sed
+fi
+
+lt_unmangle ()
+{
+ last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
+}
+
+# the tool to wrap (cc, cxx, ar, ranlib, ..)
+tool="$1"
+shift
+
+# the reel tool (to call)
+REEL_TOOL="$1"
+shift
+
+pass_through=0
+preserved_args=
+while test "$#" -gt 0; do
+ opt="$1"
+ shift
+
+ case $opt in
+ --shave-mode=*)
+ mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
+ ;;
+ -o)
+ lt_output="$1"
+ preserved_args="$preserved_args $opt"
+ ;;
+ *)
+ preserved_args="$preserved_args $opt"
+ ;;
+ esac
+done
+
+# mode=link is handled in the libtool wrapper
+case "$mode,$tool" in
+link,*)
+ pass_through=1
+ ;;
+*,cxx)
+ Q=" CXX "
+ ;;
+*,cc)
+ Q=" CC "
+ ;;
+*,fc)
+ Q=" FC "
+ ;;
+*,f77)
+ Q=" F77 "
+ ;;
+*,objc)
+ Q=" OBJC "
+ ;;
+*,*)
+ # should not happen
+ Q=" CC "
+ ;;
+esac
+
+lt_unmangle "$lt_output"
+output=$last_result
+
+if test -z $V; then
+ if test $pass_through -eq 0; then
+ echo "$Q$output"
+ fi
+ $REEL_TOOL $preserved_args
+else
+ echo $REEL_TOOL $preserved_args
+ $REEL_TOOL $preserved_args
+fi
diff --git a/src/Makefile.am b/src/Makefile.am
index 76a5aa77d..f24ef3e95 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/tools/shave.mk
+
AM_CPPFLAGS = \
-I$(top_srcdir) \
$(EMPATHY_CFLAGS) \
@@ -63,7 +65,7 @@ dist_man_MANS = \
# rules for making the glib enum objects
%-enumtypes.h: %.h Makefile.in
- glib-mkenums \
+ $(QUIET_GEN)glib-mkenums \
--fhead "#ifndef __$(shell echo $* | tr [:lower:]- [:upper:]_)_ENUM_TYPES_H__\n#define __$(shell echo $* | tr [:lower:]- [:upper:]_)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
--fprod "/* enumerations from \"@filename@\" */\n" \
--vhead "GType @enum_name@_get_type (void);\n#define $(shell echo $* | tr [:lower:]- [:upper:]_ | sed 's/_.*//')_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
@@ -71,7 +73,7 @@ dist_man_MANS = \
$< > $@
%-enumtypes.c: %.h Makefile.in
- glib-mkenums \
+ $(QUIET_GEN)glib-mkenums \
--fhead "#include <$*.h>\n#include <$*-enumtypes.h>" \
--fprod "\n/* enumerations from \"@filename@\" */" \
--vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \
diff --git a/src/empathy-ft-manager.c b/src/empathy-ft-manager.c
index 98e58d4f3..87531f0fe 100644
--- a/src/empathy-ft-manager.c
+++ b/src/empathy-ft-manager.c
@@ -200,6 +200,7 @@ ft_manager_update_ft_row (EmpathyFTManager *ft_manager,
TpFileTransferState state;
TpFileTransferStateChangeReason reason;
gboolean incoming;
+ gdouble speed;
row_ref = ft_manager_get_row_from_tp_file (ft_manager, tp_file);
g_return_if_fail (row_ref != NULL);
@@ -210,6 +211,7 @@ ft_manager_update_ft_row (EmpathyFTManager *ft_manager,
total_size = empathy_tp_file_get_size (tp_file);
state = empathy_tp_file_get_state (tp_file, &reason);
incoming = empathy_tp_file_is_incoming (tp_file);
+ speed = empathy_tp_file_get_speed (tp_file);
switch (state)
{
@@ -234,6 +236,7 @@ ft_manager_update_ft_row (EmpathyFTManager *ft_manager,
{
gchar *total_size_str;
gchar *transferred_bytes_str;
+ gchar *speed_str;
if (total_size == EMPATHY_TP_FILE_UNKNOWN_SIZE)
total_size_str = g_strdup (C_("file size", "Unknown"));
@@ -241,13 +244,15 @@ ft_manager_update_ft_row (EmpathyFTManager *ft_manager,
total_size_str = g_format_size_for_display (total_size);
transferred_bytes_str = g_format_size_for_display (transferred_bytes);
+ speed_str = g_format_size_for_display (speed);
/* translators: first %s is the transferred size, second %s is
* the total file size */
- second_line = g_strdup_printf (_("%s of %s"), transferred_bytes_str,
- total_size_str);
+ second_line = g_strdup_printf (_("%s of %s at %s/s"),
+ transferred_bytes_str, total_size_str, speed_str);
g_free (transferred_bytes_str);
g_free (total_size_str);
+ g_free (speed_str);
}
else
@@ -301,8 +306,10 @@ ft_manager_update_ft_row (EmpathyFTManager *ft_manager,
if (remaining < 0)
{
- if (state != TP_FILE_TRANSFER_STATE_COMPLETED &&
- state != TP_FILE_TRANSFER_STATE_CANCELLED)
+ if (state == TP_FILE_TRANSFER_STATE_OPEN)
+ remaining_str = g_strdup (C_("remaining time", "Stalled"));
+ else if (state != TP_FILE_TRANSFER_STATE_COMPLETED &&
+ state != TP_FILE_TRANSFER_STATE_CANCELLED)
remaining_str = g_strdup (C_("remaining time", "Unknown"));
}
else
@@ -334,9 +341,8 @@ ft_manager_update_ft_row (EmpathyFTManager *ft_manager,
}
static void
-ft_manager_transferred_bytes_changed_cb (EmpathyTpFile *tp_file,
- GParamSpec *pspec,
- EmpathyFTManager *ft_manager)
+ft_manager_refresh_cb (EmpathyTpFile *tp_file,
+ EmpathyFTManager *ft_manager)
{
ft_manager_update_ft_row (ft_manager, tp_file);
}
@@ -441,7 +447,7 @@ ft_manager_remove_file_from_model (EmpathyFTManager *ft_manager,
if (update_selection)
gtk_tree_selection_select_iter (selection, &iter);
- empathy_tp_file_close (tp_file);
+ empathy_tp_file_cancel (tp_file);
}
static gboolean
@@ -840,8 +846,8 @@ ft_manager_add_tp_file_to_list (EmpathyFTManager *ft_manager,
ft_manager_update_ft_row (ft_manager, tp_file);
g_signal_connect (tp_file, "notify::state",
G_CALLBACK (ft_manager_state_changed_cb), ft_manager);
- g_signal_connect (tp_file, "notify::transferred-bytes",
- G_CALLBACK (ft_manager_transferred_bytes_changed_cb), ft_manager);
+ g_signal_connect (tp_file, "refresh",
+ G_CALLBACK (ft_manager_refresh_cb), ft_manager);
gtk_window_present (GTK_WINDOW (ft_manager->priv->window));
}
diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c
index b9993a8f5..5cbf877e5 100644
--- a/src/empathy-main-window.c
+++ b/src/empathy-main-window.c
@@ -58,6 +58,7 @@
#include "empathy-new-chatroom-dialog.h"
#include "empathy-chatrooms-window.h"
#include "empathy-event-manager.h"
+#include "empathy-ft-manager.h"
#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
#include <libempathy/empathy-debug.h>
@@ -683,6 +684,20 @@ main_window_chat_add_contact_cb (GtkAction *action,
}
static void
+main_window_chat_show_ft_manager (GtkAction *action,
+ EmpathyMainWindow *window)
+{
+ EmpathyFTManager *manager;
+ GtkWidget *dialog;
+
+ manager = empathy_ft_manager_dup_singleton ();
+ dialog = empathy_ft_manager_get_dialog (manager);
+
+ gtk_window_present (GTK_WINDOW (dialog));
+ g_object_unref (manager);
+}
+
+static void
main_window_chat_show_offline_cb (GtkToggleAction *action,
EmpathyMainWindow *window)
{
@@ -1122,6 +1137,7 @@ empathy_main_window_show (void)
"room_join_favorites", "activate", main_window_room_join_favorites_cb,
"room_manage_favorites", "activate", main_window_room_manage_favorites_cb,
"chat_add_contact", "activate", main_window_chat_add_contact_cb,
+ "chat_show_ft_manager", "activate", main_window_chat_show_ft_manager,
"chat_show_offline", "toggled", main_window_chat_show_offline_cb,
"edit", "activate", main_window_edit_cb,
"edit_accounts", "activate", main_window_edit_accounts_cb,
diff --git a/src/empathy-main-window.ui b/src/empathy-main-window.ui
index cd45bc7d7..23d55f95b 100644
--- a/src/empathy-main-window.ui
+++ b/src/empathy-main-window.ui
@@ -34,6 +34,13 @@
</object>
</child>
<child>
+ <object class="GtkAction" id="chat_show_ft_manager">
+ <property name="icon-name">document-send</property>
+ <property name="name">chat_show_ft_manager</property>
+ <property name="label" translatable="yes">Show _File Transfers</property>
+ </object>
+ </child>
+ <child>
<object class="GtkToggleAction" id="chat_show_offline">
<property name="name">chat_show_offline</property>
<property name="label" translatable="yes">Show _Offline Contacts</property>
@@ -135,6 +142,8 @@
<separator/>
<menuitem action="chat_add_contact"/>
<separator/>
+ <menuitem action="chat_show_ft_manager"/>
+ <separator/>
<menuitem action="chat_show_offline"/>
<separator/>
<menuitem action="chat_quit"/>
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 817100087..05da7439b 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/tools/shave.mk
+
abs_top_builddir = @abs_top_builddir@
noinst_SCRIPTS = telepathy-glib-env
@@ -36,23 +38,23 @@ CLEANFILES = libtpcodegen.pyc libtpcodegen.pyo libglibcodegen.pyc libglibcodegen
all: $(EXTRA_DIST)
libglibcodegen.py: libtpcodegen.py
- touch $@
+ $(QUIET_GEN)touch $@
c-constants-gen.py: libglibcodegen.py
- touch $@
+ $(QUIET_GEN)touch $@
glib-client-marshaller-gen.py: libglibcodegen.py
- touch $@
+ $(QUIET_GEN)touch $@
glib-errors-enum-body-gen.py: libglibcodegen.py
- touch $@
+ $(QUIET_GEN)touch $@
glib-errors-enum-header-gen.py: libglibcodegen.py
- touch $@
+ $(QUIET_GEN)touch $@
glib-ginterface-gen.py: libglibcodegen.py
- touch $@
+ $(QUIET_GEN)touch $@
glib-gtypes-generator.py: libglibcodegen.py
- touch $@
+ $(QUIET_GEN)touch $@
glib-interfaces-gen.py: libglibcodegen.py
- touch $@
+ $(QUIET_GEN)touch $@
glib-signals-marshal-gen.py: libglibcodegen.py
- touch $@
+ $(QUIET_GEN)touch $@
TELEPATHY_SPEC_SRCDIR = $(top_srcdir)/../telepathy-spec
maintainer-update-from-telepathy-spec:
diff --git a/tools/shave.mk b/tools/shave.mk
new file mode 100644
index 000000000..53cb3bf5e
--- /dev/null
+++ b/tools/shave.mk
@@ -0,0 +1 @@
+QUIET_GEN = $(Q:@=@echo ' GEN '$@;)