diff options
29 files changed, 3085 insertions, 3041 deletions
diff --git a/docs/libempathy/libempathy.types b/docs/libempathy/libempathy.types index 688fa4d40..fed32f1e1 100644 --- a/docs/libempathy/libempathy.types +++ b/docs/libempathy/libempathy.types @@ -3,11 +3,11 @@ empathy_contact_manager_get_type empathy_reg_ex_type_get_type empathy_message_type_get_type empathy_capabilities_get_type -empathy_tp_call_status_get_type empathy_filter_get_type empathy_idle_get_type empathy_log_manager_get_type empathy_message_get_gtype +empathy_tp_call_status_get_type empathy_tp_call_get_type empathy_tp_chat_get_type empathy_tp_chatroom_get_type diff --git a/libempathy-gtk/empathy-call-window.c b/libempathy-gtk/empathy-call-window.c index a1c7bd799..5cd62d1ce 100644 --- a/libempathy-gtk/empathy-call-window.c +++ b/libempathy-gtk/empathy-call-window.c @@ -1,219 +1,533 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Copyright (C) 2007 Elliot Fairweather - * Copyright (C) 2007 Collabora Ltd. + * Copyright (C) 2007 Elliot Fairweather * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This library 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 - * Lesser General Public License for more details. + * This library 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 + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * - * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> - * Xavier Claessens <xclaesse@gmail.com> + * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> */ -#include "config.h" +#include <string.h> -#include <gtk/gtk.h> -#include <glib/gi18n.h> +#include <libtelepathy/tp-chan.h> +#include <libtelepathy/tp-helpers.h> +#include <libmissioncontrol/mc-account.h> +#include <libmissioncontrol/mc-account-monitor.h> +#include <libmissioncontrol/mission-control.h> + +#include <libempathy/empathy-contact.h> +#include <libempathy/empathy-tp-call.h> +#include <libempathy/empathy-chandler.h> #include <libempathy/empathy-debug.h> +#include <libempathy/empathy-utils.h> -#include "empathy-call-window.h" -#include "empathy-ui-utils.h" +#include <libempathy-gtk/empathy-call-window.h> +#include <libempathy-gtk/empathy-ui-utils.h> #define DEBUG_DOMAIN "CallWindow" -typedef struct { - GtkWidget *window; - GtkWidget *input_volume_scale; - GtkWidget *output_volume_scale; - GtkWidget *input_mute_togglebutton; - GtkWidget *output_mute_togglebutton; - GtkWidget *preview_video_frame; - GtkWidget *output_video_frame; - GtkWidget *preview_video_socket; - GtkWidget *output_video_socket; - GtkWidget *send_video_checkbutton; - - EmpathyTpCall *call; +typedef struct +{ + GtkWidget *window; + GtkWidget *status_label; + GtkWidget *start_call_button; + GtkWidget *end_call_button; + GtkWidget *input_volume_scale; + GtkWidget *output_volume_scale; + GtkWidget *input_mute_button; + GtkWidget *output_mute_button; + GtkWidget *preview_video_frame; + GtkWidget *output_video_frame; + GtkWidget *preview_video_socket; + GtkWidget *output_video_socket; + GtkWidget *video_button; + GtkWidget *output_video_label; + + EmpathyTpCall *call; + + GTimeVal start_time; + guint timeout_event_id; + + gboolean is_drawing; } EmpathyCallWindow; +static gboolean +call_window_update_timer (gpointer data) +{ + EmpathyCallWindow *window = data; + GTimeVal current; + gchar *str; + glong now, then; + glong time, seconds, minutes, hours; + + g_get_current_time (¤t); + + now = current.tv_sec; + then = (window->start_time).tv_sec; + + time = now - then; + + seconds = time % 60; + time /= 60; + minutes = time % 60; + time /= 60; + hours = time % 60; + + if (hours > 0) + { + str = g_strdup_printf ("Connected - %02ld : %02ld : %02ld", hours, + minutes, seconds); + } + else + { + str = g_strdup_printf ("Connected - %02ld : %02ld", minutes, seconds); + } + + gtk_label_set_text (GTK_LABEL (window->status_label), str); + + g_free (str); + + return TRUE; +} + static void -call_window_output_volume_changed_cb (GtkWidget *scale, - EmpathyCallWindow *window) +call_window_stop_timeout (EmpathyCallWindow *window) { - guint volume; + GMainContext *context; + GSource *source; + + context = g_main_context_default (); + + empathy_debug (DEBUG_DOMAIN, "Timer stopped"); - volume = (guint) gtk_range_get_value (GTK_RANGE (scale)); - empathy_tp_call_set_output_volume (window->call, volume); + if (window->timeout_event_id) + { + source = g_main_context_find_source_by_id (context, + window->timeout_event_id); + g_source_destroy (source); + window->timeout_event_id = 0; + } } +static void +call_window_set_output_video_is_drawing (EmpathyCallWindow *window, + gboolean is_drawing) +{ + GtkWidget* child; + + child = gtk_bin_get_child (GTK_BIN (window->output_video_frame)); + + empathy_debug (DEBUG_DOMAIN, + "Setting output video is drawing - %d", is_drawing); + + if (is_drawing) + { + if (!window->is_drawing) + { + if (child) + { + gtk_container_remove (GTK_CONTAINER (window->output_video_frame), + child); + } + gtk_container_add (GTK_CONTAINER (window->output_video_frame), + window->output_video_socket); + gtk_widget_show (window->output_video_socket); + empathy_tp_call_add_output_video (window->call, + gtk_socket_get_id (GTK_SOCKET (window->output_video_socket))); + window->is_drawing = is_drawing; + } + } + else + { + if (window->is_drawing) + { + empathy_tp_call_add_output_video (window->call, 0); + if (child) + { + gtk_container_remove (GTK_CONTAINER (window->output_video_frame), + child); + } + gtk_container_add (GTK_CONTAINER (window->output_video_frame), + window->output_video_label); + gtk_widget_show (window->output_video_label); + window->is_drawing = is_drawing; + } + } +} + +static gboolean +call_window_delete_event_cb (GtkWidget *widget, + GdkEvent *event, + EmpathyCallWindow *window) +{ + GtkWidget *dialog; + gint result; + guint status; + + empathy_debug (DEBUG_DOMAIN, "Delete event occurred"); + + g_object_get (G_OBJECT (window->call), "status", &status, NULL); + + if (status != EMPATHY_TP_CALL_STATUS_CLOSED) + { + dialog = gtk_message_dialog_new (GTK_WINDOW (window->window), + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, + "This call will be ended. Continue?"); + + result = gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + + switch (result) + { + case GTK_RESPONSE_YES: + call_window_stop_timeout (window); + call_window_set_output_video_is_drawing (window, FALSE); + empathy_tp_call_close_channel (window->call); + empathy_tp_call_remove_preview_video (gtk_socket_get_id (GTK_SOCKET + (window->preview_video_socket))); + return FALSE; + default: + return TRUE; + } + } + else + { + empathy_tp_call_remove_preview_video (gtk_socket_get_id (GTK_SOCKET + (window->preview_video_socket))); + return FALSE; + } +} static void -call_window_output_mute_toggled_cb (GtkWidget *button, - EmpathyCallWindow *window) +call_window_video_button_toggled_cb (GtkWidget *button, + EmpathyCallWindow *window) { - gboolean is_muted; + gboolean is_sending; + + is_sending = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); + + empathy_debug (DEBUG_DOMAIN, "Send video toggled - %d", is_sending); - is_muted = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); - empathy_tp_call_mute_output (window->call, is_muted); + empathy_tp_call_request_video_stream_direction (window->call, is_sending); } +static void +call_window_status_changed_cb (EmpathyTpCall *call, + EmpathyCallWindow *window) +{ + EmpathyContact *contact; + guint status; + guint stream_state; + EmpathyTpCallStream *audio_stream; + EmpathyTpCallStream *video_stream; + gboolean is_incoming; + gchar *title; + + g_object_get (G_OBJECT (window->call), "status", &status, NULL); + g_object_get (G_OBJECT (window->call), "audio-stream", &audio_stream, NULL); + g_object_get (G_OBJECT (window->call), "video-stream", &video_stream, NULL); + + if (video_stream->state > audio_stream->state) + { + stream_state = video_stream->state; + } + else + { + stream_state = audio_stream->state; + } + + empathy_debug (DEBUG_DOMAIN, "Status changed - status: %d, stream state: %d", + status, stream_state); + + if (window->timeout_event_id) + { + call_window_stop_timeout (window); + } + + if (status == EMPATHY_TP_CALL_STATUS_CLOSED) + { + gtk_label_set_text (GTK_LABEL (window->status_label), "Closed"); + gtk_widget_set_sensitive (window->end_call_button, FALSE); + gtk_widget_set_sensitive (window->start_call_button, FALSE); + + call_window_set_output_video_is_drawing (window, FALSE); + } + else if (stream_state == TP_MEDIA_STREAM_STATE_DISCONNECTED) + { + gtk_label_set_text (GTK_LABEL (window->status_label), "Disconnected"); + } + else if (status == EMPATHY_TP_CALL_STATUS_PENDING) + { + g_object_get (G_OBJECT (window->call), "contact", &contact, NULL); + + title = g_strdup_printf ("%s - Empathy Call", + empathy_contact_get_name (contact)); + gtk_window_set_title (GTK_WINDOW (window->window), title); + + gtk_label_set_text (GTK_LABEL (window->status_label), "Ringing"); + gtk_widget_set_sensitive (window->end_call_button, TRUE); + gtk_widget_set_sensitive (window->video_button, TRUE); + + g_object_get (G_OBJECT (window->call), "is-incoming", &is_incoming, NULL); + if (is_incoming) + { + gtk_widget_set_sensitive (window->start_call_button, TRUE); + } + else + { + g_signal_connect (GTK_OBJECT (window->video_button), "toggled", + G_CALLBACK (call_window_video_button_toggled_cb), + window); + } + } + else if (status == EMPATHY_TP_CALL_STATUS_ACCEPTED) + { + if (stream_state == TP_MEDIA_STREAM_STATE_CONNECTING) + { + gtk_label_set_text (GTK_LABEL (window->status_label), "Connecting"); + } + else if (stream_state == TP_MEDIA_STREAM_STATE_CONNECTED) + { + if ((window->start_time).tv_sec == 0) + { + g_get_current_time (&(window->start_time)); + } + window->timeout_event_id = g_timeout_add (1000, + call_window_update_timer, window); + empathy_debug (DEBUG_DOMAIN, "Timer started"); + } + } +} static void -call_window_input_mute_toggled_cb (GtkWidget *button, - EmpathyCallWindow *window) +call_window_receiving_video_cb (EmpathyTpCall *call, + gboolean receiving_video, + EmpathyCallWindow *window) { - gboolean is_muted; + empathy_debug (DEBUG_DOMAIN, "Receiving video signal received"); - is_muted = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); - empathy_tp_call_mute_input (window->call, is_muted); + call_window_set_output_video_is_drawing (window, receiving_video); } +static void +call_window_sending_video_cb (EmpathyTpCall *call, + gboolean sending_video, + EmpathyCallWindow *window) +{ + empathy_debug (DEBUG_DOMAIN, "Sending video signal received"); + + g_signal_handlers_block_by_func (window->video_button, + call_window_video_button_toggled_cb, window); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (window->video_button), + sending_video); + g_signal_handlers_unblock_by_func (window->video_button, + call_window_video_button_toggled_cb, window); +} static void -call_window_send_video_toggled_cb (GtkWidget *button, - EmpathyCallWindow *window) +call_window_socket_realized_cb (GtkWidget *widget, + EmpathyCallWindow *window) { - gboolean is_sending; + if (widget == window->preview_video_socket) + { + empathy_debug (DEBUG_DOMAIN, "Preview socket realized"); + empathy_tp_call_add_preview_video (gtk_socket_get_id (GTK_SOCKET + (window->preview_video_socket))); + } + else + { + empathy_debug (DEBUG_DOMAIN, "Output socket realized"); + } +} - is_sending = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); - empathy_tp_call_send_video (window->call, is_sending); +static void +call_window_start_call_button_clicked_cb (GtkWidget *widget, + EmpathyCallWindow *window) +{ + gboolean send_video; + gboolean is_incoming; + + empathy_debug (DEBUG_DOMAIN, "Start call clicked"); + + gtk_widget_set_sensitive (window->start_call_button, FALSE); + g_object_get (G_OBJECT (window->call), "is-incoming", &is_incoming, NULL); + if (is_incoming) + { + empathy_tp_call_accept_incoming_call (window->call); + send_video = gtk_toggle_button_get_active + (GTK_TOGGLE_BUTTON (window->video_button)); + empathy_tp_call_request_video_stream_direction (window->call, send_video); + g_signal_connect (GTK_OBJECT (window->video_button), "toggled", + G_CALLBACK (call_window_video_button_toggled_cb), window); + } } static void -call_window_capabilities_notify_cb (EmpathyContact *contact, - GParamSpec *param, - EmpathyCallWindow *window) +call_window_end_call_button_clicked_cb (GtkWidget *widget, + EmpathyCallWindow *window) { - EmpathyCapabilities capabilities; + empathy_debug (DEBUG_DOMAIN, "End call clicked"); - capabilities = empathy_contact_get_capabilities (contact); - empathy_tp_call_request_streams (window->call, - capabilities & EMPATHY_CAPABILITIES_AUDIO, - capabilities & EMPATHY_CAPABILITIES_VIDEO); + call_window_set_output_video_is_drawing (window, FALSE); + empathy_tp_call_close_channel (window->call); + gtk_widget_set_sensitive (window->end_call_button, FALSE); + gtk_widget_set_sensitive (window->start_call_button, FALSE); } static void -call_window_name_notify_cb (EmpathyContact *contact, - GParamSpec *param, - EmpathyCallWindow *window) +call_window_output_volume_changed_cb (GtkWidget *scale, + EmpathyCallWindow *window) { - const gchar *name; - gchar *title; + guint volume; - name = empathy_contact_get_name (contact); - title = g_strdup_printf (_("Call from %s"), name); - gtk_window_set_title (GTK_WINDOW (window->window), title); - g_free (title); + volume = (guint) gtk_range_get_value (GTK_RANGE (scale)); + + empathy_debug (DEBUG_DOMAIN, "Output volume changed - %u", volume); + + empathy_tp_call_set_output_volume (window->call, volume); } static void -call_window_status_notify_cb (EmpathyTpCall *call, - GParamSpec *param, - EmpathyCallWindow *window) -{ - guint status; - - status = empathy_tp_call_get_status (call); - empathy_debug (DEBUG_DOMAIN, "Status changed to %d", - status); - - if (status == EMPATHY_TP_CALL_STATUS_RINGING) { - if (empathy_tp_call_is_incoming (window->call)) { - empathy_tp_call_accept (window->call); - } else { - EmpathyContact *contact; - - contact = empathy_tp_call_get_contact (call); - g_signal_connect (contact, "notify::capabilities", - G_CALLBACK (call_window_capabilities_notify_cb), - window); - g_signal_connect (contact, "notify::name", - G_CALLBACK (call_window_name_notify_cb), - window); - call_window_capabilities_notify_cb (contact, NULL, window); - call_window_name_notify_cb (contact, NULL, window); - } - } - - if (status == EMPATHY_TP_CALL_STATUS_RUNNING) { - empathy_tp_call_set_output_window (window->call, - gtk_socket_get_id (GTK_SOCKET (window->output_video_socket))); - } +call_window_output_mute_button_toggled_cb (GtkWidget *button, + EmpathyCallWindow *window) +{ + gboolean is_muted; + + is_muted = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); + + empathy_debug (DEBUG_DOMAIN, "Mute output toggled - %d", is_muted); + + empathy_tp_call_mute_output (window->call, is_muted); } static void -call_window_destroy_cb (GtkWidget *widget, - EmpathyCallWindow *window) +call_window_input_mute_button_toggled_cb (GtkWidget *button, + EmpathyCallWindow *window) { - g_object_unref (window->call); - g_slice_free (EmpathyCallWindow, window); + gboolean is_muted; + + is_muted = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); + + empathy_debug (DEBUG_DOMAIN, "Mute input toggled - %d", is_muted); + + empathy_tp_call_mute_input (window->call, is_muted); +} + +static void +call_window_destroy_cb (GtkWidget *widget, + EmpathyCallWindow *window) +{ + g_signal_handlers_disconnect_by_func (window->call, + call_window_status_changed_cb, window); + g_signal_handlers_disconnect_by_func (window->call, + call_window_receiving_video_cb, window); + g_signal_handlers_disconnect_by_func (window->call, + call_window_sending_video_cb, window); + + g_object_unref (window->call); + g_object_unref (window->output_video_socket); + g_object_unref (window->preview_video_socket); + g_object_unref (window->output_video_label); + + g_slice_free (EmpathyCallWindow, window); } GtkWidget * -empathy_call_window_show (EmpathyTpCall *call) -{ - EmpathyCallWindow *window; - GladeXML *glade; - - window = g_slice_new0 (EmpathyCallWindow); - - glade = empathy_glade_get_file ("empathy-call-window.glade", - "window", - NULL, - "window", &window->window, - "input_volume_scale", &window->input_volume_scale, - "output_volume_scale", &window->output_volume_scale, - "input_mute_togglebutton", &window->input_mute_togglebutton, - "output_mute_togglebutton", &window->output_mute_togglebutton, - "preview_video_frame", &window->preview_video_frame, - "output_video_frame", &window->output_video_frame, - "send_video_checkbutton", &window->send_video_checkbutton, - NULL); - - empathy_glade_connect (glade, - window, - "window", "destroy", call_window_destroy_cb, - "input_mute_togglebutton", "toggled", call_window_input_mute_toggled_cb, - "output_mute_togglebutton", "toggled", call_window_output_mute_toggled_cb, - "output_volume_scale", "value-changed", call_window_output_volume_changed_cb, - "send_video_checkbutton", "toggled", call_window_send_video_toggled_cb, - NULL); - g_object_unref (glade); - - /* Set output window socket */ - window->output_video_socket = gtk_socket_new (); - gtk_widget_show (window->output_video_socket); - gtk_container_add (GTK_CONTAINER (window->output_video_frame), - window->output_video_socket); - - /* Set preview window socket */ - window->preview_video_socket = gtk_socket_new (); - gtk_widget_show (window->preview_video_socket); - gtk_container_add (GTK_CONTAINER (window->preview_video_frame), - window->preview_video_socket); - - /* Setup TpCall */ - window->call = g_object_ref (call); - empathy_tp_call_add_preview_window (window->call, - gtk_socket_get_id (GTK_SOCKET (window->preview_video_socket))); - g_signal_connect (window->call, "notify::status", - G_CALLBACK (call_window_status_notify_cb), - window); - - gtk_widget_show (window->window); - - return window->window; +empathy_call_window_new (EmpathyTpCall *call) +{ + EmpathyCallWindow *window; + GladeXML *glade; + guint status; + + g_return_val_if_fail (EMPATHY_IS_TP_CALL (call), NULL); + + window = g_slice_new0 (EmpathyCallWindow); + window->call = g_object_ref (call); + + glade = empathy_glade_get_file ("empathy-call-window.glade", + "window", + NULL, + "window", &window->window, + "status_label", &window->status_label, + "start_call_button", &window->start_call_button, + "end_call_button", &window->end_call_button, + "input_volume_scale", &window->input_volume_scale, + "output_volume_scale", &window->output_volume_scale, + "input_mute_button", &window->input_mute_button, + "output_mute_button", &window->output_mute_button, + "preview_video_frame", &window->preview_video_frame, + "output_video_frame", &window->output_video_frame, + "video_button", &window->video_button, + NULL); + + empathy_glade_connect (glade, + window, + "window", "destroy", call_window_destroy_cb, + "window", "delete_event", call_window_delete_event_cb, + "input_mute_button", "toggled", call_window_input_mute_button_toggled_cb, + "output_mute_button", "toggled", call_window_output_mute_button_toggled_cb, + "output_volume_scale", "value-changed", call_window_output_volume_changed_cb, + "start_call_button", "clicked", call_window_start_call_button_clicked_cb, + "end_call_button", "clicked", call_window_end_call_button_clicked_cb, + NULL); + + g_object_unref (glade); + + /* Output video label */ + window->output_video_label = g_object_ref (gtk_label_new ("No video output")); + gtk_container_add (GTK_CONTAINER (window->output_video_frame), + window->output_video_label); + gtk_widget_show (window->output_video_label); + + /* Output video socket */ + window->output_video_socket = g_object_ref (gtk_socket_new ()); + g_signal_connect (GTK_OBJECT (window->output_video_socket), "realize", + G_CALLBACK (call_window_socket_realized_cb), window); + gtk_widget_show (window->output_video_socket); + + /* Preview video socket */ + window->preview_video_socket = g_object_ref (gtk_socket_new ()); + g_signal_connect (GTK_OBJECT (window->preview_video_socket), "realize", + G_CALLBACK (call_window_socket_realized_cb), window); + gtk_container_add (GTK_CONTAINER (window->preview_video_frame), + window->preview_video_socket); + gtk_widget_show (window->preview_video_socket); + + g_signal_connect (G_OBJECT (window->call), "status-changed", + G_CALLBACK (call_window_status_changed_cb), + window); + g_signal_connect (G_OBJECT (window->call), "receiving-video", + G_CALLBACK (call_window_receiving_video_cb), + window); + g_signal_connect (G_OBJECT (window->call), "sending-video", + G_CALLBACK (call_window_sending_video_cb), + window); + + window->is_drawing = FALSE; + + g_object_get (G_OBJECT (window->call), "status", &status, NULL); + + if (status == EMPATHY_TP_CALL_STATUS_READYING) + { + gtk_window_set_title (GTK_WINDOW (window->window), "Empathy Call"); + gtk_label_set_text (GTK_LABEL (window->status_label), "Readying"); + } + + gtk_widget_show (window->window); + + return window->window; } diff --git a/libempathy-gtk/empathy-call-window.glade b/libempathy-gtk/empathy-call-window.glade index bc18952b6..20b2760a1 100644 --- a/libempathy-gtk/empathy-call-window.glade +++ b/libempathy-gtk/empathy-call-window.glade @@ -1,335 +1,304 @@ -<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> - +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> +<!--Generated with glade3 3.4.1 on Thu Jan 17 20:37:30 2008 --> <glade-interface> - -<widget class="GtkWindow" id="window"> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> - <property name="title" translatable="yes">Call</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="urgency_hint">False</property> - - <child> - <widget class="GtkHBox" id="hbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">10</property> - - <child> - <widget class="GtkFrame" id="frame1"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> - - <child> - <widget class="GtkAlignment" id="alignment1"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="yalign">0</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox3"> - <property name="visible">True</property> - <property name="homogeneous">True</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkVBox" id="vbox4"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="label" translatable="yes">Input</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">5</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVScale" id="input_volume_scale"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="draw_value">False</property> - <property name="value_pos">GTK_POS_TOP</property> - <property name="digits">1</property> - <property name="update_policy">GTK_UPDATE_CONTINUOUS</property> - <property name="inverted">True</property> - <property name="adjustment">100 0 100 1 0 0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkToggleButton" id="input_mute_togglebutton"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Mute</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - </widget> - <packing> - <property name="padding">5</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">5</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox5"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkLabel" id="label3"> - <property name="visible">True</property> - <property name="label" translatable="yes">Output</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">5</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVScale" id="output_volume_scale"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="draw_value">False</property> - <property name="value_pos">GTK_POS_TOP</property> - <property name="digits">1</property> - <property name="update_policy">GTK_UPDATE_CONTINUOUS</property> - <property name="inverted">True</property> - <property name="adjustment">100 0 100 1 0 0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkToggleButton" id="output_mute_togglebutton"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Mute</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - </widget> - <packing> - <property name="padding">5</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">5</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkLabel" id="label4"> - <property name="visible">True</property> - <property name="label" translatable="yes">Volume</property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkAspectFrame" id="output_video_frame"> - <property name="width_request">352</property> - <property name="height_request">288</property> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="ratio">1.22000002861</property> - <property name="obey_child">False</property> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox3"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkAspectFrame" id="preview_video_frame"> - <property name="width_request">176</property> - <property name="height_request">144</property> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="ratio">1.22000002861</property> - <property name="obey_child">False</property> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="send_video_checkbutton"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Send Video</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">True</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">10</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - + <widget class="GtkWindow" id="window"> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <widget class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="border_width">10</property> + <property name="spacing">10</property> + <child> + <widget class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <widget class="GtkLabel" id="status_label"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkHSeparator" id="hseparator1"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkHBox" id="hbox2"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="spacing">10</property> + <child> + <widget class="GtkFrame" id="frame1"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label_xalign">0</property> + <child> + <widget class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <child> + <widget class="GtkHBox" id="hbox3"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="homogeneous">True</property> + <child> + <widget class="GtkVBox" id="vbox4"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="extension_events">GDK_EXTENSION_EVENTS_CURSOR</property> + <property name="resize_mode">GTK_RESIZE_QUEUE</property> + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Input</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + </packing> + </child> + <child> + <widget class="GtkVScale" id="input_volume_scale"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="adjustment">100 0 100 1 0 0</property> + <property name="inverted">True</property> + <property name="draw_value">False</property> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkToggleButton" id="input_mute_button"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Mute</property> + <property name="response_id">0</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">2</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">5</property> + </packing> + </child> + <child> + <widget class="GtkVBox" id="vbox5"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <widget class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Output</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + </packing> + </child> + <child> + <widget class="GtkVScale" id="output_volume_scale"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="adjustment">100 0 100 1 0 0</property> + <property name="inverted">True</property> + <property name="draw_value">False</property> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkToggleButton" id="output_mute_button"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Mute</property> + <property name="response_id">0</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">2</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">5</property> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + <child> + <widget class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Volume</property> + <property name="use_markup">True</property> + </widget> + <packing> + <property name="type">label_item</property> + </packing> + </child> + </widget> + </child> + <child> + <widget class="GtkVBox" id="vbox2"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <widget class="GtkAspectFrame" id="output_video_frame"> + <property name="width_request">352</property> + <property name="height_request">288</property> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label_xalign">0</property> + <property name="ratio">1.2200000286102295</property> + <property name="obey_child">False</property> + <child> + <placeholder/> + </child> + </widget> + </child> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkVBox" id="vbox3"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <child> + <widget class="GtkAspectFrame" id="preview_video_frame"> + <property name="width_request">176</property> + <property name="height_request">144</property> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label_xalign">0</property> + <property name="ratio">1.2200000286102295</property> + <property name="obey_child">False</property> + <child> + <placeholder/> + </child> + </widget> + </child> + <child> + <widget class="GtkCheckButton" id="video_button"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Send Video</property> + <property name="response_id">0</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">10</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkHSeparator" id="hseparator2"> + <property name="visible">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="padding">5</property> + <property name="position">2</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="start_call_button"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">Start Call</property> + <property name="response_id">0</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">10</property> + <property name="pack_type">GTK_PACK_END</property> + <property name="position">4</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="end_call_button"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="label" translatable="yes">End Call</property> + <property name="response_id">0</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">GTK_PACK_END</property> + <property name="position">3</property> + </packing> + </child> + </widget> + <packing> + <property name="position">2</property> + </packing> + </child> + </widget> + <packing> + <property name="padding">10</property> + <property name="position">2</property> + </packing> + </child> + </widget> + </child> + </widget> </glade-interface> diff --git a/libempathy-gtk/empathy-call-window.h b/libempathy-gtk/empathy-call-window.h index c8c6d7f0e..7d65aaeae 100644 --- a/libempathy-gtk/empathy-call-window.h +++ b/libempathy-gtk/empathy-call-window.h @@ -1,36 +1,34 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Copyright (C) 2007 Elliot Fairweather - * Copyright (C) 2007 Collabora Ltd. + * Copyright (C) 2007 Elliot Fairweather * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This library 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 - * Lesser General Public License for more details. + * This library 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 + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * - * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> - * Xavier Claessens <xclaesse@gmail.com> + * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> */ #ifndef __EMPATHY_CALL_WINDOW_H__ #define __EMPATHY_CALL_WINDOW_H__ +#include <gtk/gtk.h> + #include <libempathy/empathy-tp-call.h> G_BEGIN_DECLS -GtkWidget * empathy_call_window_show (EmpathyTpCall *call); +GtkWidget *empathy_call_window_new (EmpathyTpCall *call); G_END_DECLS #endif /* __EMPATHY_CALL_WINDOW_H__ */ - diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index f7c013820..ae0825255 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -80,6 +80,8 @@ struct _EmpathyChatPriv { gboolean first_tp_chat; time_t last_log_timestamp; gboolean is_first_char; + guint block_events_timeout_id; + GList *pending_messages; /* Used to automatically shrink a window that has temporarily * grown due to long input. */ @@ -396,6 +398,9 @@ chat_finalize (GObject *object) chat_composing_remove_timeout (chat); g_object_unref (priv->log_manager); + g_list_foreach (priv->pending_messages, (GFunc) g_object_unref, NULL); + g_list_free (priv->pending_messages); + dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (priv->mc), "AccountStatusChanged", G_CALLBACK (chat_status_changed_cb), chat); @@ -414,6 +419,10 @@ chat_finalize (GObject *object) g_source_remove (priv->scroll_idle_id); } + if (priv->block_events_timeout_id) { + g_source_remove (priv->block_events_timeout_id); + } + g_free (priv->id); G_OBJECT_CLASS (empathy_chat_parent_class)->finalize (object); @@ -436,6 +445,13 @@ chat_destroy_cb (EmpathyTpChat *tp_chat, empathy_chat_view_append_event (chat->view, _("Disconnected")); gtk_widget_set_sensitive (chat->input_text_view, FALSE); + if (priv->block_events_timeout_id != 0) { + g_source_remove (priv->block_events_timeout_id); + } + + g_list_foreach (priv->pending_messages, (GFunc) g_object_unref, NULL); + g_list_free (priv->pending_messages); + if (EMPATHY_CHAT_GET_CLASS (chat)->set_tp_chat) { EMPATHY_CHAT_GET_CLASS (chat)->set_tp_chat (chat, NULL); } @@ -519,6 +535,14 @@ chat_message_received_cb (EmpathyTpChat *tp_chat, return; } + if (chat->block_events) { + /* Wait until block_events cb before displaying + * them to have to chance to get alias/avatar of sender. */ + priv->pending_messages = g_list_append (priv->pending_messages, + g_object_ref (message)); + return; + } + sender = empathy_message_get_sender (message); empathy_debug (DEBUG_DOMAIN, "Appending message ('%s')", empathy_contact_get_name (sender)); @@ -1439,12 +1463,32 @@ empathy_chat_load_geometry (EmpathyChat *chat, empathy_geometry_load (empathy_chat_get_id (chat), x, y, w, h); } +static gboolean +chat_block_events_timeout_cb (gpointer data) +{ + EmpathyChat *chat = EMPATHY_CHAT (data); + EmpathyChatPriv *priv = GET_PRIV (chat); + GList *l; + + chat->block_events = FALSE; + priv->block_events_timeout_id = 0; + + for (l = priv->pending_messages; l; l = l->next) { + chat_message_received_cb (priv->tp_chat, l->data, chat); + g_object_unref (l->data); + } + g_list_free (priv->pending_messages); + priv->pending_messages = NULL; + + return FALSE; +} + void empathy_chat_set_tp_chat (EmpathyChat *chat, EmpathyTpChat *tp_chat) { EmpathyChatPriv *priv; - GList *messages, *l; + GList *messages; g_return_if_fail (EMPATHY_IS_CHAT (chat)); g_return_if_fail (EMPATHY_IS_TP_CHAT (tp_chat)); @@ -1455,6 +1499,15 @@ empathy_chat_set_tp_chat (EmpathyChat *chat, return; } + /* Block events for some time to avoid having "has come online" or + * "joined" messages. */ + chat->block_events = TRUE; + if (priv->block_events_timeout_id != 0) { + g_source_remove (priv->block_events_timeout_id); + } + priv->block_events_timeout_id = + g_timeout_add_seconds (1, chat_block_events_timeout_cb, chat); + if (priv->tp_chat) { g_signal_handlers_disconnect_by_func (priv->tp_chat, chat_message_received_cb, @@ -1494,14 +1547,11 @@ empathy_chat_set_tp_chat (EmpathyChat *chat, G_CALLBACK (chat_destroy_cb), chat); - /* Get pending messages */ + /* Get pending messages, wait until block_events cb before displaying + * them to have to chance to get alias/avatar of sender. */ empathy_tp_chat_set_acknowledge (tp_chat, TRUE); messages = empathy_tp_chat_get_pendings (tp_chat); - for (l = messages; l; l = l->next) { - chat_message_received_cb (tp_chat, l->data, chat); - g_object_unref (l->data); - } - g_list_free (messages); + priv->pending_messages = g_list_concat (priv->pending_messages, messages); if (!priv->sensitive) { gtk_widget_set_sensitive (chat->input_text_view, TRUE); diff --git a/libempathy-gtk/empathy-chat.h b/libempathy-gtk/empathy-chat.h index 5bf456e48..bcf382e53 100644 --- a/libempathy-gtk/empathy-chat.h +++ b/libempathy-gtk/empathy-chat.h @@ -58,6 +58,7 @@ struct _EmpathyChat { /* Protected */ EmpathyChatView *view; GtkWidget *input_text_view; + gboolean block_events; }; struct _EmpathyChatClass { diff --git a/libempathy-gtk/empathy-group-chat.c b/libempathy-gtk/empathy-group-chat.c index 4f86ef2ba..a51b25228 100644 --- a/libempathy-gtk/empathy-group-chat.c +++ b/libempathy-gtk/empathy-group-chat.c @@ -355,20 +355,18 @@ group_chat_members_changed_cb (EmpathyTpChatroom *tp_chat, gboolean is_member, EmpathyGroupChat *chat) { - EmpathyGroupChatPriv *priv; - gchar *str; - - priv = GET_PRIV (chat); - - if (is_member) { - str = g_strdup_printf (_("%s has joined the room"), - empathy_contact_get_name (contact)); - } else { - str = g_strdup_printf (_("%s has left the room"), - empathy_contact_get_name (contact)); + if (!EMPATHY_CHAT (chat)->block_events) { + gchar *str; + if (is_member) { + str = g_strdup_printf (_("%s has joined the room"), + empathy_contact_get_name (contact)); + } else { + str = g_strdup_printf (_("%s has left the room"), + empathy_contact_get_name (contact)); + } + empathy_chat_view_append_event (EMPATHY_CHAT (chat)->view, str); + g_free (str); } - empathy_chat_view_append_event (EMPATHY_CHAT (chat)->view, str); - g_free (str); } static void @@ -571,13 +569,15 @@ group_chat_subject_notify_cb (EmpathyTpChat *tp_chat, priv->topic = str; gtk_label_set_text (GTK_LABEL (priv->label_topic), priv->topic); - if (!G_STR_EMPTY (priv->topic)) { - str = g_strdup_printf (_("Topic set to: %s"), priv->topic); - } else { - str = g_strdup (_("No topic defined")); + if (!EMPATHY_CHAT (chat)->block_events) { + if (!G_STR_EMPTY (priv->topic)) { + str = g_strdup_printf (_("Topic set to: %s"), priv->topic); + } else { + str = g_strdup (_("No topic defined")); + } + empathy_chat_view_append_event (EMPATHY_CHAT (chat)->view, str); + g_free (str); } - empathy_chat_view_append_event (EMPATHY_CHAT (chat)->view, str); - g_free (str); } static void diff --git a/libempathy-gtk/empathy-private-chat.c b/libempathy-gtk/empathy-private-chat.c index 2dd1ba755..0bcdd7844 100644 --- a/libempathy-gtk/empathy-private-chat.c +++ b/libempathy-gtk/empathy-private-chat.c @@ -223,7 +223,7 @@ private_chat_contact_presence_updated_cb (EmpathyContact *contact, empathy_contact_get_id (contact)); if (!empathy_contact_is_online (contact)) { - if (priv->is_online) { + if (priv->is_online && !EMPATHY_CHAT (chat)->block_events) { gchar *msg; msg = g_strdup_printf (_("%s went offline"), @@ -237,7 +237,7 @@ private_chat_contact_presence_updated_cb (EmpathyContact *contact, g_signal_emit_by_name (chat, "composing", FALSE); } else { - if (!priv->is_online) { + if (!priv->is_online && !EMPATHY_CHAT (chat)->block_events) { gchar *msg; msg = g_strdup_printf (_("%s has come online"), diff --git a/libempathy-gtk/empathy-theme-boxes.c b/libempathy-gtk/empathy-theme-boxes.c index 30ae59f30..7285a9e9e 100644 --- a/libempathy-gtk/empathy-theme-boxes.c +++ b/libempathy-gtk/empathy-theme-boxes.c @@ -597,15 +597,16 @@ theme_boxes_maybe_append_header (EmpathyTheme *theme, box = gtk_hbox_new (FALSE, 0); - avatar = empathy_chat_view_get_avatar_pixbuf_with_cache (contact); - if (avatar && empathy_theme_get_show_avatars (theme)) { - GtkWidget *image; + if (empathy_theme_get_show_avatars (theme)) { + avatar = empathy_chat_view_get_avatar_pixbuf_with_cache (contact); + if (avatar) { + GtkWidget *image; - image = gtk_image_new_from_pixbuf (avatar); - - gtk_box_pack_start (GTK_BOX (box), image, - FALSE, TRUE, 2); + image = gtk_image_new_from_pixbuf (avatar); + gtk_box_pack_start (GTK_BOX (box), image, + FALSE, TRUE, 2); + } } g_signal_connect_object (view, "size-allocate", diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c index 9c66e73ba..c31dfefc0 100644 --- a/libempathy-gtk/empathy-ui-utils.c +++ b/libempathy-gtk/empathy-ui-utils.c @@ -1273,6 +1273,9 @@ empathy_window_present (GtkWindow *window, timestamp = gtk_get_current_event_time (); gtk_window_set_skip_taskbar_hint (window, FALSE); gtk_window_present_with_time (window, timestamp); + /* FIXME: This shouldn't be required as gtk_window_present's doc says + * it deiconify automatically. */ + gtk_window_deiconify (window); } GtkWindow * diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c index 70025c7b0..a9dbaa78b 100644 --- a/libempathy/empathy-contact.c +++ b/libempathy/empathy-contact.c @@ -76,8 +76,6 @@ enum { PROP_ACCOUNT, PROP_PRESENCE, PROP_PRESENCE_MESSAGE, - PROP_GROUPS, - PROP_SUBSCRIPTION, PROP_HANDLE, PROP_CAPABILITIES, PROP_IS_USER @@ -159,7 +157,7 @@ empathy_contact_class_init (EmpathyContactClass *class) "Contact Capabilities", "Capabilities of the contact", EMPATHY_TYPE_CAPABILITIES, - 0, + EMPATHY_CAPABILITIES_UNKNOWN, G_PARAM_READWRITE)); g_object_class_install_property (object_class, diff --git a/libempathy/empathy-contact.h b/libempathy/empathy-contact.h index 57a72c906..b84f784cc 100644 --- a/libempathy/empathy-contact.h +++ b/libempathy/empathy-contact.h @@ -54,8 +54,10 @@ struct _EmpathyContactClass { }; typedef enum { + EMPATHY_CAPABILITIES_NONE = 0, EMPATHY_CAPABILITIES_AUDIO = 1 << 0, EMPATHY_CAPABILITIES_VIDEO = 1 << 1, + EMPATHY_CAPABILITIES_UNKNOWN = 1 << 7 } EmpathyCapabilities; GType empathy_contact_get_type (void) G_GNUC_CONST; diff --git a/libempathy/empathy-tp-call.c b/libempathy/empathy-tp-call.c index 3e8467994..7deb31c25 100644 --- a/libempathy/empathy-tp-call.c +++ b/libempathy/empathy-tp-call.c @@ -1,44 +1,45 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Copyright (C) 2007 Elliot Fairweather - * Copyright (C) 2007 Collabora Ltd. + * Copyright (C) 2007 Elliot Fairweather * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This library 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 - * Lesser General Public License for more details. + * This library 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 + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * - * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> - * Xavier Claessens <xclaesse@gmail.com> + * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> */ -#include "config.h" +#include <string.h> +#include <dbus/dbus-glib.h> #include <libtelepathy/tp-chan-type-streamed-media-gen.h> +#include <libtelepathy/tp-connmgr.h> #include <libtelepathy/tp-helpers.h> -#include <libtelepathy/tp-conn.h> -#include <libmissioncontrol/mission-control.h> +#include <libmissioncontrol/mc-account.h> + +#include <libempathy/empathy-contact-factory.h> +#include <libempathy/empathy-debug.h> +#include <libempathy/empathy-tp-group.h> +#include <libempathy/empathy-utils.h> -#include "empathy-tp-call.h" -#include "empathy-tp-group.h" -#include "empathy-utils.h" -#include "empathy-debug.h" -#include "empathy-enum-types.h" #include "tp-stream-engine-gen.h" +#include "empathy-tp-call.h" + #define DEBUG_DOMAIN "TpCall" -#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EMPATHY_TYPE_TP_CALL, EmpathyTpCallPriv)) +#define GET_PRIV(object) (G_TYPE_INSTANCE_GET_PRIVATE \ + ((object), EMPATHY_TYPE_TP_CALL, EmpathyTpCallPriv)) #define STREAM_ENGINE_BUS_NAME "org.freedesktop.Telepathy.StreamEngine" #define STREAM_ENGINE_OBJECT_PATH "/org/freedesktop/Telepathy/StreamEngine" @@ -47,33 +48,37 @@ typedef struct _EmpathyTpCallPriv EmpathyTpCallPriv; -struct _EmpathyTpCallPriv { - TpChan *tp_chan; - DBusGProxy *streamed_iface; - DBusGProxy *se_ch_proxy; - DBusGProxy *se_proxy; - McAccount *account; - EmpathyTpGroup *group; - EmpathyContact *contact; - EmpathyTpCallStatus status; - gboolean is_incoming; - guint audio_stream; - guint video_stream; +struct _EmpathyTpCallPriv +{ + TpConn *connection; + TpChan *channel; + EmpathyTpGroup *group; + EmpathyContact *contact; + gboolean is_incoming; + guint status; + + EmpathyTpCallStream *audio; + EmpathyTpCallStream *video; }; -static void empathy_tp_call_class_init (EmpathyTpCallClass *klass); -static void empathy_tp_call_init (EmpathyTpCall *call); - -enum { - PROP_0, - PROP_ACCOUNT, - PROP_TP_CHAN, - PROP_STATUS +enum +{ + STATUS_CHANGED_SIGNAL, + RECEIVING_VIDEO_SIGNAL, + SENDING_VIDEO_SIGNAL, + LAST_SIGNAL }; -enum { - DESTROY, - LAST_SIGNAL +enum +{ + PROP_0, + PROP_CONNECTION, + PROP_CHANNEL, + PROP_CONTACT, + PROP_IS_INCOMING, + PROP_STATUS, + PROP_AUDIO_STREAM, + PROP_VIDEO_STREAM }; static guint signals[LAST_SIGNAL]; @@ -81,575 +86,870 @@ static guint signals[LAST_SIGNAL]; G_DEFINE_TYPE (EmpathyTpCall, empathy_tp_call, G_TYPE_OBJECT) static void -tp_call_set_status (EmpathyTpCall *call, - EmpathyTpCallStatus status) +tp_call_stream_state_changed_cb (DBusGProxy *channel, + guint stream_id, + guint stream_state, + EmpathyTpCall *call) { - EmpathyTpCallPriv *priv = GET_PRIV (call); - - priv->status = status; - g_object_notify (G_OBJECT (call), "status"); + EmpathyTpCallPriv *priv = GET_PRIV (call); + + empathy_debug (DEBUG_DOMAIN, + "Stream state changed - stream id: %d, state state: %d", + stream_id, stream_state); + + if (stream_id == priv->audio->id) + { + priv->audio->state = stream_state; + } + else if (stream_id == priv->video->id) + { + priv->video->state = stream_state; + } + + g_signal_emit_by_name (call, "status-changed"); } static void -tp_call_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - EmpathyTpCallPriv *priv = GET_PRIV (object); - - switch (prop_id) { - case PROP_ACCOUNT: - priv->account = g_object_ref (g_value_get_object (value)); - break; - case PROP_TP_CHAN: - priv->tp_chan = g_object_ref (g_value_get_object (value)); - break; - case PROP_STATUS: - tp_call_set_status (EMPATHY_TP_CALL (object), - g_value_get_enum (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } +tp_call_identify_streams (EmpathyTpCall *call) +{ + EmpathyTpCallPriv *priv = GET_PRIV (call); + GPtrArray *stream_infos; + DBusGProxy *streamed_iface; + GError *error = NULL; + guint i; + + empathy_debug (DEBUG_DOMAIN, "Identifying audio/video streams"); + + streamed_iface = tp_chan_get_interface (priv->channel, + TELEPATHY_CHAN_IFACE_STREAMED_QUARK); + + if (!tp_chan_type_streamed_media_list_streams (streamed_iface, &stream_infos, + &error)) + { + empathy_debug (DEBUG_DOMAIN, "Couldn't list audio/video streams: %s", + error->message); + g_clear_error (&error); + return; + } + + for (i = 0; i < stream_infos->len; i++) + { + GValueArray *values; + guint stream_id; + guint stream_handle; + guint stream_type; + guint stream_state; + guint stream_direction; + + values = g_ptr_array_index (stream_infos, i); + stream_id = g_value_get_uint (g_value_array_get_nth (values, 0)); + stream_handle = g_value_get_uint (g_value_array_get_nth (values, 1)); + stream_type = g_value_get_uint (g_value_array_get_nth (values, 2)); + stream_state = g_value_get_uint (g_value_array_get_nth (values, 3)); + stream_direction = g_value_get_uint (g_value_array_get_nth (values, 4)); + + switch (stream_type) + { + case TP_MEDIA_STREAM_TYPE_AUDIO: + empathy_debug (DEBUG_DOMAIN, + "Audio stream - id: %d, state: %d, direction: %d", + stream_id, stream_state, stream_direction); + priv->audio->exists = TRUE; + priv->audio->id = stream_id; + priv->audio->state = stream_state; + priv->audio->direction = stream_direction; + break; + case TP_MEDIA_STREAM_TYPE_VIDEO: + empathy_debug (DEBUG_DOMAIN, + "Video stream - id: %d, state: %d, direction: %d", + stream_id, stream_state, stream_direction); + priv->video->exists = TRUE; + priv->video->id = stream_id; + priv->video->state = stream_state; + priv->video->direction = stream_direction; + break; + default: + empathy_debug (DEBUG_DOMAIN, "Unknown stream type: %d", + stream_type); + } + + g_value_array_free (values); + } } static void -tp_call_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +tp_call_stream_added_cb (DBusGProxy *channel, + guint stream_id, + guint contact_handle, + guint stream_type, + EmpathyTpCall *call) { - EmpathyTpCallPriv *priv = GET_PRIV (object); + empathy_debug (DEBUG_DOMAIN, + "Stream added - stream id: %d, contact handle: %d, stream type: %d", + stream_id, contact_handle, stream_type); - switch (prop_id) { - case PROP_ACCOUNT: - g_value_set_object (value, priv->account); - break; - case PROP_TP_CHAN: - g_value_set_object (value, priv->tp_chan); - break; - case PROP_STATUS: - g_value_set_enum (value, priv->status); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + tp_call_identify_streams (call); } + static void -tp_call_destroy_cb (TpChan *call_chan, - EmpathyTpCall *call) +tp_call_stream_removed_cb (DBusGProxy *channel, + guint stream_id, + EmpathyTpCall *call) { - EmpathyTpCallPriv *priv = GET_PRIV (call); - - empathy_debug (DEBUG_DOMAIN, "Channel Closed or CM crashed"); - - g_object_unref (priv->tp_chan); - priv->tp_chan = NULL; - priv->streamed_iface = NULL; - - g_signal_emit (call, signals[DESTROY], 0); + EmpathyTpCallPriv *priv = GET_PRIV (call); + + empathy_debug (DEBUG_DOMAIN, "Stream removed - stream id: %d", stream_id); + + if (stream_id == priv->audio->id) + { + priv->audio->exists = FALSE; + } + else if (stream_id == priv->video->id) + { + priv->video->exists = FALSE; + } } static void -tp_call_closed_cb (TpChan *call_chan, - EmpathyTpCall *call) +tp_call_channel_closed_cb (TpChan *channel, + EmpathyTpCall *call) { - EmpathyTpCallPriv *priv = GET_PRIV (call); - - /* The channel is closed, do just like if the proxy was destroyed */ - g_signal_handlers_disconnect_by_func (priv->tp_chan, - tp_call_destroy_cb, - call); - tp_call_destroy_cb (call_chan, call); + EmpathyTpCallPriv *priv = GET_PRIV (call); + DBusGProxy *streamed_iface; + DBusGProxy *group_iface; + + empathy_debug (DEBUG_DOMAIN, "Channel closed"); + + priv->status = EMPATHY_TP_CALL_STATUS_CLOSED; + g_signal_emit_by_name (call, "status-changed"); + + streamed_iface = tp_chan_get_interface (priv->channel, + TELEPATHY_CHAN_IFACE_STREAMED_QUARK); + group_iface = tp_chan_get_interface (priv->channel, + TELEPATHY_CHAN_IFACE_GROUP_QUARK); + + dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (priv->channel), "Closed", + G_CALLBACK (tp_call_channel_closed_cb), (gpointer) call); + dbus_g_proxy_disconnect_signal (streamed_iface, "StreamStateChanged", + G_CALLBACK (tp_call_stream_state_changed_cb), (gpointer) call); + dbus_g_proxy_disconnect_signal (streamed_iface, "StreamAdded", + G_CALLBACK (tp_call_stream_added_cb), (gpointer) call); + dbus_g_proxy_disconnect_signal (streamed_iface, "StreamRemoved", + G_CALLBACK (tp_call_stream_removed_cb), (gpointer) call); } static void -tp_call_stream_added_cb (DBusGProxy *streamed_iface, - guint stream_id, - guint contact_handle, - guint stream_type, - EmpathyTpCall *call) -{ - EmpathyTpCallPriv *priv = GET_PRIV (call); - - empathy_debug (DEBUG_DOMAIN, "Stream added: id=%d, stream_type=%d", - stream_id, stream_type); - - switch (stream_type) { - case TP_MEDIA_STREAM_TYPE_AUDIO: - priv->audio_stream = stream_id; - break; - case TP_MEDIA_STREAM_TYPE_VIDEO: - priv->video_stream = stream_id; - break; - default: - empathy_debug (DEBUG_DOMAIN, "Unknown stream type: %d", stream_type); - } +tp_call_stream_direction_changed_cb (DBusGProxy *channel, + guint stream_id, + guint stream_direction, + guint flags, + EmpathyTpCall *call) +{ + EmpathyTpCallPriv *priv = GET_PRIV (call); + + empathy_debug (DEBUG_DOMAIN, + "Stream direction changed - stream: %d, direction: %d", + stream_id, stream_direction); + + if (stream_id == priv->audio->id) + { + priv->audio->direction = stream_direction; + } + else if (stream_id == priv->video->id) + { + priv->video->direction = stream_direction; + + if (stream_direction & TP_MEDIA_STREAM_DIRECTION_RECEIVE) + { + empathy_debug (DEBUG_DOMAIN, "RECEIVING"); + g_signal_emit_by_name (call, "receiving-video", TRUE); + } + else + { + empathy_debug (DEBUG_DOMAIN, "NOT RECEIVING"); + g_signal_emit_by_name (call, "receiving-video", FALSE); + } + + if (stream_direction & TP_MEDIA_STREAM_DIRECTION_SEND) + { + empathy_debug (DEBUG_DOMAIN, "SENDING"); + g_signal_emit_by_name (call, "sending-video", TRUE); + } + else + { + empathy_debug (DEBUG_DOMAIN, "NOT SENDING"); + g_signal_emit_by_name (call, "sending-video", FALSE); + } + } } +static void +tp_call_request_streams_for_capabilities (EmpathyTpCall *call, + EmpathyCapabilities capabilities) +{ + EmpathyTpCallPriv *priv = GET_PRIV (call); + DBusGProxy *streamed_iface; + GArray *stream_types; + guint handle; + guint stream_type; + GError *error = NULL; + + empathy_debug (DEBUG_DOMAIN, "Requesting new stream for capabilities %d", + capabilities); + + streamed_iface = tp_chan_get_interface (priv->channel, + TELEPATHY_CHAN_IFACE_STREAMED_QUARK); + stream_types = g_array_new (FALSE, FALSE, sizeof (guint)); + handle = empathy_contact_get_handle (priv->contact); + + if (capabilities & EMPATHY_CAPABILITIES_AUDIO) + { + stream_type = TP_MEDIA_STREAM_TYPE_AUDIO; + g_array_append_val (stream_types, stream_type); + } + if (capabilities & EMPATHY_CAPABILITIES_VIDEO) + { + stream_type = TP_MEDIA_STREAM_TYPE_VIDEO; + g_array_append_val (stream_types, stream_type); + } + + if (!tp_chan_type_streamed_media_request_streams (streamed_iface, handle, + stream_types, NULL, &error)) + { + empathy_debug (DEBUG_DOMAIN, "Couldn't request new stream: %s", + error->message); + g_clear_error (&error); + } + + g_array_free (stream_types, TRUE); +} static void -tp_call_stream_removed_cb (DBusGProxy *streamed_iface, - guint stream_id, - EmpathyTpCall *call) +tp_call_request_streams_capabilities_cb (EmpathyContact *contact, + GParamSpec *property, + gpointer user_data) { - EmpathyTpCallPriv *priv = GET_PRIV (call); + EmpathyTpCall *call = EMPATHY_TP_CALL (user_data); - empathy_debug (DEBUG_DOMAIN, "Stream removed: %d", stream_id); + g_signal_handlers_disconnect_by_func (contact, + tp_call_request_streams_capabilities_cb, + user_data); - if (stream_id == priv->audio_stream) { - priv->audio_stream = 0; - } - else if (stream_id == priv->video_stream) { - priv->video_stream = 0; - } + tp_call_request_streams_for_capabilities (call, + empathy_contact_get_capabilities (contact)); } static void -tp_call_list_streams_cb (DBusGProxy *proxy, - GPtrArray *streams, - GError *error, - gpointer user_data) -{ - guint i; - - if (error) { - empathy_debug (DEBUG_DOMAIN, "Failed to list streams: %s", - error->message); - return; - } - - for (i = 0; i < streams->len; i++) { - GValueArray *values; - guint stream_id; - guint contact_handle; - guint stream_type; - - values = g_ptr_array_index (streams, i); - stream_id = g_value_get_uint (g_value_array_get_nth (values, 0)); - contact_handle = g_value_get_uint (g_value_array_get_nth (values, 1)); - stream_type = g_value_get_uint (g_value_array_get_nth (values, 2)); - - tp_call_stream_added_cb (proxy, - stream_id, - contact_handle, - stream_type, - user_data); - } +tp_call_request_streams (EmpathyTpCall *call) +{ + EmpathyTpCallPriv *priv = GET_PRIV (call); + EmpathyCapabilities capabilities; + DBusGProxy *capabilities_iface; + + empathy_debug (DEBUG_DOMAIN, + "Requesting appropriate audio/video streams from contact"); + + + /* FIXME: SIP don't have capabilities interface but we know it supports + * only audio and not video. */ + capabilities_iface = tp_conn_get_interface (priv->connection, + TP_IFACE_QUARK_CONNECTION_INTERFACE_CAPABILITIES); + if (!capabilities_iface) + { + capabilities = EMPATHY_CAPABILITIES_AUDIO; + } + else + { + capabilities = empathy_contact_get_capabilities (priv->contact); + if (capabilities == EMPATHY_CAPABILITIES_UNKNOWN) + { + g_signal_connect (priv->contact, "notify::capabilities", + G_CALLBACK (tp_call_request_streams_capabilities_cb), call); + return; + } + } + + tp_call_request_streams_for_capabilities (call, capabilities); +} + +static void +tp_call_is_ready (EmpathyTpCall *call) +{ + EmpathyTpCallPriv *priv = GET_PRIV (call); + EmpathyContact *self_contact; + GList *members; + GList *local_pendings; + GList *remote_pendings; + + if (priv->status > EMPATHY_TP_CALL_STATUS_READYING) + return; + + members = empathy_tp_group_get_members (priv->group); + if (!members) + return; + + self_contact = empathy_tp_group_get_self_contact (priv->group); + local_pendings = empathy_tp_group_get_local_pendings (priv->group); + remote_pendings = empathy_tp_group_get_remote_pendings (priv->group); + + if (local_pendings && + empathy_contact_equal (EMPATHY_CONTACT (((EmpathyPendingInfo *) + local_pendings->data)->member), self_contact)) + { + empathy_debug (DEBUG_DOMAIN, + "Incoming call is ready - %p", + ((EmpathyPendingInfo *) local_pendings->data)->member); + priv->is_incoming = TRUE; + priv->contact = g_object_ref (members->data); + } + else if (remote_pendings && + empathy_contact_equal (EMPATHY_CONTACT (members->data), self_contact)) + { + empathy_debug (DEBUG_DOMAIN, + "Outgoing call is ready - %p", remote_pendings->data); + priv->is_incoming = FALSE; + priv->contact = g_object_ref (remote_pendings->data); + tp_call_request_streams (call); + } + + g_object_unref (self_contact); + g_list_foreach (members, (GFunc) g_object_unref, NULL); + g_list_free (members); + g_list_foreach (local_pendings, (GFunc) empathy_pending_info_free, NULL); + g_list_free (local_pendings); + g_list_foreach (remote_pendings, (GFunc) g_object_unref, NULL); + g_list_free (remote_pendings); + + if (priv->contact) + { + priv->status = EMPATHY_TP_CALL_STATUS_PENDING; + g_signal_emit (call, signals[STATUS_CHANGED_SIGNAL], 0); + } } static void tp_call_member_added_cb (EmpathyTpGroup *group, - EmpathyContact *contact, - EmpathyContact *actor, - guint reason, - const gchar *message, - EmpathyTpCall *call) -{ - EmpathyTpCallPriv *priv = GET_PRIV (call); - - empathy_debug (DEBUG_DOMAIN, "Members added %s (%d)", - empathy_contact_get_id (contact), - empathy_contact_get_handle (contact)); - - if (!priv->contact) { - if (!empathy_contact_is_user (contact)) { - priv->is_incoming = TRUE; - priv->contact = g_object_ref (contact); - tp_call_set_status (call, EMPATHY_TP_CALL_STATUS_RINGING); - } - return; - } - - /* We already have the other contact, that means we now have 2 members, - * so we can start the call */ - tp_call_set_status (call, EMPATHY_TP_CALL_STATUS_RUNNING); + EmpathyContact *contact, + EmpathyContact *actor, + guint reason, + const gchar *message, + EmpathyTpCall *call) +{ + EmpathyTpCallPriv *priv = GET_PRIV (call); + + empathy_debug (DEBUG_DOMAIN, "New member added callback %p", contact); + tp_call_is_ready (call); + + if (priv->status == EMPATHY_TP_CALL_STATUS_PENDING) + { + if ((priv->is_incoming && + !empathy_contact_equal (contact, priv->contact)) + || (!priv->is_incoming && + empathy_contact_equal (contact, priv->contact))) + { + priv->status = EMPATHY_TP_CALL_STATUS_ACCEPTED; + g_signal_emit (call, signals[STATUS_CHANGED_SIGNAL], 0); + } + } +} + +static void +tp_call_local_pending_cb (EmpathyTpGroup *group, + EmpathyContact *contact, + EmpathyContact *actor, + guint reason, + const gchar *message, + EmpathyTpCall *call) +{ + empathy_debug (DEBUG_DOMAIN, "New local pending added callback %p", contact); + tp_call_is_ready (call); } static void tp_call_remote_pending_cb (EmpathyTpGroup *group, - EmpathyContact *contact, - EmpathyContact *actor, - guint reason, - const gchar *message, - EmpathyTpCall *call) -{ - EmpathyTpCallPriv *priv = GET_PRIV (call); - - empathy_debug (DEBUG_DOMAIN, "Remote pending: %s (%d)", - empathy_contact_get_id (contact), - empathy_contact_get_handle (contact)); - - if (!priv->contact) { - priv->is_incoming = FALSE; - priv->contact = g_object_ref (contact); - tp_call_set_status (call, EMPATHY_TP_CALL_STATUS_RINGING); - } + EmpathyContact *contact, + EmpathyContact *actor, + guint reason, + const gchar *message, + EmpathyTpCall *call) +{ + empathy_debug (DEBUG_DOMAIN, "New remote pending added callback %p", contact); + tp_call_is_ready (call); } static void -tp_call_async_cb (DBusGProxy *proxy, - GError *error, - gpointer user_data) -{ - if (error) { - empathy_debug (DEBUG_DOMAIN, "Failed to %s: %s", - user_data, - error->message); - } +tp_call_start_stream_engine (EmpathyTpCall *call) +{ + EmpathyTpCallPriv *priv = GET_PRIV (call); + DBusGProxy *ch_proxy; + GError *error = NULL; + + empathy_debug (DEBUG_DOMAIN, "Revving up the stream engine"); + + ch_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), STREAM_ENGINE_BUS_NAME, + STREAM_ENGINE_OBJECT_PATH, CHANNEL_HANDLER_INTERFACE); + + if (!org_freedesktop_Telepathy_ChannelHandler_handle_channel (ch_proxy, + dbus_g_proxy_get_bus_name (DBUS_G_PROXY (priv->connection)), + dbus_g_proxy_get_path (DBUS_G_PROXY (priv->connection)), + priv->channel->type, + dbus_g_proxy_get_path (DBUS_G_PROXY (priv->channel)), + priv->channel->handle_type, priv->channel->handle, &error)) + { + empathy_debug (DEBUG_DOMAIN, "Couldn't start stream engine: %s", + error->message); + g_clear_error (&error); + } } static GObject * -tp_call_constructor (GType type, - guint n_props, - GObjectConstructParam *props) -{ - GObject *call; - EmpathyTpCallPriv *priv; - TpConn *tp_conn; - MissionControl *mc; - - call = G_OBJECT_CLASS (empathy_tp_call_parent_class)->constructor (type, n_props, props); - priv = GET_PRIV (call); - - priv->group = empathy_tp_group_new (priv->account, priv->tp_chan); - priv->streamed_iface = tp_chan_get_interface (priv->tp_chan, - TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA); - - /* Connect signals */ - dbus_g_proxy_connect_signal (priv->streamed_iface, "StreamAdded", - G_CALLBACK (tp_call_stream_added_cb), - call, NULL); - dbus_g_proxy_connect_signal (priv->streamed_iface, "StreamRemoved", - G_CALLBACK (tp_call_stream_removed_cb), - call, NULL); - dbus_g_proxy_connect_signal (DBUS_G_PROXY (priv->tp_chan), "Closed", - G_CALLBACK (tp_call_closed_cb), - call, NULL); - g_signal_connect (priv->tp_chan, "destroy", - G_CALLBACK (tp_call_destroy_cb), - call); - g_signal_connect (priv->group, "member-added", - G_CALLBACK (tp_call_member_added_cb), - call); - g_signal_connect (priv->group, "remote-pending", - G_CALLBACK (tp_call_remote_pending_cb), - call); - - /* Start stream engine */ - mc = empathy_mission_control_new (); - tp_conn = mission_control_get_connection (mc, priv->account, NULL); - priv->se_ch_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), - STREAM_ENGINE_BUS_NAME, - STREAM_ENGINE_OBJECT_PATH, - CHANNEL_HANDLER_INTERFACE); - priv->se_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), - STREAM_ENGINE_BUS_NAME, - STREAM_ENGINE_OBJECT_PATH, - STREAM_ENGINE_INTERFACE); - org_freedesktop_Telepathy_ChannelHandler_handle_channel_async (priv->se_ch_proxy, - dbus_g_proxy_get_bus_name (DBUS_G_PROXY (tp_conn)), - dbus_g_proxy_get_path (DBUS_G_PROXY (tp_conn)), - priv->tp_chan->type, - dbus_g_proxy_get_path (DBUS_G_PROXY (priv->tp_chan)), - priv->tp_chan->handle_type, - priv->tp_chan->handle, - tp_call_async_cb, - "handle channel"); - g_object_unref (tp_conn); - g_object_unref (mc); - - /* Get streams */ - tp_chan_type_streamed_media_list_streams_async (priv->streamed_iface, - tp_call_list_streams_cb, - call); - - return call; +tp_call_constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params) +{ + GObject *object; + EmpathyTpCall *call; + EmpathyTpCallPriv *priv; + DBusGProxy *streamed_iface; + MissionControl *mc; + McAccount *account; + + object = G_OBJECT_CLASS (empathy_tp_call_parent_class)->constructor (type, + n_construct_params, construct_params); + + call = EMPATHY_TP_CALL (object); + priv = GET_PRIV (call); + + dbus_g_proxy_connect_signal (DBUS_G_PROXY (priv->channel), "Closed", + G_CALLBACK (tp_call_channel_closed_cb), (gpointer) call, NULL); + + streamed_iface = tp_chan_get_interface (priv->channel, + TELEPATHY_CHAN_IFACE_STREAMED_QUARK); + dbus_g_proxy_connect_signal (streamed_iface, "StreamStateChanged", + G_CALLBACK (tp_call_stream_state_changed_cb), + (gpointer) call, NULL); + dbus_g_proxy_connect_signal (streamed_iface, "StreamDirectionChanged", + G_CALLBACK (tp_call_stream_direction_changed_cb), + (gpointer) call, NULL); + dbus_g_proxy_connect_signal (streamed_iface, "StreamAdded", + G_CALLBACK (tp_call_stream_added_cb), (gpointer) call, NULL); + dbus_g_proxy_connect_signal (streamed_iface, "StreamRemoved", + G_CALLBACK (tp_call_stream_removed_cb), (gpointer) call, NULL); + + mc = empathy_mission_control_new (); + account = mission_control_get_account_for_connection (mc, priv->connection, + NULL); + priv->group = empathy_tp_group_new (account, priv->channel); + + g_signal_connect (G_OBJECT (priv->group), "member-added", + G_CALLBACK (tp_call_member_added_cb), (gpointer) call); + g_signal_connect (G_OBJECT (priv->group), "local-pending", + G_CALLBACK (tp_call_local_pending_cb), (gpointer) call); + g_signal_connect (G_OBJECT (priv->group), "remote-pending", + G_CALLBACK (tp_call_remote_pending_cb), (gpointer) call); + + tp_call_start_stream_engine (call); + /* FIXME: unnecessary for outgoing? */ + tp_call_identify_streams (call); + + return object; } -static void +static void tp_call_finalize (GObject *object) { - EmpathyTpCallPriv *priv = GET_PRIV (object); - - empathy_debug (DEBUG_DOMAIN, "Finalizing: %p", object); - - if (priv->tp_chan) { - GError *error = NULL; - - g_signal_handlers_disconnect_by_func (priv->tp_chan, - tp_call_destroy_cb, - object); - empathy_debug (DEBUG_DOMAIN, "Closing channel..."); - if (!tp_chan_close (DBUS_G_PROXY (priv->tp_chan), &error)) { - empathy_debug (DEBUG_DOMAIN, - "Error closing text channel: %s", - error ? error->message : "No error given"); - g_clear_error (&error); - } - g_object_unref (priv->tp_chan); - } - - g_object_unref (priv->group); - g_object_unref (priv->contact); - g_object_unref (priv->account); - g_object_unref (priv->se_ch_proxy); - g_object_unref (priv->se_proxy); - - G_OBJECT_CLASS (empathy_tp_call_parent_class)->finalize (object); + EmpathyTpCallPriv *priv = GET_PRIV (object); + + empathy_debug (DEBUG_DOMAIN, "Finalizing: %p", object); + + g_slice_free (EmpathyTpCallStream, priv->audio); + g_slice_free (EmpathyTpCallStream, priv->video); + g_object_unref (priv->group); + + if (priv->connection != NULL) + g_object_unref (priv->connection); + + if (priv->channel != NULL) + g_object_unref (priv->channel); + + if (priv->contact) + { + g_object_unref (priv->contact); + } + + (G_OBJECT_CLASS (empathy_tp_call_parent_class)->finalize) (object); +} + +static void +tp_call_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EmpathyTpCallPriv *priv = GET_PRIV (object); + + switch (prop_id) + { + case PROP_CONNECTION: + priv->connection = g_value_dup_object (value); + break; + case PROP_CHANNEL: + priv->channel = g_value_dup_object (value); + break; + case PROP_CONTACT: + /* FIXME should this one be writable in the first place ? */ + g_assert (priv->contact == NULL); + priv->contact = g_value_dup_object (value); + break; + case PROP_IS_INCOMING: + priv->is_incoming = g_value_get_boolean (value); + break; + case PROP_STATUS: + priv->status = g_value_get_uint (value); + break; + case PROP_AUDIO_STREAM: + priv->audio = g_value_get_pointer (value); + break; + case PROP_VIDEO_STREAM: + priv->video = g_value_get_pointer (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + +static void +tp_call_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyTpCallPriv *priv = GET_PRIV (object); + + switch (prop_id) + { + case PROP_CONNECTION: + g_value_set_object (value, priv->connection); + break; + case PROP_CHANNEL: + g_value_set_object (value, priv->channel); + break; + case PROP_CONTACT: + g_value_set_object (value, priv->contact); + break; + case PROP_IS_INCOMING: + g_value_set_boolean (value, priv->is_incoming); + break; + case PROP_STATUS: + g_value_set_uint (value, priv->status); + break; + case PROP_AUDIO_STREAM: + g_value_set_pointer (value, priv->audio); + break; + case PROP_VIDEO_STREAM: + g_value_set_pointer (value, priv->video); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void empathy_tp_call_class_init (EmpathyTpCallClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->constructor = tp_call_constructor; - object_class->finalize = tp_call_finalize; - object_class->set_property = tp_call_set_property; - object_class->get_property = tp_call_get_property; - - /* Construct-only properties */ - g_object_class_install_property (object_class, - PROP_ACCOUNT, - g_param_spec_object ("account", - "channel Account", - "The account associated with the channel", - MC_TYPE_ACCOUNT, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property (object_class, - PROP_TP_CHAN, - g_param_spec_object ("tp-chan", - "telepathy channel", - "The media channel for the call", - TELEPATHY_CHAN_TYPE, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY)); - - /* Normal properties */ - g_object_class_install_property (object_class, - PROP_STATUS, - g_param_spec_enum ("status", - "call status", - "The status of the call", - EMPATHY_TYPE_TP_CALL_STATUS, - EMPATHY_TP_CALL_STATUS_PREPARING, - G_PARAM_READABLE)); - - /* Signals */ - signals[DESTROY] = - g_signal_new ("destroy", - 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 (klass, sizeof (EmpathyTpCallPriv)); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->constructor = tp_call_constructor; + object_class->finalize = tp_call_finalize; + object_class->set_property = tp_call_set_property; + object_class->get_property = tp_call_get_property; + + g_type_class_add_private (klass, sizeof (EmpathyTpCallPriv)); + + signals[STATUS_CHANGED_SIGNAL] = + g_signal_new ("status-changed", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + signals[RECEIVING_VIDEO_SIGNAL] = + g_signal_new ("receiving-video", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, 1, G_TYPE_BOOLEAN); + signals[SENDING_VIDEO_SIGNAL] = + g_signal_new ("sending-video", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, 1, G_TYPE_BOOLEAN); + + g_object_class_install_property (object_class, PROP_CONNECTION, + g_param_spec_object ("connection", "connection", "connection", + TELEPATHY_CONN_TYPE, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | + G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + g_object_class_install_property (object_class, PROP_CHANNEL, + g_param_spec_object ("channel", "channel", "channel", + TELEPATHY_CHAN_TYPE, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | + G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + g_object_class_install_property (object_class, PROP_CONTACT, + g_param_spec_object ("contact", "Call contact", "Call contact", + EMPATHY_TYPE_CONTACT, + G_PARAM_READABLE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + g_object_class_install_property (object_class, PROP_IS_INCOMING, + g_param_spec_boolean ("is-incoming", "Is media stream incoming", + "Is media stream incoming", FALSE, G_PARAM_READABLE | + G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + g_object_class_install_property (object_class, PROP_STATUS, + g_param_spec_uint ("status", "Call status", + "Call status", 0, 255, 0, G_PARAM_READABLE | G_PARAM_STATIC_NICK | + G_PARAM_STATIC_BLURB)); + g_object_class_install_property (object_class, PROP_AUDIO_STREAM, + g_param_spec_pointer ("audio-stream", "Audio stream data", + "Audio stream data", + G_PARAM_READABLE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + g_object_class_install_property (object_class, PROP_VIDEO_STREAM, + g_param_spec_pointer ("video-stream", "Video stream data", + "Video stream data", + G_PARAM_READABLE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); } static void empathy_tp_call_init (EmpathyTpCall *call) { + EmpathyTpCallPriv *priv = GET_PRIV (call); + + priv->status = EMPATHY_TP_CALL_STATUS_READYING; + priv->contact = NULL; + priv->audio = g_slice_new0 (EmpathyTpCallStream); + priv->video = g_slice_new0 (EmpathyTpCallStream); + priv->audio->exists = FALSE; + priv->video->exists = FALSE; } EmpathyTpCall * -empathy_tp_call_new (McAccount *account, TpChan *channel) +empathy_tp_call_new (TpConn *connection, TpChan *channel) { - return g_object_new (EMPATHY_TYPE_TP_CALL, - "account", account, - "tp_chan", channel, - NULL); + return g_object_new (EMPATHY_TYPE_TP_CALL, + "connection", connection, + "channel", channel, + NULL); } -gboolean -empathy_tp_call_is_incoming (EmpathyTpCall *call) +void +empathy_tp_call_accept_incoming_call (EmpathyTpCall *call) { - EmpathyTpCallPriv *priv = GET_PRIV (call); + EmpathyTpCallPriv *priv = GET_PRIV (call); + GList *local_pendings; - return priv->is_incoming; -} + empathy_debug (DEBUG_DOMAIN, "Accepting incoming call"); -EmpathyTpCallStatus -empathy_tp_call_get_status (EmpathyTpCall *call) -{ - EmpathyTpCallPriv *priv = GET_PRIV (call); + local_pendings = empathy_tp_group_get_local_pendings (priv->group); + + empathy_tp_group_add_member (priv->group, EMPATHY_CONTACT + (((EmpathyPendingInfo *) local_pendings->data)->member), NULL); - return priv->status; + g_list_foreach (local_pendings, (GFunc) empathy_pending_info_free, NULL); + g_list_free (local_pendings); } -EmpathyContact * -empathy_tp_call_get_contact (EmpathyTpCall *call) +void +empathy_tp_call_request_video_stream_direction (EmpathyTpCall *call, + gboolean is_sending) { - EmpathyTpCallPriv *priv = GET_PRIV (call); - - return priv->contact; + EmpathyTpCallPriv *priv = GET_PRIV (call); + DBusGProxy *streamed_iface; + guint new_direction; + GError *error = NULL; + + empathy_debug (DEBUG_DOMAIN, + "Requesting video stream direction - is_sending: %d", is_sending); + + if (!priv->video->exists) + { + tp_call_request_streams_for_capabilities (call, EMPATHY_CAPABILITIES_VIDEO); + return; + } + + streamed_iface = tp_chan_get_interface (priv->channel, + TELEPATHY_CHAN_IFACE_STREAMED_QUARK); + + if (is_sending) + { + new_direction = priv->video->direction | TP_MEDIA_STREAM_DIRECTION_SEND; + } + else + { + new_direction = priv->video->direction & ~TP_MEDIA_STREAM_DIRECTION_SEND; + } + + if (!tp_chan_type_streamed_media_request_stream_direction (streamed_iface, + priv->video->id, new_direction, &error)) + { + empathy_debug (DEBUG_DOMAIN, + "Couldn't request video stream direction: %s", error->message); + g_clear_error (&error); + } } void -empathy_tp_call_accept (EmpathyTpCall *call) +empathy_tp_call_close_channel (EmpathyTpCall *call) { - EmpathyTpCallPriv *priv = GET_PRIV (call); - EmpathyContact *contact; + EmpathyTpCallPriv *priv = GET_PRIV (call); + GError *error = NULL; - contact = empathy_tp_group_get_self_contact (priv->group); - empathy_tp_group_add_member (priv->group, contact, ""); + empathy_debug (DEBUG_DOMAIN, "Closing channel"); + + if (!tp_chan_close (DBUS_G_PROXY (priv->channel), &error)) + { + empathy_debug (DEBUG_DOMAIN, "Error closing channel: %s", + error ? error->message : "No error given"); + g_clear_error (&error); + } } void -empathy_tp_call_invite (EmpathyTpCall *call, - EmpathyContact *contact) +empathy_tp_call_add_preview_video (guint preview_video_socket_id) { - EmpathyTpCallPriv *priv = GET_PRIV (call); + GError *error = NULL; + DBusGProxy *ch_proxy; - empathy_tp_group_add_member (priv->group, contact, "you're welcome"); -} + empathy_debug (DEBUG_DOMAIN, "Adding preview video"); -void -empathy_tp_call_request_streams (EmpathyTpCall *call, - gboolean audio, - gboolean video) -{ - EmpathyTpCallPriv *priv = GET_PRIV (call); - GArray *stream_types; - guint handle; - guint type; - - empathy_debug (DEBUG_DOMAIN, "Requesting streams for audio=%s video=%s", - audio ? "Yes" : "No", - video ? "Yes" : "No"); - - stream_types = g_array_new (FALSE, FALSE, sizeof (guint)); - if (audio) { - type = TP_MEDIA_STREAM_TYPE_AUDIO; - g_array_append_val (stream_types, type); - } - if (video) { - type = TP_MEDIA_STREAM_TYPE_VIDEO; - g_array_append_val (stream_types, type); - } - - handle = empathy_contact_get_handle (priv->contact); - tp_chan_type_streamed_media_request_streams_async (priv->streamed_iface, - handle, - stream_types, - tp_call_list_streams_cb, - call); - - g_array_free (stream_types, TRUE); -} + ch_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), STREAM_ENGINE_BUS_NAME, + STREAM_ENGINE_OBJECT_PATH, STREAM_ENGINE_INTERFACE); -void -empathy_tp_call_send_video (EmpathyTpCall *call, - gboolean send) -{ - EmpathyTpCallPriv *priv = GET_PRIV (call); - guint new_direction; - - if (!priv->video_stream) { - return; - } - - if (send) { - new_direction = TP_MEDIA_STREAM_DIRECTION_BIDIRECTIONAL; - } else { - new_direction = TP_MEDIA_STREAM_DIRECTION_RECEIVE; - } - - tp_chan_type_streamed_media_request_stream_direction_async (priv->streamed_iface, - priv->video_stream, - new_direction, - tp_call_async_cb, - "request stream direction"); + if (!org_freedesktop_Telepathy_StreamEngine_add_preview_window (ch_proxy, + preview_video_socket_id, &error)) + { + empathy_debug (DEBUG_DOMAIN, "Couldn't set video preview: %s", + error->message); + g_clear_error (&error); + } } void -empathy_tp_call_add_preview_window (EmpathyTpCall *call, - guint socket_id) +empathy_tp_call_remove_preview_video (guint preview_video_socket_id) { - EmpathyTpCallPriv *priv = GET_PRIV (call); + GError *error = NULL; + DBusGProxy *ch_proxy; - org_freedesktop_Telepathy_StreamEngine_add_preview_window_async (priv->se_proxy, - socket_id, - tp_call_async_cb, - "add preview window"); -} + empathy_debug (DEBUG_DOMAIN, "Removing preview video"); -void -empathy_tp_call_remove_preview_window (EmpathyTpCall *call, - guint socket_id) -{ - EmpathyTpCallPriv *priv = GET_PRIV (call); + ch_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), STREAM_ENGINE_BUS_NAME, + STREAM_ENGINE_OBJECT_PATH, STREAM_ENGINE_INTERFACE); - org_freedesktop_Telepathy_StreamEngine_remove_preview_window_async (priv->se_proxy, - socket_id, - tp_call_async_cb, - "remove preview window"); + if (!org_freedesktop_Telepathy_StreamEngine_remove_preview_window (ch_proxy, + preview_video_socket_id, &error)) + { + empathy_debug (DEBUG_DOMAIN, "Couldn't set video preview: %s", + error->message); + g_clear_error (&error); + } } void -empathy_tp_call_set_output_window (EmpathyTpCall *call, - guint socket_id) +empathy_tp_call_add_output_video (EmpathyTpCall *call, + guint output_video_socket_id) { - EmpathyTpCallPriv *priv = GET_PRIV (call); - - org_freedesktop_Telepathy_StreamEngine_set_output_window_async (priv->se_proxy, - dbus_g_proxy_get_path (DBUS_G_PROXY (priv->tp_chan)), - priv->video_stream, - socket_id, - tp_call_async_cb, - "set output window"); + EmpathyTpCallPriv *priv = GET_PRIV (call); + const gchar *object_path; + DBusGProxy *ch_proxy; + GError *error = NULL; + + empathy_debug (DEBUG_DOMAIN, "Adding output video - socket: %d", + output_video_socket_id); + + object_path = dbus_g_proxy_get_path (DBUS_G_PROXY (priv->channel)); + ch_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), STREAM_ENGINE_BUS_NAME, + STREAM_ENGINE_OBJECT_PATH, STREAM_ENGINE_INTERFACE); + + if (!org_freedesktop_Telepathy_StreamEngine_set_output_window (ch_proxy, + object_path, priv->video->id, output_video_socket_id, &error)) + { + empathy_debug (DEBUG_DOMAIN, "Couldn't set video output: %s", + error->message); + g_clear_error (&error); + } } void empathy_tp_call_set_output_volume (EmpathyTpCall *call, - guint volume) + guint volume) { - EmpathyTpCallPriv *priv = GET_PRIV (call); - - org_freedesktop_Telepathy_StreamEngine_set_output_volume_async (priv->se_proxy, - dbus_g_proxy_get_path (DBUS_G_PROXY (priv->tp_chan)), - priv->audio_stream, - volume, - tp_call_async_cb, - "set output volume"); + EmpathyTpCallPriv *priv = GET_PRIV (call); + const gchar *object_path; + DBusGProxy *ch_proxy; + GError *error = NULL; + + if (priv->status == EMPATHY_TP_CALL_STATUS_CLOSED) + return; + + empathy_debug (DEBUG_DOMAIN, "Setting output volume: %d", volume); + + object_path = dbus_g_proxy_get_path (DBUS_G_PROXY (priv->channel)); + ch_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), STREAM_ENGINE_BUS_NAME, + STREAM_ENGINE_OBJECT_PATH, STREAM_ENGINE_INTERFACE); + + if (!org_freedesktop_Telepathy_StreamEngine_set_output_volume (ch_proxy, + object_path, priv->audio->id, volume, &error)) + { + empathy_debug (DEBUG_DOMAIN, "Couldn't set volume: %s", error->message); + g_clear_error (&error); + } } void empathy_tp_call_mute_output (EmpathyTpCall *call, - gboolean is_muted) + gboolean is_muted) { - EmpathyTpCallPriv *priv = GET_PRIV (call); - - org_freedesktop_Telepathy_StreamEngine_mute_output_async (priv->se_proxy, - dbus_g_proxy_get_path (DBUS_G_PROXY (priv->tp_chan)), - priv->audio_stream, - is_muted, - tp_call_async_cb, - "mute output"); + EmpathyTpCallPriv *priv = GET_PRIV (call); + const gchar *object_path; + DBusGProxy *ch_proxy; + GError *error = NULL; + + if (priv->status == EMPATHY_TP_CALL_STATUS_CLOSED) + return; + + empathy_debug (DEBUG_DOMAIN, "Setting output mute: %d", is_muted); + + object_path = dbus_g_proxy_get_path (DBUS_G_PROXY (priv->channel)); + ch_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), STREAM_ENGINE_BUS_NAME, + STREAM_ENGINE_OBJECT_PATH, STREAM_ENGINE_INTERFACE); + + if (!org_freedesktop_Telepathy_StreamEngine_mute_output (ch_proxy, + object_path, priv->audio->id, is_muted, &error)) + { + empathy_debug (DEBUG_DOMAIN, "Couldn't mute output: %s", error->message); + g_clear_error (&error); + } } - void empathy_tp_call_mute_input (EmpathyTpCall *call, - gboolean is_muted) + gboolean is_muted) { - EmpathyTpCallPriv *priv = GET_PRIV (call); - - org_freedesktop_Telepathy_StreamEngine_mute_input_async (priv->se_proxy, - dbus_g_proxy_get_path (DBUS_G_PROXY (priv->tp_chan)), - priv->audio_stream, - is_muted, - tp_call_async_cb, - "mute output"); + EmpathyTpCallPriv *priv = GET_PRIV (call); + const gchar *object_path; + DBusGProxy *ch_proxy; + GError *error = NULL; + + if (priv->status == EMPATHY_TP_CALL_STATUS_CLOSED) + return; + + empathy_debug (DEBUG_DOMAIN, "Setting input mute: %d", is_muted); + + object_path = dbus_g_proxy_get_path (DBUS_G_PROXY (priv->channel)); + ch_proxy = dbus_g_proxy_new_for_name (tp_get_bus (), STREAM_ENGINE_BUS_NAME, + STREAM_ENGINE_OBJECT_PATH, STREAM_ENGINE_INTERFACE); + + if (!org_freedesktop_Telepathy_StreamEngine_mute_input (ch_proxy, + object_path, priv->audio->id, is_muted, &error)) + { + empathy_debug (DEBUG_DOMAIN, "Couldn't mute input: %s", error->message); + g_clear_error (&error); + } } diff --git a/libempathy/empathy-tp-call.h b/libempathy/empathy-tp-call.h index 13ab33fcb..69f873425 100644 --- a/libempathy/empathy-tp-call.h +++ b/libempathy/empathy-tp-call.h @@ -1,88 +1,90 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Copyright (C) 2007 Elliot Fairweather - * Copyright (C) 2007 Collabora Ltd. + * Copyright (C) 2007 Elliot Fairweather * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This library 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 - * Lesser General Public License for more details. + * This library 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 + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * - * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> - * Xavier Claessens <xclaesse@gmail.com> + * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> */ #ifndef __EMPATHY_TP_CALL_H__ #define __EMPATHY_TP_CALL_H__ #include <libtelepathy/tp-chan.h> -#include <libtelepathy/tp-constants.h> +#include <libtelepathy/tp-conn.h> -#include <libmissioncontrol/mc-account.h> +#include <libmissioncontrol/mission-control.h> -#include "empathy-contact.h" +#include <libempathy/empathy-chandler.h> +#include <libempathy/empathy-contact.h> +#include <libempathy/empathy-tp-group.h> G_BEGIN_DECLS -#define EMPATHY_TYPE_TP_CALL (empathy_tp_call_get_type ()) -#define EMPATHY_TP_CALL(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), EMPATHY_TYPE_TP_CALL, EmpathyTpCall)) -#define EMPATHY_TP_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_TP_CALL, EmpathyTpCallClass)) -#define EMPATHY_IS_TP_CALL(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), EMPATHY_TYPE_TP_CALL)) -#define EMPATHY_IS_TP_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_TP_CALL)) -#define EMPATHY_TP_CALL_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), EMPATHY_TYPE_TP_CALL, EmpathyTpCallClass)) +#define EMPATHY_TYPE_TP_CALL (empathy_tp_call_get_type ()) +#define EMPATHY_TP_CALL(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), \ + EMPATHY_TYPE_TP_CALL, EmpathyTpCall)) +#define EMPATHY_TP_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ + EMPATHY_TYPE_TP_CALL, EmpathyTpCallClass)) +#define EMPATHY_IS_TP_CALL(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), \ + EMPATHY_TYPE_TP_CALL)) +#define EMPATHY_IS_TP_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ + EMPATHY_TYPE_TP_CALL)) +#define EMPATHY_TP_CALL_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), \ + EMPATHY_TYPE_TP_CALL, EmpathyTpCallClass)) typedef struct _EmpathyTpCall EmpathyTpCall; typedef struct _EmpathyTpCallClass EmpathyTpCallClass; struct _EmpathyTpCall { - GObject parent; + GObject parent; }; struct _EmpathyTpCallClass { - GObjectClass parent_class; + GObjectClass parent_class; }; -typedef enum { - EMPATHY_TP_CALL_STATUS_PREPARING, - EMPATHY_TP_CALL_STATUS_RINGING, - EMPATHY_TP_CALL_STATUS_RUNNING +typedef enum +{ + EMPATHY_TP_CALL_STATUS_READYING, + EMPATHY_TP_CALL_STATUS_PENDING, + EMPATHY_TP_CALL_STATUS_ACCEPTED, + EMPATHY_TP_CALL_STATUS_CLOSED } EmpathyTpCallStatus; -GType empathy_tp_call_get_type (void) G_GNUC_CONST; -EmpathyTpCall * empathy_tp_call_new (McAccount *account, - TpChan *tp_chan); -gboolean empathy_tp_call_is_incoming (EmpathyTpCall *call); -EmpathyTpCallStatus empathy_tp_call_get_status (EmpathyTpCall *call); -EmpathyContact * empathy_tp_call_get_contact (EmpathyTpCall *call); -void empathy_tp_call_accept (EmpathyTpCall *call); -void empathy_tp_call_invite (EmpathyTpCall *call, - EmpathyContact *contact); -void empathy_tp_call_request_streams (EmpathyTpCall *call, - gboolean audio, - gboolean video); -void empathy_tp_call_send_video (EmpathyTpCall *call, - gboolean send); -void empathy_tp_call_add_preview_window (EmpathyTpCall *call, - guint socket_id); -void empathy_tp_call_remove_preview_window (EmpathyTpCall *call, - guint socket_id); -void empathy_tp_call_set_output_window (EmpathyTpCall *call, - guint socket_id); -void empathy_tp_call_set_output_volume (EmpathyTpCall *call, - guint volume); -void empathy_tp_call_mute_output (EmpathyTpCall *call, - gboolean is_muted); -void empathy_tp_call_mute_input (EmpathyTpCall *call, - gboolean is_muted); +typedef struct +{ + gboolean exists; + guint id; + guint state; + guint direction; +} EmpathyTpCallStream; + +GType empathy_tp_call_get_type (void) G_GNUC_CONST; +EmpathyTpCall *empathy_tp_call_new (TpConn *connection, TpChan *channel); + +void empathy_tp_call_accept_incoming_call (EmpathyTpCall *call); +void empathy_tp_call_close_channel (EmpathyTpCall *call); +void empathy_tp_call_request_video_stream_direction (EmpathyTpCall *call, + gboolean is_sending); +void empathy_tp_call_add_preview_video (guint preview_video_socket_id); +void empathy_tp_call_remove_preview_video (guint preview_video_socket_id); +void empathy_tp_call_add_output_video (EmpathyTpCall *call, + guint output_video_socket_id); +void empathy_tp_call_set_output_volume (EmpathyTpCall *call, guint volume); +void empathy_tp_call_mute_output (EmpathyTpCall *call, gboolean is_muted); +void empathy_tp_call_mute_input (EmpathyTpCall *call, gboolean is_muted); G_END_DECLS diff --git a/libempathy/empathy-tp-contact-factory.c b/libempathy/empathy-tp-contact-factory.c index 77482522b..1cce6080c 100644 --- a/libempathy/empathy-tp-contact-factory.c +++ b/libempathy/empathy-tp-contact-factory.c @@ -535,6 +535,8 @@ tp_contact_factory_get_capabilities_cb (DBusGProxy *proxy, if (error) { empathy_debug (DEBUG_DOMAIN, "Error getting capabilities: %s", error->message); + /* FIXME Should set the capabilities of the contacts for which this request + * originated to NONE */ goto OUT; } diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index 796d23ddf..6bb346230 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -37,6 +37,7 @@ #include "empathy-debug.h" #include "empathy-utils.h" +#include "empathy-contact-factory.h" #include "empathy-contact-manager.h" #include "empathy-tp-group.h" @@ -397,36 +398,106 @@ empathy_inspect_handle (McAccount *account, } void -empathy_call_with_contact (EmpathyContact *contact) +empathy_call_with_contact (EmpathyContact *contact) { #ifdef HAVE_VOIP - MissionControl *mc; + MissionControl *mc; + McAccount *account; + TpConn *tp_conn; + gchar *object_path; + const gchar *bus_name; + TpChan *new_chan; + EmpathyContactFactory *factory; + EmpathyTpGroup *group; + EmpathyContact *self_contact; + GError *error = NULL; + + g_return_if_fail (EMPATHY_IS_CONTACT (contact)); + + /* StreamedMedia channels must have handle=0 and handle_type=none. + * To call a contact we have to add him in the group interface of the + * channel. MissionControl will detect the channel creation and + * dispatch it to the VoIP chandler automatically. */ mc = empathy_mission_control_new (); - mission_control_request_channel (mc, - empathy_contact_get_account (contact), - TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, - empathy_contact_get_handle (contact), - TP_HANDLE_TYPE_CONTACT, - NULL, NULL); + account = empathy_contact_get_account (contact); + tp_conn = mission_control_get_connection (mc, account, NULL); + /* FIXME: Should be async */ + if (!tp_conn_request_channel (DBUS_G_PROXY (tp_conn), + TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, + TP_HANDLE_TYPE_NONE, + 0, + FALSE, + &object_path, + &error)) { + empathy_debug (DEBUG_DOMAIN, + "Couldn't request channel: %s", + error ? error->message : "No error given"); + g_clear_error (&error); + g_object_unref (mc); + g_object_unref (tp_conn); + return; + } + + bus_name = dbus_g_proxy_get_bus_name (DBUS_G_PROXY (tp_conn)); + new_chan = tp_chan_new (tp_get_bus (), + bus_name, + object_path, + TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, + TP_HANDLE_TYPE_NONE, + 0); + + group = empathy_tp_group_new (account, new_chan); + factory = empathy_contact_factory_new (); + self_contact = empathy_contact_factory_get_user (factory, account); + empathy_tp_group_add_member (group, contact, ""); + empathy_tp_group_add_member (group, self_contact, ""); + + g_object_unref (factory); + g_object_unref (self_contact); + g_object_unref (group); g_object_unref (mc); + g_object_unref (tp_conn); + g_object_unref (new_chan); + g_free (object_path); #endif } +#ifdef HAVE_VOIP +static void +got_handle_cb (EmpathyContact *contact, + GParamSpec *property, + EmpathyContactFactory *factory) +{ + g_signal_handlers_disconnect_by_func (contact, + got_handle_cb, + factory); + + empathy_call_with_contact (contact); + g_object_unref (factory); + g_object_unref (contact); +} +#endif + void empathy_call_with_contact_id (McAccount *account, const gchar *contact_id) { #ifdef HAVE_VOIP - MissionControl *mc; + EmpathyContactFactory *factory; + EmpathyContact *contact; - mc = empathy_mission_control_new (); - mission_control_request_channel_with_string_handle (mc, - account, - TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, - contact_id, - TP_HANDLE_TYPE_CONTACT, - NULL, NULL); - g_object_unref (mc); + factory = empathy_contact_factory_new (); + contact = empathy_contact_factory_get_from_id (factory, account, contact_id); + + if (empathy_contact_get_handle (contact) != 0) { + empathy_call_with_contact (contact); + g_object_unref (contact); + g_object_unref (factory); + } else { + g_signal_connect (contact, "notify::handle", + G_CALLBACK (got_handle_cb), + factory); + } #endif } diff --git a/po/ChangeLog b/po/ChangeLog index 18eca9324..736312915 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,11 @@ +2008-02-14 Pawan Chitrakar <chautari@gmail.com> + + * ne.po: Updated Nepali Translation. + +2008-02-14 Ilkka Tuohela <hile@iki.fi> + + * fi.po: Updated Finnish translation. + 2008-02-9 Djihed Afifi <djihed@gmail.com> * ar.po: Updated Arabic Translation by Abou Manal. diff --git a/po/POTFILES.in b/po/POTFILES.in index d0a617fd2..6efa6b064 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -11,7 +11,7 @@ libempathy/empathy-utils.c libempathy-gtk/empathy-about-dialog.c libempathy-gtk/empathy-account-chooser.c -libempathy-gtk/empathy-account-widget-generic.c +libempathy-gtk/empathy-account-widget.c libempathy-gtk/empathy-account-widget-jabber.glade libempathy-gtk/empathy-account-widget-msn.glade libempathy-gtk/empathy-account-widget-salut.glade @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: empathy.HEAD\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-01-23 04:19+0000\n" -"PO-Revision-Date: 2008-01-27 13:47+0100\n" +"POT-Creation-Date: 2008-02-09 17:32+0000\n" +"PO-Revision-Date: 2008-02-11 11:58+0100\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" @@ -231,29 +231,29 @@ msgstr "" "predeterminado es ordenar por el nombre del contacto con el valor «nombre». " "Un valor «estado» ordenará la lista por el estado." -#: ../libempathy/empathy-presence.c:185 ../libempathy/empathy-presence.c:285 -msgid "Offline" -msgstr "Desconectado" +#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:151 +msgid "People nearby" +msgstr "Gente cerca" -#: ../libempathy/empathy-presence.c:275 +#: ../libempathy/empathy-utils.c:468 msgid "Available" msgstr "Disponible" -#: ../libempathy/empathy-presence.c:277 +#: ../libempathy/empathy-utils.c:470 msgid "Busy" msgstr "Ocupado" -#: ../libempathy/empathy-presence.c:280 +#: ../libempathy/empathy-utils.c:473 msgid "Away" msgstr "Ausente" -#: ../libempathy/empathy-presence.c:282 +#: ../libempathy/empathy-utils.c:475 msgid "Hidden" msgstr "Oculto" -#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:152 -msgid "People nearby" -msgstr "Gente cerca" +#: ../libempathy/empathy-utils.c:478 +msgid "Offline" +msgstr "Desconectado" #: ../libempathy-gtk/empathy-about-dialog.c:63 msgid "" @@ -437,12 +437,16 @@ msgstr "" msgid "<b>No Accounts Configured</b>" msgstr "<b>No hay ninguna cuenta configurada</b>" -#: ../libempathy-gtk/empathy-accounts-dialog.c:399 +#: ../libempathy-gtk/empathy-accounts-dialog.c:401 +msgid "Enabled" +msgstr "Activado" + +#: ../libempathy-gtk/empathy-accounts-dialog.c:411 #: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4 msgid "Accounts" msgstr "Cuentas" -#: ../libempathy-gtk/empathy-accounts-dialog.c:891 +#: ../libempathy-gtk/empathy-accounts-dialog.c:894 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -451,7 +455,7 @@ msgstr "" "Va a eliminar su cuenta %s\n" "¿Seguro que quiere continuar?" -#: ../libempathy-gtk/empathy-accounts-dialog.c:897 +#: ../libempathy-gtk/empathy-accounts-dialog.c:900 msgid "" "Any associated conversations and chat rooms will NOT be removed if you " "decide to proceed.\n" @@ -494,19 +498,19 @@ msgstr "" msgid "Type:" msgstr "Tipo:" -#: ../libempathy-gtk/empathy-avatar-chooser.c:448 +#: ../libempathy-gtk/empathy-avatar-chooser.c:449 msgid "Select Your Avatar Image" msgstr "Seleccione su imagen de avatar" -#: ../libempathy-gtk/empathy-avatar-chooser.c:451 +#: ../libempathy-gtk/empathy-avatar-chooser.c:452 msgid "No Image" msgstr "Sin imagen" -#: ../libempathy-gtk/empathy-avatar-chooser.c:511 +#: ../libempathy-gtk/empathy-avatar-chooser.c:512 msgid "Images" msgstr "Imágenes" -#: ../libempathy-gtk/empathy-avatar-chooser.c:515 +#: ../libempathy-gtk/empathy-avatar-chooser.c:516 msgid "All Files" msgstr "Todos los archivos" @@ -520,6 +524,7 @@ msgid "Call from %s" msgstr "Llamada de %s" #: ../libempathy-gtk/empathy-call-window.glade.h:1 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2 msgid "Call" msgstr "Llamar" @@ -598,9 +603,10 @@ msgstr "_Llamar" #: ../libempathy-gtk/empathy-chat.glade.h:3 msgid "Change _Topic..." -msgstr "Cambiar el _tema..." +msgstr "Cambiar el _tema…" #: ../libempathy-gtk/empathy-chat.glade.h:4 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3 msgid "Chat" msgstr "Chat" @@ -614,7 +620,7 @@ msgstr "Cor_tar" #: ../libempathy-gtk/empathy-chat.glade.h:7 msgid "In_vite..." -msgstr "In_vitar..." +msgstr "In_vitar…" #: ../libempathy-gtk/empathy-chat.glade.h:8 msgid "Insert _Smiley" @@ -891,11 +897,11 @@ msgstr "Iniciar una conversación de voz o vídeo con este contacto" msgid "Sorry, I don't want you in my contact list anymore." msgstr "Lo siento, no te quiero en mi lista de contactos." -#: ../libempathy-gtk/empathy-contact-widget.c:662 +#: ../libempathy-gtk/empathy-contact-widget.c:688 msgid "Select" msgstr "Seleccionar" -#: ../libempathy-gtk/empathy-contact-widget.c:672 +#: ../libempathy-gtk/empathy-contact-widget.c:698 #: ../libempathy-gtk/empathy-main-window.c:609 msgid "Group" msgstr "Grupo" @@ -946,7 +952,7 @@ msgstr "Identificador:" #: ../libempathy-gtk/empathy-contact-widget.glade.h:13 msgid "Information requested..." -msgstr "Información solicitada..." +msgstr "Información solicitada…" #: ../libempathy-gtk/empathy-contact-widget.glade.h:14 msgid "OS:" @@ -1168,8 +1174,8 @@ msgstr "_Cuentas" #: ../libempathy-gtk/empathy-main-window.glade.h:14 #: ../libempathy-gtk/empathy-status-icon.glade.h:2 -msgid "_New Message..." -msgstr "Mensaje _nuevo…" +msgid "_New Conversation..." +msgstr "_Conversación nueva…" #: ../libempathy-gtk/empathy-main-window.glade.h:15 msgid "_Personal Information" @@ -1185,15 +1191,15 @@ msgstr "_Preferencias" msgid "_Quit" msgstr "_Salir" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4 msgid "Contact ID:" msgstr "ID del contacto:" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3 -msgid "New message" -msgstr "Mensaje nuevo" +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5 +msgid "New Conversation" +msgstr "Conversación nueva" -#: ../libempathy-gtk/empathy-preferences.c:248 +#: ../libempathy-gtk/empathy-preferences.c:247 msgid "Language" msgstr "Idioma" @@ -1442,7 +1448,7 @@ msgstr "Presencia" msgid "Set your own presence" msgstr "Establezca su propia presencia" -#: ../src/empathy.c:216 +#: ../src/empathy.c:207 msgid "- Empathy Instant Messenger" msgstr "- Mensajería instantánea Empathy" @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gossip\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-09 09:25+0300\n" +"POT-Creation-Date: 2008-02-14 08:05+0300\n" "PO-Revision-Date: 2006-10-17 20:50+0300\n" "Last-Translator: Samuli Seppänen & Henna Nykänen <sjsepp@utu.fi>\n" "Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n" @@ -31,139 +31,175 @@ msgid "Always open a separate chat window for new chats." msgstr "Avaa aina uusi ikkuna uusille keskusteluille." #: ../data/empathy.schemas.in.h:2 +msgid "" +"Character to add after nickname when using nick completion (tab) in group " +"chat." +msgstr "" +"Lempinimen jälkeen lisättävä merkki, kun käytetään lempinimen täydennystä " +"(sarkain) ryhmäkeskustelussa." + +#: ../data/empathy.schemas.in.h:3 msgid "Chat window theme" msgstr "Keskusteluikkunan teema" -#: ../data/empathy.schemas.in.h:3 +#: ../data/empathy.schemas.in.h:4 +msgid "Checks if Empathy should autoconnect on startup" +msgstr "Tarkistaa, yhdistääkö empathy automaattisesti käynnistettäessä" + +#: ../data/empathy.schemas.in.h:5 +msgid "Checks if NetworkManager should be used" +msgstr "Tarkistaa, käytetäänkö NetworkManager:ia" + +#: ../data/empathy.schemas.in.h:6 msgid "Checks if Salut account is created" msgstr "Tarkistaa, onko salut-tili luotu" -#: ../data/empathy.schemas.in.h:4 +#: ../data/empathy.schemas.in.h:7 msgid "" "Comma separated list of spell checker languages to use (e.g. en, fr, nl)." msgstr "" "Pilkuilla erotettu luettelo kielentarkastuksessa käytettävistä kielistä " "(esim. en, fr, nl)." -#: ../data/empathy.schemas.in.h:5 +#: ../data/empathy.schemas.in.h:8 msgid "Compact contact list" msgstr "Pienikokoinen tuttavaluettelo" -#: ../data/empathy.schemas.in.h:6 +#: ../data/empathy.schemas.in.h:9 msgid "Contact list sort criterium" msgstr "Tuttavaluettelon järjestystapa" -#: ../data/empathy.schemas.in.h:7 +#: ../data/empathy.schemas.in.h:10 msgid "Default directory to select an avatar image from" msgstr "Oletushakemisto, josta avatar-kuvat haetaan" -#: ../data/empathy.schemas.in.h:8 +#: ../data/empathy.schemas.in.h:11 msgid "Enable popup when contact is available" msgstr "Näytä ponnahdusikkuna, kun tuttava on linjoilla" -#: ../data/empathy.schemas.in.h:9 +#: ../data/empathy.schemas.in.h:12 msgid "Enable sound when away" msgstr "Käytä ääniä poissa-tilassa" -#: ../data/empathy.schemas.in.h:10 +#: ../data/empathy.schemas.in.h:13 msgid "Enable sound when busy" msgstr "Käytä ääniä varattu-tilassa" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:14 msgid "Enable spell checker" msgstr "Ota käyttöön oikeinkirjoituksen tarkistus" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:15 msgid "Hide main window" msgstr "Piilota pääikkuna" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:16 msgid "Hide the main window." msgstr "Piilota pääikkuna." -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:17 +msgid "Nick completed character" +msgstr "Lempinimen täydennysmerkki" + +#: ../data/empathy.schemas.in.h:18 msgid "Open new chats in separate windows" msgstr "Avaa uusi ikkuna uusille keskusteluille" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:19 msgid "Show avatars" msgstr "Näytä avatar-kuvat" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:20 msgid "Show hint about closing the main window" msgstr "Näytä vihje pääikkunan sulkemisesta" -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:21 msgid "Show offline contacts" msgstr "Näytä linjoilta poissa olevat tuttavat" -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:22 msgid "Spell checking languages" msgstr "Kielentarkastuksessa käytetyt kielet" -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:23 msgid "The last directory that an avatar image was chosen from." msgstr "Viimeisin hakemisto, josta avatar-kuva oli valittu." -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:24 msgid "The theme that is used to display the conversation in chat windows." msgstr "Keskusteluikkunoissa käytettävä teema." -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:25 msgid "Use graphical smileys" msgstr "Käytä hymiökuvakkeita" -#: ../data/empathy.schemas.in.h:22 +#: ../data/empathy.schemas.in.h:26 msgid "Use notification sounds" msgstr "Käytä merkkiääniä" -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:27 msgid "Use theme for chat rooms" msgstr "Käytä teemaa keskusteluhuoneille" -#: ../data/empathy.schemas.in.h:24 +#: ../data/empathy.schemas.in.h:28 +msgid "" +"Whether or not Empathy should automatically login to your accounts on " +"startup." +msgstr "" +"Tulisiko empathyn ottaa yhteyttä tileihin automaattisesti, kun " +"kirjaudut sisään." + +#: ../data/empathy.schemas.in.h:29 msgid "" "Whether or not the Salut account has been created on the first empathy run." msgstr "Onko salut-tili luotu suoritettaessa empathyä ensimmäistä kertaa." -#: ../data/empathy.schemas.in.h:25 +#: ../data/empathy.schemas.in.h:30 +msgid "" +"Whether or not the network manager should be used to automatically " +"disconnect/reconnect." +msgstr "" +"Käytetäänkö NetworkManager:ia yhdistämään ja katkaisemaan yhteys " +"automaattisesti." + +#: ../data/empathy.schemas.in.h:31 msgid "" "Whether or not to check words typed against the languages you want to check " "with." msgstr "Tarkistetaanko oikeinkirjoitus haluamiasi kieliä vasten." -#: ../data/empathy.schemas.in.h:26 +#: ../data/empathy.schemas.in.h:32 msgid "" "Whether or not to convert smileys into graphical images in conversations." msgstr "Muunnetaanko hymiöt graafisiksi?" -#: ../data/empathy.schemas.in.h:27 +#: ../data/empathy.schemas.in.h:33 msgid "Whether or not to play a sound when messages arrive." msgstr "Annetaanko viestien saapuessa merkkiääni?" -#: ../data/empathy.schemas.in.h:28 +#: ../data/empathy.schemas.in.h:34 msgid "Whether or not to play sounds when away." msgstr "Käytetäänko merkkiääniä Poissa-tilassa?" -#: ../data/empathy.schemas.in.h:29 +#: ../data/empathy.schemas.in.h:35 msgid "Whether or not to play sounds when busy." msgstr "Käytetäänkö merkkiääniä Varattu-tilassa?" -#: ../data/empathy.schemas.in.h:30 +#: ../data/empathy.schemas.in.h:36 msgid "Whether or not to show a popup when a contact becomes available." msgstr "Näytetäänkö ponnahdusikkuna, kun tuttava tulee linjoille." -#: ../data/empathy.schemas.in.h:31 +#: ../data/empathy.schemas.in.h:37 msgid "" "Whether or not to show avatars for contacts in the contact list and chat " "windows." msgstr "Näytetäänkö avatarit tuttavaluettelossa ja keskusteluikkunoissa." -#: ../data/empathy.schemas.in.h:32 +#: ../data/empathy.schemas.in.h:38 msgid "Whether or not to show contacts that are offline in the contact list." msgstr "Näytetäänkö tuttavaluettelossa myös linjoilta poissa olevat tuttavat?" -#: ../data/empathy.schemas.in.h:33 +#: ../data/empathy.schemas.in.h:39 msgid "" "Whether or not to show the message dialog about closing the main window with " "the 'x' button in the title bar." @@ -171,15 +207,15 @@ msgstr "" "Näytetäänkö viesti-ikkuna pääikkunan sulkemisesta suljettaessa ikkuna X-" "napista." -#: ../data/empathy.schemas.in.h:34 +#: ../data/empathy.schemas.in.h:40 msgid "Whether to show the contact list in compact mode or not." msgstr "Näytetäänkö tuttavaluettelo pienikokoisena." -#: ../data/empathy.schemas.in.h:35 +#: ../data/empathy.schemas.in.h:41 msgid "Whether to use the theme for chat rooms or not." msgstr "Käytetäänkö teemaa keskusteluhuoneille." -#: ../data/empathy.schemas.in.h:36 +#: ../data/empathy.schemas.in.h:42 msgid "" "Which criterium to use when sorting the contact list. Default is to use sort " "by the contact's name with the value \"name\". A value of \"state\" will " @@ -189,29 +225,29 @@ msgstr "" "järjestää tuttavan nimen mukaan arvolla \"name\". Luettelo voidaan järjestää " "tuttavan tilan mukaan arvolla \"state\"." -#: ../libempathy/empathy-presence.c:185 ../libempathy/empathy-presence.c:285 -msgid "Offline" -msgstr "Poissa linjoilta" +#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:149 +msgid "People nearby" +msgstr "Lähellä olevat ihmiset" -#: ../libempathy/empathy-presence.c:275 +#: ../libempathy/empathy-utils.c:468 msgid "Available" msgstr "Tavoitettavissa" -#: ../libempathy/empathy-presence.c:277 +#: ../libempathy/empathy-utils.c:470 msgid "Busy" msgstr "Varattu" -#: ../libempathy/empathy-presence.c:280 +#: ../libempathy/empathy-utils.c:473 msgid "Away" msgstr "Poissa" -#: ../libempathy/empathy-presence.c:282 +#: ../libempathy/empathy-utils.c:475 msgid "Hidden" msgstr "Piilotettu" -#: ../libempathy/empathy-tp-contact-list.c:729 ../src/empathy.c:212 -msgid "People nearby" -msgstr "Lähellä olevat ihmiset" +#: ../libempathy/empathy-utils.c:478 +msgid "Offline" +msgstr "Poissa linjoilta" #: ../libempathy-gtk/empathy-about-dialog.c:63 msgid "" @@ -263,8 +299,8 @@ msgstr "" msgid "All" msgstr "Kaikki" -#: ../libempathy-gtk/empathy-account-widget-generic.c:146 -#: ../libempathy-gtk/empathy-account-widget-generic.c:208 +#: ../libempathy-gtk/empathy-account-widget.c:276 +#: ../libempathy-gtk/empathy-account-widget.c:321 #, c-format msgid "%s:" msgstr "%s:" @@ -276,44 +312,56 @@ msgid "<b>Advanced</b>" msgstr "<b>Lisäasetukset</b>" #: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2 +msgid "<b>Override server settings</b>" +msgstr "<b>Käytä omia asetuksia palvelimen asetusten sijasta</b>" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3 #: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2 msgid "Forget password and clear the entry." msgstr "Unohda salasana ja tyhjennä kohta." -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4 #: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3 msgid "Login I_D:" msgstr "_Käyttäjätunnus:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5 #: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4 msgid "Pass_word:" msgstr "S_alasana:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5 -msgid "Priority:" -msgstr "Tärkeys:" - #: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6 -msgid "Reso_urce:" -msgstr "Res_urssi:" +msgid "Pri_ority:" +msgstr "_Tärkeys:" #: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7 -msgid "Use encryption (SS_L)" -msgstr "Käytä salausta (SS_L)" +msgid "Reso_urce:" +msgstr "Res_urssi:" #: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8 +msgid "Use old SS_L" +msgstr "Käytä vanhaa SS_L-porttia" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9 +msgid "_Encryption required (TLS/SSL)" +msgstr "_Vaadi salaus (TLS/SSL)" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10 +msgid "_Ignore SSL certificate errors" +msgstr "Älä _huomioi SSL-varmenteiden virheitä" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11 #: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5 msgid "_Port:" msgstr "_Portti:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12 #: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6 #: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10 msgid "_Server:" msgstr "Pal_velin:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13 msgid "jabber account settings" msgstr "jabber-tilin asetukset" @@ -350,15 +398,7 @@ msgstr "_Julkaistu nimi:" msgid "salut account settings" msgstr "salut-tilin asetukset" -#: ../libempathy-gtk/empathy-accounts-dialog.c:218 -msgid "Disable" -msgstr "Poista käytöstä" - -#: ../libempathy-gtk/empathy-accounts-dialog.c:221 -msgid "Enable" -msgstr "Ota käyttöön" - -#: ../libempathy-gtk/empathy-accounts-dialog.c:256 +#: ../libempathy-gtk/empathy-accounts-dialog.c:224 msgid "" "To add a new account, you can click on the 'Add' button and a new entry will " "be created for you to start configuring." @@ -366,7 +406,7 @@ msgstr "" "Jos haluat lisätä uuden tilin, voit napsauttaa \"Lisää\"-painiketta ja uusi " "kohta lisätään, josta voit määritellä tilin asetukset." -#: ../libempathy-gtk/empathy-accounts-dialog.c:260 +#: ../libempathy-gtk/empathy-accounts-dialog.c:228 msgid "" "To add a new account, you first have to install a backend for each protocol " "you want to use." @@ -374,12 +414,12 @@ msgstr "" "Ennen kuin voit lisätä tilin, sinun täytyy asentaa kullekin käytettävälle " "protokollalle tarvittava taustajärjestelmä." -#: ../libempathy-gtk/empathy-accounts-dialog.c:267 +#: ../libempathy-gtk/empathy-accounts-dialog.c:235 #: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2 msgid "<b>No Account Selected</b>" msgstr "<b>Tiliä ei ole valittu</b>" -#: ../libempathy-gtk/empathy-accounts-dialog.c:268 +#: ../libempathy-gtk/empathy-accounts-dialog.c:236 msgid "" "\n" "\n" @@ -388,19 +428,23 @@ msgid "" msgstr "" "\n" "\n" -"Jos et halua lisätä uutta tiliä, valitse vasemmalla olevasta luettelosta tili, " -"jonka asetuksia haluat muuttaa." +"Jos et halua lisätä uutta tiliä, valitse vasemmalla olevasta luettelosta " +"tili, jonka asetuksia haluat muuttaa." -#: ../libempathy-gtk/empathy-accounts-dialog.c:274 +#: ../libempathy-gtk/empathy-accounts-dialog.c:242 msgid "<b>No Accounts Configured</b>" msgstr "<b>Tilejä ei ole määritelty</b>" -#: ../libempathy-gtk/empathy-accounts-dialog.c:401 +#: ../libempathy-gtk/empathy-accounts-dialog.c:398 +msgid "Enabled" +msgstr "Käytössä" + +#: ../libempathy-gtk/empathy-accounts-dialog.c:408 #: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4 msgid "Accounts" msgstr "Käyttäjätilit" -#: ../libempathy-gtk/empathy-accounts-dialog.c:898 +#: ../libempathy-gtk/empathy-accounts-dialog.c:891 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -409,7 +453,7 @@ msgstr "" "Olet poistamassa %s-tilisi!\n" "Haluatko varmasti jatkaa?" -#: ../libempathy-gtk/empathy-accounts-dialog.c:904 +#: ../libempathy-gtk/empathy-accounts-dialog.c:897 msgid "" "Any associated conversations and chat rooms will NOT be removed if you " "decide to proceed.\n" @@ -453,19 +497,19 @@ msgstr "" msgid "Type:" msgstr "Tyyppi:" -#: ../libempathy-gtk/empathy-avatar-chooser.c:448 +#: ../libempathy-gtk/empathy-avatar-chooser.c:449 msgid "Select Your Avatar Image" msgstr "Valitse avatar-kuvasi" -#: ../libempathy-gtk/empathy-avatar-chooser.c:451 +#: ../libempathy-gtk/empathy-avatar-chooser.c:452 msgid "No Image" msgstr "Ei kuvaa" -#: ../libempathy-gtk/empathy-avatar-chooser.c:511 +#: ../libempathy-gtk/empathy-avatar-chooser.c:512 msgid "Images" msgstr "Kuvat" -#: ../libempathy-gtk/empathy-avatar-chooser.c:515 +#: ../libempathy-gtk/empathy-avatar-chooser.c:516 msgid "All Files" msgstr "Kaikki tiedostot" @@ -473,7 +517,13 @@ msgstr "Kaikki tiedostot" msgid "Click to enlarge" msgstr "Suurenna napsauttamalla" +#: ../libempathy-gtk/empathy-call-window.c:116 +#, c-format +msgid "Call from %s" +msgstr "Puhelu (%s)" + #: ../libempathy-gtk/empathy-call-window.glade.h:1 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2 msgid "Call" msgstr "Soita" @@ -497,48 +547,48 @@ msgstr "Lähetä videota" msgid "Volume" msgstr "Äänenvoimakkuus" -#: ../libempathy-gtk/empathy-chat.c:332 +#: ../libempathy-gtk/empathy-chat.c:436 msgid "Disconnected" msgstr "Ei yhteyttä" -#: ../libempathy-gtk/empathy-chat.c:452 +#: ../libempathy-gtk/empathy-chat.c:556 msgid "offline" msgstr "poissa linjoilta" -#: ../libempathy-gtk/empathy-chat.c:455 +#: ../libempathy-gtk/empathy-chat.c:559 msgid "invalid contact" msgstr "virheellinen yhteystieto" -#: ../libempathy-gtk/empathy-chat.c:458 +#: ../libempathy-gtk/empathy-chat.c:562 msgid "permission denied" msgstr "lupa evätty" -#: ../libempathy-gtk/empathy-chat.c:461 +#: ../libempathy-gtk/empathy-chat.c:565 msgid "too long message" msgstr "liian pitkä viesti" -#: ../libempathy-gtk/empathy-chat.c:464 +#: ../libempathy-gtk/empathy-chat.c:568 msgid "not implemented" msgstr "ei toteutettu" -#: ../libempathy-gtk/empathy-chat.c:467 +#: ../libempathy-gtk/empathy-chat.c:571 msgid "unknown" msgstr "tuntematon" -#: ../libempathy-gtk/empathy-chat.c:471 +#: ../libempathy-gtk/empathy-chat.c:575 #, c-format msgid "Error sending message '%s': %s" msgstr "Virhe lähetettäessä viestiä \"%s\": %s" -#: ../libempathy-gtk/empathy-chat.c:926 +#: ../libempathy-gtk/empathy-chat.c:1032 msgid "Insert Smiley" msgstr "Lisää hymiö" -#: ../libempathy-gtk/empathy-chat.c:973 +#: ../libempathy-gtk/empathy-chat.c:1079 msgid "_Check Word Spelling..." msgstr "_Tarkasta oikeinkirjoitus..." -#: ../libempathy-gtk/empathy-chat.c:1398 +#: ../libempathy-gtk/empathy-chat.c:1508 msgid "Connected" msgstr "Yhdistetty" @@ -555,6 +605,7 @@ msgid "Change _Topic..." msgstr "Muuta _aihetta..." #: ../libempathy-gtk/empathy-chat.glade.h:4 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3 msgid "Chat" msgstr "Keskustelu" @@ -617,72 +668,78 @@ msgid "_Close" msgstr "_Sulje" #: ../libempathy-gtk/empathy-chat.glade.h:19 +#: ../libempathy-gtk/empathy-main-window.glade.h:11 +msgid "_Contents" +msgstr "_Sisältö" + +#: ../libempathy-gtk/empathy-chat.glade.h:20 msgid "_Conversation" msgstr "_Keskustelu" -#: ../libempathy-gtk/empathy-chat.glade.h:20 +#: ../libempathy-gtk/empathy-chat.glade.h:21 msgid "_Copy" msgstr "_Kopioi" -#: ../libempathy-gtk/empathy-chat.glade.h:21 +#: ../libempathy-gtk/empathy-chat.glade.h:22 msgid "_Detach Tab" msgstr "_Irrota välilehti" -#: ../libempathy-gtk/empathy-chat.glade.h:22 -#: ../libempathy-gtk/empathy-contact-list-view.c:218 +#: ../libempathy-gtk/empathy-chat.glade.h:23 +#: ../libempathy-gtk/empathy-contact-list-view.c:217 #: ../libempathy-gtk/empathy-main-window.glade.h:12 msgid "_Edit" msgstr "_Muokkaa" -#: ../libempathy-gtk/empathy-chat.glade.h:23 +#: ../libempathy-gtk/empathy-chat.glade.h:24 +#: ../libempathy-gtk/empathy-main-window.glade.h:13 +msgid "_Help" +msgstr "O_hje" + +#: ../libempathy-gtk/empathy-chat.glade.h:25 msgid "_Next Tab" msgstr "_Seuraava välilehti" -#: ../libempathy-gtk/empathy-chat.glade.h:24 +#: ../libempathy-gtk/empathy-chat.glade.h:26 msgid "_Paste" msgstr "_Liitä" -#: ../libempathy-gtk/empathy-chat.glade.h:25 +#: ../libempathy-gtk/empathy-chat.glade.h:27 msgid "_Previous Tab" msgstr "_Edellinen välilehti" -#: ../libempathy-gtk/empathy-chat.glade.h:26 +#: ../libempathy-gtk/empathy-chat.glade.h:28 #: ../libempathy-gtk/empathy-main-window.glade.h:18 msgid "_Room" msgstr "_Huone" -#: ../libempathy-gtk/empathy-chat.glade.h:27 +#: ../libempathy-gtk/empathy-chat.glade.h:29 msgid "_Show Contacts" msgstr "_Näytä tuttavat" -#: ../libempathy-gtk/empathy-chat.glade.h:28 +#: ../libempathy-gtk/empathy-chat.glade.h:30 msgid "_Tabs" msgstr "V_älilehdet" -#: ../libempathy-gtk/empathy-chat.glade.h:29 -#: ../libempathy-gtk/empathy-contact-list-view.c:234 +#: ../libempathy-gtk/empathy-chat.glade.h:31 +#: ../libempathy-gtk/empathy-contact-list-view.c:233 #: ../libempathy-gtk/empathy-main-window.glade.h:19 msgid "_View Previous Conversations" msgstr "_Näytä edelliset keskustelut" -#: ../libempathy-gtk/empathy-chat-view.c:468 +#: ../libempathy-gtk/empathy-chat-view.c:441 msgid "_Copy Link Address" msgstr "_Kopioi linkin osoite" -#: ../libempathy-gtk/empathy-chat-view.c:476 +#: ../libempathy-gtk/empathy-chat-view.c:449 msgid "_Open Link" msgstr "_Avaa linkki" -#: ../libempathy-gtk/empathy-chat-view.c:754 -msgid "%A %d %B %Y" -msgstr "%A %d. %Bta %Y" - -#: ../libempathy-gtk/empathy-chat-window.c:695 +#: ../libempathy-gtk/empathy-chat-window.c:699 #, c-format msgid "Conversations (%d)" msgstr "Keskustelut (%d)" -#: ../libempathy-gtk/empathy-chat-window.c:1281 +#: ../libempathy-gtk/empathy-chat-window.c:1299 msgid "Typing a message." msgstr "Kirjoittaa viestiä." @@ -701,6 +758,7 @@ msgstr "Yhdistä automaattisesti" #: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1 #: ../libempathy-gtk/empathy-contact-widget.glade.h:5 #: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1 msgid "Account:" msgstr "Käyttäjätili:" @@ -761,89 +819,89 @@ msgstr "_Päätä myöhemmin" msgid "Subscription Request" msgstr "Liittymispyyntö" -#: ../libempathy-gtk/empathy-contact-list-view.c:198 +#: ../libempathy-gtk/empathy-contact-list-view.c:197 msgid "_Contact" msgstr "_Tuttavat" -#: ../libempathy-gtk/empathy-contact-list-view.c:202 +#: ../libempathy-gtk/empathy-contact-list-view.c:201 msgid "_Group" msgstr "_Ryhmä" -#: ../libempathy-gtk/empathy-contact-list-view.c:206 +#: ../libempathy-gtk/empathy-contact-list-view.c:205 #: ../libempathy-gtk/empathy-main-window.glade.h:10 msgid "_Chat" msgstr "_Keskustele" -#: ../libempathy-gtk/empathy-contact-list-view.c:206 +#: ../libempathy-gtk/empathy-contact-list-view.c:205 msgid "Chat with contact" msgstr "Keskustele tuttavan kanssa" -#: ../libempathy-gtk/empathy-contact-list-view.c:210 +#: ../libempathy-gtk/empathy-contact-list-view.c:209 msgid "Infor_mation" msgstr "_Tietoja" -#: ../libempathy-gtk/empathy-contact-list-view.c:210 +#: ../libempathy-gtk/empathy-contact-list-view.c:209 msgid "View contact information" msgstr "Näytä yhteystiedot" -#: ../libempathy-gtk/empathy-contact-list-view.c:214 +#: ../libempathy-gtk/empathy-contact-list-view.c:213 msgid "Re_name" msgstr "Nimeä _uudelleen" -#: ../libempathy-gtk/empathy-contact-list-view.c:214 +#: ../libempathy-gtk/empathy-contact-list-view.c:213 msgid "Rename" msgstr "Nimeä uudelleen" -#: ../libempathy-gtk/empathy-contact-list-view.c:218 +#: ../libempathy-gtk/empathy-contact-list-view.c:217 msgid "Edit the groups and name for this contact" msgstr "Muokkaa yhteystiedon ryhmiä ja nimeä" -#: ../libempathy-gtk/empathy-contact-list-view.c:222 +#: ../libempathy-gtk/empathy-contact-list-view.c:221 msgid "_Remove" msgstr "_Poista" -#: ../libempathy-gtk/empathy-contact-list-view.c:222 +#: ../libempathy-gtk/empathy-contact-list-view.c:221 msgid "Remove contact" msgstr "_Poista tuttavan yhteystiedot" -#: ../libempathy-gtk/empathy-contact-list-view.c:226 +#: ../libempathy-gtk/empathy-contact-list-view.c:225 msgid "_Invite to Chat Room" msgstr "K_utsu keskusteluhuoneeseen" -#: ../libempathy-gtk/empathy-contact-list-view.c:226 +#: ../libempathy-gtk/empathy-contact-list-view.c:225 msgid "Invite to a currently open chat room" msgstr "Kutsu avoinna olevaan keskusteluhuoneeseen" -#: ../libempathy-gtk/empathy-contact-list-view.c:230 +#: ../libempathy-gtk/empathy-contact-list-view.c:229 msgid "_Send File..." msgstr "_Lähetä tiedosto..." -#: ../libempathy-gtk/empathy-contact-list-view.c:230 +#: ../libempathy-gtk/empathy-contact-list-view.c:229 msgid "Send a file" msgstr "Lähetä tiedosto" -#: ../libempathy-gtk/empathy-contact-list-view.c:234 +#: ../libempathy-gtk/empathy-contact-list-view.c:233 msgid "View previous conversations with this contact" msgstr "Näytä edelliset keskustelut tämän tuttavan kanssa" -#: ../libempathy-gtk/empathy-contact-list-view.c:239 +#: ../libempathy-gtk/empathy-contact-list-view.c:238 msgid "_Call" msgstr "_Soita" -#: ../libempathy-gtk/empathy-contact-list-view.c:239 +#: ../libempathy-gtk/empathy-contact-list-view.c:238 msgid "Start a voice or video conversation with this contact" msgstr "Aloita puhelu tai videoneuvottelu tämän tuttavan kanssa" -#: ../libempathy-gtk/empathy-contact-list-view.c:1423 +#: ../libempathy-gtk/empathy-contact-list-view.c:1469 msgid "Sorry, I don't want you in my contact list anymore." msgstr "Anteeksi mutta en halua sinua enää tuttavaluettelooni." -#: ../libempathy-gtk/empathy-contact-widget.c:662 +#: ../libempathy-gtk/empathy-contact-widget.c:688 msgid "Select" msgstr "Valitse" -#: ../libempathy-gtk/empathy-contact-widget.c:672 -#: ../libempathy-gtk/empathy-main-window.c:608 +#: ../libempathy-gtk/empathy-contact-widget.c:698 +#: ../libempathy-gtk/empathy-main-window.c:609 msgid "Group" msgstr "Ryhmä" @@ -915,31 +973,31 @@ msgstr "Versio:" msgid "Web site:" msgstr "WWW-sivusto:" -#: ../libempathy-gtk/empathy-group-chat.c:253 +#: ../libempathy-gtk/empathy-group-chat.c:251 msgid "Enter the new topic you want to set for this room:" msgstr "Anna tälle ryhmälle asetettava uusi aihe:" -#: ../libempathy-gtk/empathy-group-chat.c:366 +#: ../libempathy-gtk/empathy-group-chat.c:364 #, c-format msgid "%s has joined the room" msgstr "%s on saapunut huoneeseen" -#: ../libempathy-gtk/empathy-group-chat.c:369 +#: ../libempathy-gtk/empathy-group-chat.c:367 #, c-format msgid "%s has left the room" msgstr "%s on poistunut huoneesta" -#: ../libempathy-gtk/empathy-group-chat.c:449 +#: ../libempathy-gtk/empathy-group-chat.c:447 #, c-format msgid "Topic: %s" msgstr "Aihe: %s" -#: ../libempathy-gtk/empathy-group-chat.c:571 +#: ../libempathy-gtk/empathy-group-chat.c:575 #, c-format msgid "Topic set to: %s" msgstr "Aihe asetettu: %s" -#: ../libempathy-gtk/empathy-group-chat.c:573 +#: ../libempathy-gtk/empathy-group-chat.c:577 msgid "No topic defined" msgstr "Aihetta ei ole annettu" @@ -951,15 +1009,15 @@ msgstr "<b>Aihe:</b>" msgid "Group Chat" msgstr "Ryhmäkeskustelu" -#: ../libempathy-gtk/empathy-log-window.c:497 +#: ../libempathy-gtk/empathy-log-window.c:499 msgid "Account" msgstr "Käyttäjätili" -#: ../libempathy-gtk/empathy-log-window.c:504 +#: ../libempathy-gtk/empathy-log-window.c:506 msgid "Conversation" msgstr "Keskustelu" -#: ../libempathy-gtk/empathy-log-window.c:514 +#: ../libempathy-gtk/empathy-log-window.c:516 msgid "Date" msgstr "Päivämäärä" @@ -1020,67 +1078,67 @@ msgid "" msgstr "" "Tässä luettelossa ovat kaikki huoneet palvelimelta, johon olet kirjautunut" -#: ../libempathy-gtk/empathy-main-window.c:265 +#: ../libempathy-gtk/empathy-main-window.c:266 msgid "Show and edit accounts" msgstr "Näytä ja muokkaa tilejä" -#: ../libempathy-gtk/empathy-main-window.c:629 +#: ../libempathy-gtk/empathy-main-window.c:630 msgid "Contact" msgstr "Tuttava" -#: ../libempathy-gtk/empathy-main-window.c:812 -msgid "Edit Account _Details" -msgstr "Muokkaa tilin _asetuksia" +#: ../libempathy-gtk/empathy-main-window.c:813 +msgid "_Edit account" +msgstr "Muokkaa _tiliä" -#: ../libempathy-gtk/empathy-main-window.c:895 +#: ../libempathy-gtk/empathy-main-window.c:896 msgid "Network error" msgstr "Verkkovirhe" -#: ../libempathy-gtk/empathy-main-window.c:898 +#: ../libempathy-gtk/empathy-main-window.c:899 msgid "Authentication failed" msgstr "Todennus epäonninstui" -#: ../libempathy-gtk/empathy-main-window.c:901 +#: ../libempathy-gtk/empathy-main-window.c:902 msgid "Encryption error" msgstr "Salausvirhe" -#: ../libempathy-gtk/empathy-main-window.c:904 +#: ../libempathy-gtk/empathy-main-window.c:905 msgid "Name in use" msgstr "Nimi on käytössä" -#: ../libempathy-gtk/empathy-main-window.c:907 +#: ../libempathy-gtk/empathy-main-window.c:908 msgid "Certificate not provided" msgstr "Varmennetta ei ole annettu" -#: ../libempathy-gtk/empathy-main-window.c:910 +#: ../libempathy-gtk/empathy-main-window.c:911 msgid "Certificate untrusted" msgstr "Varmenne ei ole luotettu" -#: ../libempathy-gtk/empathy-main-window.c:913 +#: ../libempathy-gtk/empathy-main-window.c:914 msgid "Certificate expired" msgstr "Varmenne on vanhentunut" -#: ../libempathy-gtk/empathy-main-window.c:916 +#: ../libempathy-gtk/empathy-main-window.c:917 msgid "Certificate not activated" msgstr "Varmenne ei ole vielä aktivoitu" -#: ../libempathy-gtk/empathy-main-window.c:919 +#: ../libempathy-gtk/empathy-main-window.c:920 msgid "Certificate hostname mismatch" msgstr "Varmenteen verkkonimi ei täsmää" -#: ../libempathy-gtk/empathy-main-window.c:922 +#: ../libempathy-gtk/empathy-main-window.c:923 msgid "Certificate fingerprint mismatch" msgstr "Varmenteen sormenjälki ei täsmää" -#: ../libempathy-gtk/empathy-main-window.c:925 +#: ../libempathy-gtk/empathy-main-window.c:926 msgid "Certificate self signed" msgstr "Itseallekirjoitettu varmenne" -#: ../libempathy-gtk/empathy-main-window.c:928 +#: ../libempathy-gtk/empathy-main-window.c:929 msgid "Certificate error" msgstr "Varmennevirhe" -#: ../libempathy-gtk/empathy-main-window.c:931 +#: ../libempathy-gtk/empathy-main-window.c:932 msgid "Unknown error" msgstr "Tuntematon virhe" @@ -1114,18 +1172,10 @@ msgstr "_Tietoja" msgid "_Accounts" msgstr "_Käyttäjätilit" -#: ../libempathy-gtk/empathy-main-window.glade.h:11 -msgid "_Contents" -msgstr "_Sisältö" - -#: ../libempathy-gtk/empathy-main-window.glade.h:13 -msgid "_Help" -msgstr "O_hje" - #: ../libempathy-gtk/empathy-main-window.glade.h:14 #: ../libempathy-gtk/empathy-status-icon.glade.h:2 -msgid "_New Message..." -msgstr "_Uusi viesti..." +msgid "_New Conversation..." +msgstr "Uusi _keskustelu..." #: ../libempathy-gtk/empathy-main-window.glade.h:15 msgid "_Personal Information" @@ -1141,7 +1191,15 @@ msgstr "_Asetukset" msgid "_Quit" msgstr "_Lopeta" -#: ../libempathy-gtk/empathy-preferences.c:243 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4 +msgid "Contact ID:" +msgstr "Tuttavan tunniste:" + +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5 +msgid "New Conversation" +msgstr "Uusi keskustelu" + +#: ../libempathy-gtk/empathy-preferences.c:247 msgid "Language" msgstr "Kieli" @@ -1182,74 +1240,78 @@ msgstr "" "tietokoneessasi on asennettu sanakirja.</small>" #: ../libempathy-gtk/empathy-preferences.glade.h:9 +msgid "Automatically _connect on startup " +msgstr "Yhdistä _käynnistettäessä " + +#: ../libempathy-gtk/empathy-preferences.glade.h:10 msgid "Avatars are user chosen images shown in the contact list" msgstr "Avatarit ovat käyttäjän valitsemia kuvia tuttavaluettelossa" -#: ../libempathy-gtk/empathy-preferences.glade.h:10 +#: ../libempathy-gtk/empathy-preferences.glade.h:11 msgid "Chat Th_eme:" msgstr "Keskustelun _teema:" -#: ../libempathy-gtk/empathy-preferences.glade.h:11 +#: ../libempathy-gtk/empathy-preferences.glade.h:12 msgid "Display notifications when contacts come _online" msgstr "Näytä huomautuksia, kun tuttavat saapuvat _linjoille" -#: ../libempathy-gtk/empathy-preferences.glade.h:12 +#: ../libempathy-gtk/empathy-preferences.glade.h:13 msgid "Enable sounds when _away" msgstr "Merkkiäänet poissa-tilassa" -#: ../libempathy-gtk/empathy-preferences.glade.h:13 +#: ../libempathy-gtk/empathy-preferences.glade.h:14 msgid "Enable sounds when _busy" msgstr "Merkkiäänet varattu-tilassa" -#: ../libempathy-gtk/empathy-preferences.glade.h:14 +#: ../libempathy-gtk/empathy-preferences.glade.h:15 msgid "General" msgstr "Yleinen" -#: ../libempathy-gtk/empathy-preferences.glade.h:15 +#: ../libempathy-gtk/empathy-preferences.glade.h:16 msgid "Notifications" msgstr "Huomautukset" -#: ../libempathy-gtk/empathy-preferences.glade.h:16 +#: ../libempathy-gtk/empathy-preferences.glade.h:17 msgid "Preferences" msgstr "Asetukset" -#: ../libempathy-gtk/empathy-preferences.glade.h:17 +#: ../libempathy-gtk/empathy-preferences.glade.h:18 msgid "Show _avatars" msgstr "Näytä _avattaret" -#: ../libempathy-gtk/empathy-preferences.glade.h:18 +#: ../libempathy-gtk/empathy-preferences.glade.h:19 msgid "Show _smileys as images" msgstr "Näytä _hymiöt hymiökuvakkeina" -#: ../libempathy-gtk/empathy-preferences.glade.h:19 +#: ../libempathy-gtk/empathy-preferences.glade.h:20 msgid "Show co_mpact contact list" msgstr "Näytä _pieni tuttavaluettelo" -#: ../libempathy-gtk/empathy-preferences.glade.h:20 +#: ../libempathy-gtk/empathy-preferences.glade.h:21 msgid "Sort by _name" msgstr "Järjestä _nimen mukaan" -#: ../libempathy-gtk/empathy-preferences.glade.h:21 +#: ../libempathy-gtk/empathy-preferences.glade.h:22 msgid "Sort by s_tate" msgstr "Järjestä _tilan mukaan" -#: ../libempathy-gtk/empathy-preferences.glade.h:22 +#: ../libempathy-gtk/empathy-preferences.glade.h:23 msgid "Spell Checking" msgstr "Kielentarkastus" -#: ../libempathy-gtk/empathy-preferences.glade.h:23 +#: ../libempathy-gtk/empathy-preferences.glade.h:24 msgid "Themes" msgstr "Teemat" -#: ../libempathy-gtk/empathy-preferences.glade.h:24 +#: ../libempathy-gtk/empathy-preferences.glade.h:25 msgid "_Open new chats in separate windows" msgstr "_Avaa uusi ikkuna uusille keskusteluille" -#: ../libempathy-gtk/empathy-preferences.glade.h:25 +#: ../libempathy-gtk/empathy-preferences.glade.h:26 msgid "_Play sound when messages arrive" msgstr "_Merkkiääni viestin saapuessa" -#: ../libempathy-gtk/empathy-preferences.glade.h:26 +#: ../libempathy-gtk/empathy-preferences.glade.h:27 msgid "_Use for chat rooms" msgstr "_Käytä keskusteluhuoneille" @@ -1274,12 +1336,12 @@ msgstr "Tallenna viesti" msgid "Status:" msgstr "Tila:" -#: ../libempathy-gtk/empathy-private-chat.c:188 +#: ../libempathy-gtk/empathy-private-chat.c:229 #, c-format msgid "%s went offline" msgstr "%s poistui linjoilta" -#: ../libempathy-gtk/empathy-private-chat.c:202 +#: ../libempathy-gtk/empathy-private-chat.c:243 #, c-format msgid "%s has come online" msgstr "%s on kirjautunut sisään" @@ -1300,7 +1362,7 @@ msgstr "Kielentarkastus" msgid "Suggestions for the word:" msgstr "Korjausehdotuksia:" -#: ../libempathy-gtk/empathy-status-icon.c:310 +#: ../libempathy-gtk/empathy-status-icon.c:354 #, c-format msgid "" "New message from %s:\n" @@ -1309,12 +1371,12 @@ msgstr "" "Uusi viesti käyttäjältä %s:\n" "%s" -#: ../libempathy-gtk/empathy-status-icon.c:579 +#: ../libempathy-gtk/empathy-status-icon.c:625 #, c-format msgid "Subscription requested by %s" msgstr "Liittymispyyntö käyttäjältä %s" -#: ../libempathy-gtk/empathy-status-icon.c:582 +#: ../libempathy-gtk/empathy-status-icon.c:628 #, c-format msgid "" "\n" @@ -1331,19 +1393,24 @@ msgstr "Tila" msgid "_Show Contact List" msgstr "_Näytä tuttavaluettelo" -#: ../libempathy-gtk/empathy-theme-manager.c:87 +#: ../libempathy-gtk/empathy-theme-boxes.c:779 +#: ../libempathy-gtk/empathy-theme-irc.c:297 +msgid "%A %d %B %Y" +msgstr "%A %d. %Bta %Y" + +#: ../libempathy-gtk/empathy-theme-manager.c:78 msgid "Classic" msgstr "Perinteinen" -#: ../libempathy-gtk/empathy-theme-manager.c:88 +#: ../libempathy-gtk/empathy-theme-manager.c:79 msgid "Simple" msgstr "Yksinkertainen" -#: ../libempathy-gtk/empathy-theme-manager.c:89 +#: ../libempathy-gtk/empathy-theme-manager.c:80 msgid "Clean" msgstr "Siisti" -#: ../libempathy-gtk/empathy-theme-manager.c:90 +#: ../libempathy-gtk/empathy-theme-manager.c:81 msgid "Blue" msgstr "Sininen" @@ -1355,7 +1422,8 @@ msgstr "" #: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2 msgid "The contact's avatar token. Empty means contact has no avatar." -msgstr "Tuttavan avatar-tunniste. Tyhjä tarkoittaa, ettei käyttäjällä ole avatarta." +msgstr "" +"Tuttavan avatar-tunniste. Tyhjä tarkoittaa, ettei käyttäjällä ole avatarta." #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1 msgid "Megaphone" @@ -1379,14 +1447,16 @@ msgstr "Läsnäolo" msgid "Set your own presence" msgstr "Aseta läsnäolosi tila" -#: ../src/empathy.c:272 -msgid "Don't connect on startup" -msgstr "Älä yhdistä käynnistettäessä" - -#: ../src/empathy.c:284 +#: ../src/empathy.c:205 msgid "- Empathy Instant Messenger" msgstr "- Empathy-pikaviestiohjelma" +#~ msgid "Disable" +#~ msgstr "Poista käytöstä" + +#~ msgid "_New Message..." +#~ msgstr "_Uusi viesti..." + #~ msgid "New Message" #~ msgid_plural "New Messages" #~ msgstr[0] "Uusi viesti" @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: gl\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-01-30 14:24+0100\n" -"PO-Revision-Date: 2008-01-30 14:29+0100\n" +"POT-Creation-Date: 2008-02-12 15:13+0100\n" +"PO-Revision-Date: 2008-02-12 15:13+0100\n" "Last-Translator: Ignacio Casal Quinteiro <icq@svn.gnome.org>\n" "Language-Team: Galego <proxecto@trasno.net>\n" "MIME-Version: 1.0\n" @@ -143,7 +143,9 @@ msgstr "Usar tema para salas de conversas" msgid "" "Whether or not Empathy should automatically login to your accounts on " "startup." -msgstr "Indica ou non se Empathy debería inciar sesión automaticamente nas súas ao inicio." +msgstr "" +"Indica ou non se Empathy debería inciar sesión automaticamente nas súas ao " +"inicio." #: ../data/empathy.schemas.in.h:29 msgid "Whether or not the Salut account has been created on the first empathy run." @@ -153,7 +155,9 @@ msgstr "Indica se a conta Salut creouse cando executou por primeira vez Empathy. msgid "" "Whether or not the network manager should be used to automatically " "disconnect/reconnect." -msgstr "Indica ou non se se debería usar network manager para desconectar/reconectar automaticamente." +msgstr "" +"Indica ou non se se debería usar network manager para desconectar/reconectar " +"automaticamente." #: ../data/empathy.schemas.in.h:31 msgid "" @@ -227,27 +231,27 @@ msgstr "" "ordenar polo nome do contacto co valor \"name\". Un valor de \"state\" " "ordenará a lista polo estado." -#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:152 +#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:149 msgid "People nearby" msgstr "Xente máis próxima" -#: ../libempathy/empathy-utils.c:494 +#: ../libempathy/empathy-utils.c:468 msgid "Available" msgstr "Dispoñible" -#: ../libempathy/empathy-utils.c:496 +#: ../libempathy/empathy-utils.c:470 msgid "Busy" msgstr "Ocupado" -#: ../libempathy/empathy-utils.c:499 +#: ../libempathy/empathy-utils.c:473 msgid "Away" msgstr "Ausente" -#: ../libempathy/empathy-utils.c:501 +#: ../libempathy/empathy-utils.c:475 msgid "Hidden" msgstr "Oculto" -#: ../libempathy/empathy-utils.c:504 +#: ../libempathy/empathy-utils.c:478 msgid "Offline" msgstr "Desconectado" @@ -297,8 +301,8 @@ msgstr "Ignacio Casal Quinteiro <nacho.resa@gmail.com>" msgid "All" msgstr "Todo" -#: ../libempathy-gtk/empathy-account-widget-generic.c:133 -#: ../libempathy-gtk/empathy-account-widget-generic.c:195 +#: ../libempathy-gtk/empathy-account-widget.c:276 +#: ../libempathy-gtk/empathy-account-widget.c:321 #, c-format msgid "%s:" msgstr "%s:" @@ -396,7 +400,7 @@ msgstr "Nome _publicado:" msgid "salut account settings" msgstr "axustes da conta salut" -#: ../libempathy-gtk/empathy-accounts-dialog.c:227 +#: ../libempathy-gtk/empathy-accounts-dialog.c:224 msgid "" "To add a new account, you can click on the 'Add' button and a new entry will " "be created for you to start configuring." @@ -404,7 +408,7 @@ msgstr "" "Para engadir unha nova conta, pode premer no botón 'Engadir' e crearase unha " "nova entrada para que a configure." -#: ../libempathy-gtk/empathy-accounts-dialog.c:231 +#: ../libempathy-gtk/empathy-accounts-dialog.c:228 msgid "" "To add a new account, you first have to install a backend for each protocol " "you want to use." @@ -412,12 +416,12 @@ msgstr "" "Para engadir unha nova conta, primeiro debe instalar un \"backend\" para " "cada protocolo que queira usar." -#: ../libempathy-gtk/empathy-accounts-dialog.c:238 +#: ../libempathy-gtk/empathy-accounts-dialog.c:235 #: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2 msgid "<b>No Account Selected</b>" msgstr "<b>Ningunha conta seleccionada</b>" -#: ../libempathy-gtk/empathy-accounts-dialog.c:239 +#: ../libempathy-gtk/empathy-accounts-dialog.c:236 msgid "" "\n" "\n" @@ -429,11 +433,15 @@ msgstr "" "Se non quere engadir unha conta, simplemente prema na conta que quere " "configurar na lista da esquerda." -#: ../libempathy-gtk/empathy-accounts-dialog.c:245 +#: ../libempathy-gtk/empathy-accounts-dialog.c:242 msgid "<b>No Accounts Configured</b>" msgstr "<b>Non hai ningunha conta configurada</b>" -#: ../libempathy-gtk/empathy-accounts-dialog.c:399 +#: ../libempathy-gtk/empathy-accounts-dialog.c:398 +msgid "Enabled" +msgstr "Activado" + +#: ../libempathy-gtk/empathy-accounts-dialog.c:408 #: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4 msgid "Accounts" msgstr "Contas" @@ -516,6 +524,7 @@ msgid "Call from %s" msgstr "Chamada de %s" #: ../libempathy-gtk/empathy-call-window.glade.h:1 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2 msgid "Call" msgstr "Chamar" @@ -597,6 +606,7 @@ msgid "Change _Topic..." msgstr "Cambiar _tema..." #: ../libempathy-gtk/empathy-chat.glade.h:4 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3 msgid "Chat" msgstr "Conversa" @@ -696,7 +706,7 @@ msgstr "_Pegar" #: ../libempathy-gtk/empathy-chat.glade.h:27 msgid "_Previous Tab" -msgstr "separador an_terior" +msgstr "Separador an_terior" #: ../libempathy-gtk/empathy-chat.glade.h:28 #: ../libempathy-gtk/empathy-main-window.glade.h:18 @@ -1164,8 +1174,8 @@ msgstr "_Contas" #: ../libempathy-gtk/empathy-main-window.glade.h:14 #: ../libempathy-gtk/empathy-status-icon.glade.h:2 -msgid "_New Message..." -msgstr "_Nova mensaxe..." +msgid "_New Conversation..." +msgstr "_Nova conversa..." #: ../libempathy-gtk/empathy-main-window.glade.h:15 msgid "_Personal Information" @@ -1181,13 +1191,13 @@ msgstr "_Preferencias" msgid "_Quit" msgstr "_Saír" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2 +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4 msgid "Contact ID:" msgstr "ID de contacto:" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3 -msgid "New message" -msgstr "Nova mensaxe" +#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5 +msgid "New Conversation" +msgstr "Nova conversa" #: ../libempathy-gtk/empathy-preferences.c:247 msgid "Language" @@ -1308,7 +1318,7 @@ msgid "_Use for chat rooms" msgstr "_Usar para salas de conversa" #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:692 +#: ../libempathy-gtk/empathy-presence-chooser.c:691 msgid "Custom messages..." msgstr "Mensaxes personalizadas..." @@ -1438,7 +1448,7 @@ msgstr "Presencia" msgid "Set your own presence" msgstr "Establecer a súa presencia" -#: ../src/empathy.c:216 +#: ../src/empathy.c:205 msgid "- Empathy Instant Messenger" msgstr "- Mensaxería instantánea de Empathy" @@ -1,33 +1,32 @@ -# translation of gossip.HEAD.ne.po to Nepali -# translation of gossip.HEAD.po to Nepali +# translation of empathy.HEAD.ne.po to Nepali # This file is distributed under the same license as the PACKAGE package. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# # Pawan Chitrakar <pawan@mpp.org.np>, 2005. # Jaydeep Bhusal <zaydeep@hotmail.com>, 2005. # Mahesh subedi <submanesh@hotmail.com>, 2006. -# +# Shyam Krishna Bal <balshyam24@yahoo.com>, 2007. msgid "" msgstr "" -"Project-Id-Version: gossip.HEAD.ne\n" +"Project-Id-Version: empathy.HEAD.ne\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-05-15 23:46+0200\n" -"PO-Revision-Date: 2006-06-13 12:37+0545\n" -"Last-Translator: Mahesh subedi <submanesh@hotmail.com>\n" +"POT-Creation-Date: 2007-10-01 14:24+0100\n" +"PO-Revision-Date: 2007-12-17 20:03+0545\n" +"Last-Translator: Shyam Krishna Bal <balshyam24@yahoo.com>\n" "Language-Team: Nepali <info@mpp.org.np>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.10.2\n" -"Plural-Forms: nplurals=2;plural=(n!=1)\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=n !=1\n" -#: ../data/empathy.desktop.in.h:1 -#, fuzzy +#: ../data/empathy.desktop.in.in.h:1 msgid "Empathy Instant Messenger" -msgstr "तयारि मेसेन्जर" +msgstr "इम्प्याथी शीघ्र मेसेन्जर" -#: ../data/empathy.desktop.in.h:2 -msgid "Instant Messenger" -msgstr "तयारि मेसेन्जर" +#: ../data/empathy.desktop.in.in.h:2 +msgid "Send and receive instant messages" +msgstr "शीघ्र सन्देशहरू पठाउनुहोस् र प्राप्त गर्नुहोस्" #: ../data/empathy.schemas.in.h:1 msgid "Always open a separate chat window for new chats." @@ -38,300 +37,188 @@ msgid "Chat window theme" msgstr "कुराकानी सञ्झ्याल विषयवस्तु" #: ../data/empathy.schemas.in.h:3 -msgid "" -"Comma separated list of spell checker languages to use (e.g. en, fr, nl)." +msgid "Checks if Salut account is created" +msgstr "यदि सलुट खाता सिर्जना गरिएको छ भने जाँच गर्दछ" + +#: ../data/empathy.schemas.in.h:4 +msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)." msgstr "" "अल्पविरामले हिज्जे परीक्षण गर्ने भाषाको सूची प्रयोग गर्नलाई सूची छुट्टाउदछ (e.g. en, fr, " "nl)." -#: ../data/empathy.schemas.in.h:4 -#, fuzzy +#: ../data/empathy.schemas.in.h:5 msgid "Compact contact list" -msgstr "सम्पर्क सूची देखाउनुहोस्" +msgstr "सम्पर्क सूची सङ्कुचन गर्नुहोस्" -#: ../data/empathy.schemas.in.h:5 +#: ../data/empathy.schemas.in.h:6 msgid "Contact list sort criterium" -msgstr "" +msgstr "सम्पर्क सूची क्रमबद्ध मापदण्ड" -#: ../data/empathy.schemas.in.h:6 +#: ../data/empathy.schemas.in.h:7 msgid "Default directory to select an avatar image from" -msgstr "" +msgstr "यसबाट एउटा अवतार छवि चयन गर्न पूर्वनिर्धारित डाइरेक्टरी" -#: ../data/empathy.schemas.in.h:7 +#: ../data/empathy.schemas.in.h:8 msgid "Enable popup when contact is available" -msgstr "" +msgstr "सम्पर्क उपलब्ध हुँदा पपअप सक्षम पार्नुहोस्" -#: ../data/empathy.schemas.in.h:8 -#, fuzzy +#: ../data/empathy.schemas.in.h:9 msgid "Enable sound when away" -msgstr "टाढा हुँदा ध्वनिहरू अक्षम पार्नुहोस्" +msgstr "टाढा हुँदा ध्वनि सक्षम पार्नुहोस्" -#: ../data/empathy.schemas.in.h:9 -#, fuzzy +#: ../data/empathy.schemas.in.h:10 msgid "Enable sound when busy" -msgstr "व्यस्त हुँदा ध्वनिहरू अक्षम पार्दछ" +msgstr "व्यस्त हुँदा ध्वनि सक्षम पार्नुहोस्" -#: ../data/empathy.schemas.in.h:10 -#, fuzzy +#: ../data/empathy.schemas.in.h:11 msgid "Enable spell checker" msgstr "हिज्जे परीक्षण सक्षम पार्नुहोस्" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:12 msgid "Hide main window" msgstr "मुख्य सञ्झ्याल लुकाउनुहोस्" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:13 msgid "Hide the main window." -msgstr "मुख्य सञ्झ्याल लुकाउनुहोस्" +msgstr "मुख्य सञ्झ्याल लुकाउनुहोस् ।" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:14 msgid "Open new chats in separate windows" msgstr "छुट्टै सञ्झ्यालमा नयाँ कुराकानी खोल्नुहोस्" -#: ../data/empathy.schemas.in.h:14 -#, fuzzy +#: ../data/empathy.schemas.in.h:15 msgid "Show avatars" -msgstr "सम्पर्कहरू देखाउनुहोस्" +msgstr "अवतार देखाउनुहोस्" -#: ../data/empathy.schemas.in.h:15 -#, fuzzy +#: ../data/empathy.schemas.in.h:16 msgid "Show hint about closing the main window" -msgstr "मुख्य सञ्झ्यालको उचाइ" +msgstr "मुख्य सञ्झ्याल बन्द गर्ने बारे संकेत देखाउनुहोस्" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:17 msgid "Show offline contacts" msgstr "अफलाइन सम्पर्कहरू देखाउनुहोस्" -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:18 msgid "Spell checking languages" -msgstr "भाषाको हिज्जे परीक्षण गर्दै" +msgstr "हिज्जे परीक्षक भाषाहरू" -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:19 msgid "The last directory that an avatar image was chosen from." -msgstr "" +msgstr "एउटा अवतार छवि रोजिएको अन्तिम डाइरेक्टरी ।" -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:20 msgid "The theme that is used to display the conversation in chat windows." -msgstr "कुराकानि सञ्झ्यालहरूमा तपाईँलाई पहिचान गर्न यो विषयवस्तु प्रयोग गरिनेछ" +msgstr "कुराकानी सञ्झ्यालहरूमा तपाईँलाई पहिचान गर्न यो विषयवस्तु प्रयोग गरिन्छ ।" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:21 msgid "Use graphical smileys" -msgstr "ग्राफिकल स्माइलिहरू प्रयोग गर्नुहोस्" +msgstr "ग्राफिकल स्माइलीहरू प्रयोग गर्नुहोस्" -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:22 msgid "Use notification sounds" msgstr "सूचीत गर्ने ध्वनिहरू प्रयोग गर्नुहोस्" -#: ../data/empathy.schemas.in.h:22 -#, fuzzy +#: ../data/empathy.schemas.in.h:23 msgid "Use theme for chat rooms" -msgstr "कुराकानी कोठा जोड्नुहोस्" +msgstr "कुराकानी कोठाका लागि विषयवस्तु प्रयोग गर्नुहोस्" -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:24 +msgid "Whether or not the Salut account has been created on the first empathy run." +msgstr "पहिलो इम्प्याथी सञ्चालनमा सलुट खाता सिर्जना गरिएको छ या छैन ।" + +#: ../data/empathy.schemas.in.h:25 msgid "" "Whether or not to check words typed against the languages you want to check " "with." -msgstr "" +msgstr "तपाईँले जाँच गर्न चाहनुभएको भाषाहरू विरूद्ध टाइप गरिएको शब्द जाँच गर्ने या नगर्ने ।" -#: ../data/empathy.schemas.in.h:24 -msgid "" -"Whether or not to convert smileys into graphical images in conversations." -msgstr "संवादहरू मा स्माइलिहरूलाई ग्राफिकल छविहरूमा रूपान्तरण गर्ने कि नगर्ने" +#: ../data/empathy.schemas.in.h:26 +msgid "Whether or not to convert smileys into graphical images in conversations." +msgstr "वार्तालापमा स्माइलीहरूलाई ग्राफिकल छविहरूमा रूपान्तरण गर्ने या नगर्ने ।" -#: ../data/empathy.schemas.in.h:25 +#: ../data/empathy.schemas.in.h:27 msgid "Whether or not to play a sound when messages arrive." msgstr "सन्देश आउँदा ध्वनि प्ले गर्ने कि नगर्ने" -#: ../data/empathy.schemas.in.h:26 +#: ../data/empathy.schemas.in.h:28 msgid "Whether or not to play sounds when away." msgstr "टाढा हुँदा ध्वनिहरू प्ले गर्ने कि नगर्ने" -#: ../data/empathy.schemas.in.h:27 +#: ../data/empathy.schemas.in.h:29 msgid "Whether or not to play sounds when busy." -msgstr "व्यस्त हुँदा ध्वनिहरू प्ले गर्ने कि नगर्ने" +msgstr "व्यस्त हुँदा ध्वनिहरू प्ले गर्ने कि नगर्ने ।" -#: ../data/empathy.schemas.in.h:28 -#, fuzzy +#: ../data/empathy.schemas.in.h:30 msgid "Whether or not to show a popup when a contact becomes available." -msgstr "सन्देश आउँदा ध्वनि प्ले गर्ने कि नगर्ने" +msgstr "सम्पर्क उपलब्ध हुँदा पपअप देखाउने या नदेखाउने ।" -#: ../data/empathy.schemas.in.h:29 -#, fuzzy +#: ../data/empathy.schemas.in.h:31 msgid "" "Whether or not to show avatars for contacts in the contact list and chat " "windows." -msgstr "सम्पर्क सूचीमा अफलाइन भएका सम्पर्कहरूलाई देखाउने कि नदेखाउने" +msgstr "सम्पर्क सूची र कुराकानी सञ्झ्यालमा सम्पर्कहरूका लागि अवतारहरू देखाउने या नदेखाउने ।" -#: ../data/empathy.schemas.in.h:30 +#: ../data/empathy.schemas.in.h:32 msgid "Whether or not to show contacts that are offline in the contact list." -msgstr "सम्पर्क सूचीमा अफलाइन भएका सम्पर्कहरूलाई देखाउने कि नदेखाउने" +msgstr "सम्पर्क सूचीमा अफलाइन भएका सम्पर्कहरूलाई देखाउने कि नदेखाउने ।" -#: ../data/empathy.schemas.in.h:31 +#: ../data/empathy.schemas.in.h:33 msgid "" "Whether or not to show the message dialog about closing the main window with " "the 'x' button in the title bar." -msgstr "" +msgstr "शीर्षकपट्टीमा 'x' बटनसँग मुख्य सञ्झ्याल बन्द गर्ने बारे सन्देश संवाद देखाउने या नदेखाउने ।" -#: ../data/empathy.schemas.in.h:32 -#, fuzzy +#: ../data/empathy.schemas.in.h:34 msgid "Whether to show the contact list in compact mode or not." -msgstr "सम्पर्क सूचीमा अफलाइन भएका सम्पर्कहरूलाई देखाउने कि नदेखाउने" +msgstr "सङ्कुचन मोडमा सम्पर्क सूची देखाउने या नदेखाउने ।" -#: ../data/empathy.schemas.in.h:33 +#: ../data/empathy.schemas.in.h:35 msgid "Whether to use the theme for chat rooms or not." -msgstr "" +msgstr "कुराकानी कोठाका लागि विषयवस्तु प्रयोग गर्ने या नगर्ने ।" -#: ../data/empathy.schemas.in.h:34 +#: ../data/empathy.schemas.in.h:36 msgid "" "Which criterium to use when sorting the contact list. Default is to use sort " "by the contact's name with the value \"name\". A value of \"state\" will " "sort the contact list by state." -msgstr "" +msgstr "सम्पर्क सूची क्रमबद्ध गर्दा कुन मापदण्ड प्रयोग गर्ने । मान \"name\" सँग सम्पर्क नाम अनुसार क्रमबद्ध गर्दा पूर्वनिर्धारित प्रयोग गर्ने । मान \"state\" लाई स्थिति अनुसार सम्पर्क सूचीद्वारा क्रमबद्ध गरिनेछ ।" -#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184 -#: ../libempathy/gossip-presence.c:283 +#: ../libempathy/empathy-presence.c:185 ../libempathy/empathy-presence.c:285 msgid "Offline" msgstr "अफलाइन" -#: ../libempathy/gossip-presence.c:274 +#: ../libempathy/empathy-presence.c:275 msgid "Available" msgstr "उपलब्ध" -#: ../libempathy/gossip-presence.c:276 +#: ../libempathy/empathy-presence.c:277 msgid "Busy" msgstr "व्यस्त" -#: ../libempathy/gossip-presence.c:279 +#: ../libempathy/empathy-presence.c:280 msgid "Away" msgstr "टाढा" -#: ../libempathy-gtk/empathy-main-window.c:254 -#, fuzzy -msgid "Show and edit accounts" -msgstr "सम्पर्कहरू देखाउनुहोस्" +#: ../libempathy/empathy-presence.c:282 +msgid "Hidden" +msgstr "लुकेको छु" -#: ../libempathy-gtk/empathy-main-window.c:456 -msgid "Group" -msgstr "समूह" +#: ../libempathy/empathy-tp-contact-list.c:730 ../src/empathy.c:211 +msgid "People nearby" +msgstr "नजिकै छु" -#: ../libempathy-gtk/empathy-main-window.c:477 -#, fuzzy -msgid "Contact" -msgstr "सम्पर्क" - -#: ../libempathy-gtk/empathy-main-window.glade.h:1 -#, fuzzy -msgid "Contact List - Empathy" -msgstr "सम्पर्क सूची लुकाउनुहोस्" - -#: ../libempathy-gtk/empathy-main-window.glade.h:2 -#, fuzzy -msgid "Context" -msgstr "सामग्रीहरू" - -#: ../libempathy-gtk/empathy-main-window.glade.h:3 -#, fuzzy -msgid "Join _Favorites" -msgstr "मनपर्नेहरू थप्नुहोस्" - -#: ../libempathy-gtk/empathy-main-window.glade.h:4 -#: ../libempathy-gtk/gossip-chat.glade.h:10 -msgid "Join _New..." -msgstr "" - -#: ../libempathy-gtk/empathy-main-window.glade.h:5 -msgid "Manage Favorites..." -msgstr "" - -#: ../libempathy-gtk/empathy-main-window.glade.h:6 -msgid "Show _Offline Contacts" -msgstr "अफलाइन सम्पर्कहरू देखाउनुहोस्" - -#: ../libempathy-gtk/empathy-main-window.glade.h:7 -#, fuzzy -msgid "_About" -msgstr "खाताहरू" - -#: ../libempathy-gtk/empathy-main-window.glade.h:8 -msgid "_Accounts" -msgstr "खाताहरू" - -#: ../libempathy-gtk/empathy-main-window.glade.h:9 -#: ../libempathy-gtk/gossip-chat.glade.h:15 -msgid "_Add Contact..." -msgstr "सम्पर्क थप्नुहोस्" - -#: ../libempathy-gtk/empathy-main-window.glade.h:10 -#: ../libempathy-gtk/gossip-contact-list.c:298 -msgid "_Chat" -msgstr "कुराकानि" - -#: ../libempathy-gtk/empathy-main-window.glade.h:11 -msgid "_Contents" -msgstr "सामग्रीहरू" - -#: ../libempathy-gtk/empathy-main-window.glade.h:12 -#: ../libempathy-gtk/gossip-chat.glade.h:21 -#: ../libempathy-gtk/gossip-contact-list.c:310 -#, fuzzy -msgid "_Edit" -msgstr "सम्पादन गर्नुहोस्" - -#: ../libempathy-gtk/empathy-main-window.glade.h:13 -msgid "_Help" -msgstr "" - -#: ../libempathy-gtk/empathy-main-window.glade.h:14 -#: ../libempathy-gtk/empathy-status-icon.glade.h:2 -msgid "_New Message..." -msgstr "नयाँ सन्देश..." - -#: ../libempathy-gtk/empathy-main-window.glade.h:15 -msgid "_Personal Information" -msgstr "व्यक्तिगत जानकारी" - -#: ../libempathy-gtk/empathy-main-window.glade.h:16 -msgid "_Preferences" -msgstr "प्राथमिकताहरु" - -#: ../libempathy-gtk/empathy-main-window.glade.h:17 -#: ../libempathy-gtk/empathy-status-icon.glade.h:3 -msgid "_Quit" -msgstr "" - -#: ../libempathy-gtk/empathy-main-window.glade.h:18 -#: ../libempathy-gtk/gossip-chat.glade.h:25 -msgid "_Room" -msgstr "कोठा" - -#: ../libempathy-gtk/empathy-main-window.glade.h:19 -#: ../libempathy-gtk/gossip-chat.glade.h:28 -#: ../libempathy-gtk/gossip-contact-list.c:326 -msgid "_View Previous Conversations" -msgstr "पछिल्लो वार्तालाप हेर्नुहोस्" - -#: ../libempathy-gtk/empathy-status-icon.glade.h:1 -msgid "Status" -msgstr "वस्तुस्थिति" - -#: ../libempathy-gtk/empathy-status-icon.glade.h:4 -msgid "_Show Contact List" -msgstr "सम्पर्क सूची देखाउनुहोस्" - -#: ../libempathy-gtk/gossip-about-dialog.c:63 -#, fuzzy +#: ../libempathy-gtk/empathy-about-dialog.c:63 msgid "" "Empathy 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." msgstr "" -"गोसिब निशुल्क सफ्टवेयर हो; निशुल्क सफ्टवेयर संस्थाद्धारा GNU साधारण सार्वजनिक अनुमतिपत्रको " +"इम्प्याथी निशुल्क सफ्टवेयर हो; स्वतन्त्र सफ्टवेयर संस्थाद्धारा जीएनयू साधारण सार्वजनिक अनुमतिपत्रको " "रूपमा प्रकाशित शर्तहरू अन्तर्गत रहेर यसलाई परिमार्जन वा/र पुन: वितरण गर्न सक्नुहुन्छ; या " "संस्करण २ को अनुमतिपत्र, वा (तपाईँको विकल्पमा) कुनै पछिल्लो संस्करण।" -#: ../libempathy-gtk/gossip-about-dialog.c:67 -#, fuzzy +#: ../libempathy-gtk/empathy-about-dialog.c:67 msgid "" "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY " "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " @@ -339,44 +226,128 @@ msgid "" "details." msgstr "" "विशेष उद्देश्यका लागि ठीक हुने, वा व्यवहारिक व्यापारिक अधिकार बिना नै, अझ कुनै अधिकार " -"बिना नै, गोसिवलाई यो उपयोगी हने आशामा वितरण गरिएको हो। विस्तृत जानकारीका लागि " -"GNU साधारण सार्वजनिक अनुमतिपत्र हेर्नुहोस्।" +"बिना नै, इम्प्याथीलाई यो उपयोगी हने आशामा वितरण गरिएको हो। विस्तृत जानकारीका लागि " +"जीएनयू साधारण सार्वजनिक अनुमतिपत्र हेर्नुहोस् ।" -#: ../libempathy-gtk/gossip-about-dialog.c:71 -#, fuzzy +#: ../libempathy-gtk/empathy-about-dialog.c:71 msgid "" "You should have received a copy of the GNU General Public License along with " "Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin " "Street, Fifth Floor, Boston, MA 02110-130159 USA" msgstr "" -"तपाईँले गोसिवसँग GNU साधारण सार्वजनिक अनुमतिपत्रको एउटा प्रतिलिपि प्राप्त गर्नुभएको हुन " +"तपाईँले इम्प्याथीसँग जीएनयू साधारण सार्वजनिक अनुमतिपत्रको एउटा प्रतिलिपि प्राप्त गर्नुभएको हुन " "पर्दछ; यदि छैन भने, निशुल्क सफ्टवेयर संस्थालाई, Inc., 59 Temple Place, Suite 330, " "Boston, MA 02111-1307 USA मा लेख्नुहोस्।" -#: ../libempathy-gtk/gossip-about-dialog.c:99 +#: ../libempathy-gtk/empathy-about-dialog.c:99 msgid "An Instant Messaging client for GNOME" -msgstr "जिनोमका लागि एउटा तत्काल सन्देश गर्ने ग्राहक" +msgstr "जिनोमका लागि एउटा शीघ्र सन्देश गर्ने क्लाइन्ट" -#: ../libempathy-gtk/gossip-about-dialog.c:105 +#: ../libempathy-gtk/empathy-about-dialog.c:105 msgid "translator-credits" msgstr "Jaydeep Bhusal <zaydeep@hotmail.com>Mahesh Subedi<submanesh@gmail.com>" -#: ../libempathy-gtk/gossip-accounts-dialog.c:224 -#, fuzzy +#: ../libempathy-gtk/empathy-account-chooser.c:336 +msgid "All" +msgstr "सबै" + +#: ../libempathy-gtk/empathy-account-widget-generic.c:146 +#: ../libempathy-gtk/empathy-account-widget-generic.c:208 +#, c-format +msgid "%s:" +msgstr "%s:" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1 +#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1 +#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1 +msgid "<b>Advanced</b>" +msgstr "<b>उन्नत</b>" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2 +#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2 +msgid "Forget password and clear the entry." +msgstr "पासवर्ड बिर्सनुहोस् र प्रविष्टि खाली गर्नुहोस् ।" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3 +msgid "Login I_D:" +msgstr "लगइन आईडी:" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4 +msgid "Pass_word:" +msgstr "पासवर्ड:" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5 +msgid "Reso_urce:" +msgstr "संसाधन:" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6 +msgid "Use encryption (SS_L)" +msgstr "गुप्तिकरण (SS_L) प्रयोग गर्नुहोस्" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5 +msgid "_Port:" +msgstr "पोर्ट:" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6 +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10 +msgid "_Server:" +msgstr "सर्भर:" + +#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9 +msgid "jabber account settings" +msgstr "ज्याबर खाता सेटिङ" + +#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7 +msgid "msn account settings" +msgstr "एमएसएन खाता सेटिङ" + +#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2 +msgid "_E-mail:" +msgstr "इमेल:" + +#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3 +msgid "_First Name: " +msgstr "पहिलो नाम:" + +#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4 +msgid "_Jabber ID:" +msgstr "ज्याबर आईडी:" + +#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5 +msgid "_Last Name:" +msgstr "अन्तिम नाम:" + +#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6 +#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8 +msgid "_Nickname:" +msgstr "उपनाम:" + +#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7 +msgid "_Published Name:" +msgstr "प्रकाशित गरिएको नाम:" + +#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8 +msgid "salut account settings" +msgstr "सलुट खाता सेटिङ" + +#: ../libempathy-gtk/empathy-accounts-dialog.c:218 msgid "Disable" -msgstr "उपलब्ध" +msgstr "अक्षम पार्नुहोस्" -#: ../libempathy-gtk/gossip-accounts-dialog.c:227 +#: ../libempathy-gtk/empathy-accounts-dialog.c:221 msgid "Enable" -msgstr "" +msgstr "सक्षम पार्नुहोस्" -#: ../libempathy-gtk/gossip-accounts-dialog.c:261 -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3 -#, fuzzy +#: ../libempathy-gtk/empathy-accounts-dialog.c:255 +#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2 msgid "<b>No Account Selected</b>" -msgstr "<b>खाता</b>" +msgstr "<b>खाता चयन गरिएको छैन</b>" -#: ../libempathy-gtk/gossip-accounts-dialog.c:263 +#: ../libempathy-gtk/empathy-accounts-dialog.c:257 msgid "" "To add a new account, you can click on the 'Add' button and a new entry will " "be created for you to start configuring.\n" @@ -384,24 +355,26 @@ msgid "" "If you do not want to add an account, simply click on the account you want " "to configure in the list on the left." msgstr "" +"नयाँ खाता थप्न, तपाईँ 'थप्नुहोस्' बटनमा क्लिक गर्न सक्नुहुन्छ र कन्फिगर सुरु गर्न नयाँ प्रविष्टि सिर्जना गरिनेछ ।\n" +"\n" +"यदि तपाईँ एउटा खाता थप्न चाहनुहुन्छ भने, तपाईँले बायाँपट्टि सूचीमा कन्फिगर गर्न चाहनुभएको खातामा क्लिक गर्नुहोस् ।" -#: ../libempathy-gtk/gossip-accounts-dialog.c:272 -#, fuzzy +#: ../libempathy-gtk/empathy-accounts-dialog.c:266 msgid "<b>No Accounts Configured</b>" -msgstr "<b>खाता</b>" +msgstr "<b>खाताहरू कन्फिगर गरिएको छैन</b>" -#: ../libempathy-gtk/gossip-accounts-dialog.c:274 +#: ../libempathy-gtk/empathy-accounts-dialog.c:268 msgid "" "To add a new account, you can click on the 'Add' button and a new entry will " "be created for you to start configuring." -msgstr "" +msgstr "नयाँ खाता थप्न, तपाईँ 'थप्नुहोस्' बटनमा क्लिक गर्न सक्नुहुन्छ र तपाईँ कन्फिगर सुरु गर्न नयाँ प्रविष्टि सिर्जना गरिनेछ ।" -#: ../libempathy-gtk/gossip-accounts-dialog.c:362 -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6 +#: ../libempathy-gtk/empathy-accounts-dialog.c:394 +#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4 msgid "Accounts" msgstr "खाताहरू" -#: ../libempathy-gtk/gossip-accounts-dialog.c:857 +#: ../libempathy-gtk/empathy-accounts-dialog.c:898 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -410,7 +383,7 @@ msgstr "" "तपाईँले तपाईँको %s खाता हटाउन लाग्नु भएको हो !\n" "तपाईँ काम गर्न यकिन हुनुहुन्छ ?" -#: ../libempathy-gtk/gossip-accounts-dialog.c:863 +#: ../libempathy-gtk/empathy-accounts-dialog.c:904 msgid "" "Any associated conversations and chat rooms will NOT be removed if you " "decide to proceed.\n" @@ -418,42 +391,23 @@ msgid "" "Should you decide to add the account back at a later time, they will still " "be available." msgstr "" -"यदि तपाईँले काम गर्ने निश्चय गर्नु भएमा कुनै सम्बन्धित वार्तालाप र कुराकानी कोठा हट्ने छैन।\n" +"यदि तपाईँले काम गर्ने निश्चय गर्नु भएमा कुनै सम्बन्धित वार्तालाप र कुराकानी कोठा हट्ने छैन ।\n" "\n" -"तपाईँले पछिल्लो समयमा खाता पछि थप्ने निश्चय गर्नुभयो, तिनिहरू अहिले पनि उपलब्ध हुँनेछन्।" - -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1 -msgid "<b>Account</b>" -msgstr "<b>खाता</b>" +"तपाईँले पछिल्लो समयमा खाता पछि थप्ने निश्चय गर्नुभयो, तिनिहरू अहिले पनि उपलब्ध हुनेछन् ।" -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2 -#, fuzzy +#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1 msgid "<b>New Account</b>" -msgstr "<b>खाता</b>" +msgstr "<b>नयाँ खाता</b>" -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4 -#, fuzzy +#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3 msgid "<b>Settings</b>" -msgstr "<b>वस्तुस्थिती</b>" - -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5 -msgid "A unique name for this account to identify it personally to you." -msgstr "" +msgstr "<b>सेटिङ</b>" -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7 -#, fuzzy +#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5 msgid "Cr_eate" -msgstr "कुराकानी!" - -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8 -msgid "Imendio " -msgstr "" +msgstr "सिर्जना गर्नुहोस्" -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9 -msgid "Jabber" -msgstr "ज्याबर" - -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10 +#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6 msgid "" "To add a new account, you can click on the 'Add' button and a new entry will " "be created for you to started configuring.\n" @@ -461,1491 +415,845 @@ msgid "" "If you do not want to add an account, simply click on the account you want " "to configure in the list on the left." msgstr "" +"नयाँ खाता थप्न, तपाईँ 'थप्नुहोस्' बटनमा क्लिक गर्न सक्नुहुन्छ र तपाईँलाई कन्फिगर सुरु गर्न नयाँ प्रविष्टि सिर्जना गरिनेछ ।\n" +"\n" +"यदि तपाईँ एउटा खाता थप्न चाहनुहुन्न भने, सामान्यतया बायाँपट्टि सूचीमा कन्फिगर गर्न चाहनुभएको खातामा क्लिक गर्नुहोस् ।" -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13 -msgid "_Name:" -msgstr "नाम:" +#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9 +msgid "Type:" +msgstr "प्रकार:" -#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14 -#, fuzzy -msgid "_Type:" -msgstr "विषय:" +#: ../libempathy-gtk/empathy-call-window.glade.h:1 +msgid "Call" +msgstr "आह्वान" -#: ../libempathy-gtk/gossip-account-widget-generic.c:144 -#: ../libempathy-gtk/gossip-account-widget-generic.c:186 -#, c-format -msgid "%s:" -msgstr "" +#: ../libempathy-gtk/empathy-call-window.glade.h:2 +msgid "Input" +msgstr "आगत" -#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1 -#, fuzzy -msgid "" -"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></" -"small>" -msgstr "<span size=\"smaller\">उदाहरण: user@jabber.org</span>" +#: ../libempathy-gtk/empathy-call-window.glade.h:3 +msgid "Mute" +msgstr "मौन" -#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2 -msgid "Forget password and clear the entry." -msgstr "" +#: ../libempathy-gtk/empathy-call-window.glade.h:4 +msgid "Output" +msgstr "निर्गत" -#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3 -msgid "Login I_D:" -msgstr "लगइन ID:" +#: ../libempathy-gtk/empathy-call-window.glade.h:5 +msgid "Send Video" +msgstr "भिडियो पठाउनुहोस्" -#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4 -msgid "Pass_word:" -msgstr "पासवर्ड:" +#: ../libempathy-gtk/empathy-call-window.glade.h:6 +msgid "Volume" +msgstr "भोल्युम" -#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5 -msgid "Reso_urce:" -msgstr "संसाधन:" +#: ../libempathy-gtk/empathy-chat.c:335 +msgid "Disconnected" +msgstr "जडान विच्छेद गरियो" -#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6 -#, fuzzy -msgid "Use encryption (SS_L)" -msgstr "गुप्तिकरण प्रयोग गर्नुहोस् (एसएसएल)" +#: ../libempathy-gtk/empathy-chat.c:450 +msgid "offline" +msgstr "अफलाइन" -#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7 -msgid "_Port:" -msgstr "पोर्ट:" +#: ../libempathy-gtk/empathy-chat.c:453 +msgid "invalid contact" +msgstr "अवैध सम्पर्क" -#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8 -msgid "_Server:" -msgstr "सर्भर:" +#: ../libempathy-gtk/empathy-chat.c:456 +msgid "permission denied" +msgstr "अनुमति अस्वीकार गरियो" -#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9 -msgid "jabber account settings" -msgstr "" +#: ../libempathy-gtk/empathy-chat.c:459 +msgid "too long message" +msgstr "अति लामो सन्देश" -#: ../libempathy-gtk/gossip-chat.c:314 -msgid "Disconnected" -msgstr "जडान विच्छेद गरियो" +#: ../libempathy-gtk/empathy-chat.c:462 +msgid "not implemented" +msgstr "कार्यान्वयन भएको छैन" + +#: ../libempathy-gtk/empathy-chat.c:465 +msgid "unknown" +msgstr "अज्ञात" + +#: ../libempathy-gtk/empathy-chat.c:469 +#, c-format +msgid "Error sending message '%s': %s" +msgstr "सन्देश पठाउँदा त्रुटि '%s': %s" -#: ../libempathy-gtk/gossip-chat.c:858 +#: ../libempathy-gtk/empathy-chat.c:924 msgid "Insert Smiley" -msgstr "स्माइलि घुसाउनुहोस्" +msgstr "स्माइली घुसाउनुहोस्" -#: ../libempathy-gtk/gossip-chat.c:906 +#: ../libempathy-gtk/empathy-chat.c:972 msgid "_Check Word Spelling..." -msgstr "अक्षर हिज्जे परीक्षण जाँच गर्नुहोस्..." +msgstr "शब्द हिज्जे जाँच गर्नुहोस्..." -#: ../libempathy-gtk/gossip-chat.c:1244 +#: ../libempathy-gtk/empathy-chat.c:1397 msgid "Connected" msgstr "जडान गरियो" -#: ../libempathy-gtk/gossip-chat.glade.h:1 -#, fuzzy +#: ../libempathy-gtk/empathy-chat.glade.h:1 msgid "C_lear" -msgstr "सूची खाली गर्नुहोस्" +msgstr "खाली गर्नुहोस्" + +#: ../libempathy-gtk/empathy-chat.glade.h:2 +msgid "Ca_ll" +msgstr "आह्वान" -#: ../libempathy-gtk/gossip-chat.glade.h:2 +#: ../libempathy-gtk/empathy-chat.glade.h:3 msgid "Change _Topic..." -msgstr "" +msgstr "विषय परिवर्तन गर्नुहोस्..." -#: ../libempathy-gtk/gossip-chat.glade.h:3 +#: ../libempathy-gtk/empathy-chat.glade.h:4 msgid "Chat" msgstr "कुराकानी" -#: ../libempathy-gtk/gossip-chat.glade.h:4 +#: ../libempathy-gtk/empathy-chat.glade.h:5 msgid "Contact Infor_mation" msgstr "सम्पर्क जानकारी" -#: ../libempathy-gtk/gossip-chat.glade.h:5 -#, fuzzy +#: ../libempathy-gtk/empathy-chat.glade.h:6 msgid "Cu_t" -msgstr "कुराकानी" +msgstr "काट्नुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:6 -#, fuzzy +#: ../libempathy-gtk/empathy-chat.glade.h:7 msgid "In_vite..." -msgstr "निमन्त्रणा" +msgstr "निमन्त्रणा गर्नुहोस्..." -#: ../libempathy-gtk/gossip-chat.glade.h:7 +#: ../libempathy-gtk/empathy-chat.glade.h:8 msgid "Insert _Smiley" msgstr "स्माइली घुसाउनुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:8 -#, fuzzy +#: ../libempathy-gtk/empathy-chat.glade.h:9 msgid "Invitation _message:" -msgstr "अवस्था सन्देश प्रविष्ट गर्नुहोस्" +msgstr "निमन्त्रणा सन्देश:" -#: ../libempathy-gtk/gossip-chat.glade.h:9 -#, fuzzy +#: ../libempathy-gtk/empathy-chat.glade.h:10 msgid "Invite" -msgstr "निमन्त्रणा" +msgstr "निमन्त्रणा गर्नुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:11 +#: ../libempathy-gtk/empathy-chat.glade.h:11 +#: ../libempathy-gtk/empathy-main-window.glade.h:4 +msgid "Join _New..." +msgstr "नयाँ जडान गर्नुहोस्..." + +#: ../libempathy-gtk/empathy-chat.glade.h:12 msgid "Move Tab _Left" -msgstr "ट्याब बायाँ तिर सार्नुहोस्" +msgstr "ट्याब बायाँतिर सार्नुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:12 +#: ../libempathy-gtk/empathy-chat.glade.h:13 msgid "Move Tab _Right" msgstr "ट्याब दायाँतिर सार्नुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:13 +#: ../libempathy-gtk/empathy-chat.glade.h:14 msgid "Select who would you like to invite:" -msgstr "" +msgstr "तपाईँ कसलाई निमन्त्रणा गर्न चाहनुहुन्छ चयन गर्नुहोस्:" -#: ../libempathy-gtk/gossip-chat.glade.h:14 +#: ../libempathy-gtk/empathy-chat.glade.h:15 msgid "You have been invited to join a chat conference." -msgstr "तपाईँलाई कुराकानी सम्मेलनमा जोड्न निमन्त्रण गरिएको छ।" +msgstr "तपाईँलाई कुराकानी सम्मेलनमा जोड्न निमन्त्रण गरिएको छ ।" + +#: ../libempathy-gtk/empathy-chat.glade.h:16 +#: ../libempathy-gtk/empathy-main-window.glade.h:9 +msgid "_Add Contact..." +msgstr "सम्पर्क थप्नुहोस्..." -#: ../libempathy-gtk/gossip-chat.glade.h:16 +#: ../libempathy-gtk/empathy-chat.glade.h:17 msgid "_Add To Favorites" msgstr "मनपर्नेहरू थप्नुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:17 +#: ../libempathy-gtk/empathy-chat.glade.h:18 msgid "_Close" -msgstr "" +msgstr "बन्द गर्नुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:18 +#: ../libempathy-gtk/empathy-chat.glade.h:19 msgid "_Conversation" msgstr "वार्तालाप" -#: ../libempathy-gtk/gossip-chat.glade.h:19 +#: ../libempathy-gtk/empathy-chat.glade.h:20 msgid "_Copy" -msgstr "" +msgstr "प्रतिलिपि बनाउनुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:20 +#: ../libempathy-gtk/empathy-chat.glade.h:21 msgid "_Detach Tab" msgstr "ट्याबलाई छुट्याउनुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:22 +#: ../libempathy-gtk/empathy-chat.glade.h:22 +#: ../libempathy-gtk/empathy-contact-list-view.c:218 +#: ../libempathy-gtk/empathy-main-window.glade.h:12 +msgid "_Edit" +msgstr "सम्पादन गर्नुहोस्" + +#: ../libempathy-gtk/empathy-chat.glade.h:23 msgid "_Next Tab" -msgstr "आर्को ट्याब" +msgstr "पछिल्लो ट्याब" -#: ../libempathy-gtk/gossip-chat.glade.h:23 -#, fuzzy +#: ../libempathy-gtk/empathy-chat.glade.h:24 msgid "_Paste" -msgstr "मिति" +msgstr "टाँस्नुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:24 +#: ../libempathy-gtk/empathy-chat.glade.h:25 msgid "_Previous Tab" msgstr "अघिल्लो ट्याब" -#: ../libempathy-gtk/gossip-chat.glade.h:26 +#: ../libempathy-gtk/empathy-chat.glade.h:26 +#: ../libempathy-gtk/empathy-main-window.glade.h:18 +msgid "_Room" +msgstr "कोठा" + +#: ../libempathy-gtk/empathy-chat.glade.h:27 msgid "_Show Contacts" msgstr "सम्पर्कहरू देखाउनुहोस्" -#: ../libempathy-gtk/gossip-chat.glade.h:27 +#: ../libempathy-gtk/empathy-chat.glade.h:28 msgid "_Tabs" msgstr "ट्याबहरु" -#: ../libempathy-gtk/gossip-chat-view.c:544 +#: ../libempathy-gtk/empathy-chat.glade.h:29 +#: ../libempathy-gtk/empathy-contact-list-view.c:234 +#: ../libempathy-gtk/empathy-main-window.glade.h:19 +msgid "_View Previous Conversations" +msgstr "पछिल्लो वार्तालाप हेर्नुहोस्" + +#: ../libempathy-gtk/empathy-chat-view.c:468 msgid "_Copy Link Address" msgstr "लिङ्क ठेगानाको प्रतिलिपि बनाउनुहोस्" -#: ../libempathy-gtk/gossip-chat-view.c:552 +#: ../libempathy-gtk/empathy-chat-view.c:476 msgid "_Open Link" msgstr "लिङ्क खोल्नुहोस्" -#: ../libempathy-gtk/gossip-chat-view.c:889 +#: ../libempathy-gtk/empathy-chat-view.c:754 msgid "%A %d %B %Y" msgstr "%A %d %B %Y" -#: ../libempathy-gtk/gossip-chat-window.c:685 -#: ../libempathy-gtk/gossip-chat-window.c:715 -#, fuzzy -msgid "New Message" -msgid_plural "New Messages" -msgstr[0] "नयाँ सन्देश" -msgstr[1] "नयाँ सन्देश" - -#: ../libempathy-gtk/gossip-chat-window.c:691 -#, fuzzy -msgid "Chat Room" -msgstr "कुराकानी कोठा" - -#: ../libempathy-gtk/gossip-chat-window.c:696 -#: ../libempathy-gtk/gossip-chat-window.c:719 -#, fuzzy, c-format -msgid "Conversation" -msgid_plural "Conversations (%d)" -msgstr[0] "वार्तालाप" -msgstr[1] "वार्तालाप" +#: ../libempathy-gtk/empathy-chat-window.c:709 +#, c-format +msgid "Conversations (%d)" +msgstr "वार्तालाप (%d)" -#: ../libempathy-gtk/gossip-chat-window.c:1295 +#: ../libempathy-gtk/empathy-chat-window.c:1295 msgid "Typing a message." -msgstr "सन्देश टाइप गर्दै" +msgstr "सन्देश टाइप गर्दै ।" -#: ../libempathy-gtk/gossip-contact-list.c:290 -#, fuzzy +#: ../libempathy-gtk/empathy-chatrooms-window.c:258 +msgid "Name" +msgstr "नाम" + +#: ../libempathy-gtk/empathy-chatrooms-window.c:276 +msgid "Room" +msgstr "कोठा" + +#: ../libempathy-gtk/empathy-chatrooms-window.c:285 +msgid "Auto Connect" +msgstr "स्वत: जडान गर्नुहोस्" + +#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1 +#: ../libempathy-gtk/empathy-contact-widget.glade.h:5 +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1 +msgid "Account:" +msgstr "खाता:" + +#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2 +msgid "Edit Favorite Room" +msgstr "मनपर्ने कोठा सम्पादन गर्नुहोस्" + +#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3 +msgid "Join room on start_up" +msgstr "सुरुआतमा कोठा जडान गर्नुहोस्" + +#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4 +msgid "Join this chat room when Empathy starts and you are connected" +msgstr "इम्प्याथी सुरु हुँदा र तपाईँ जडान हुँदा यो कुराकानी कोठा जडान गर्नुहोस्" + +#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5 +msgid "Manage Favorite Rooms" +msgstr "मनपर्ने कोठा प्रबन्ध गर्नुहोस्" + +#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6 +msgid "N_ame:" +msgstr "नाम:" + +#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7 +msgid "S_erver:" +msgstr "सर्भर:" + +#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9 +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9 +msgid "_Room:" +msgstr "कोठा:" + +#: ../libempathy-gtk/empathy-contact-dialogs.c:173 +#: ../libempathy-gtk/empathy-contact-widget.glade.h:9 +msgid "Contact information" +msgstr "सम्पर्क जानकारी" + +#: ../libempathy-gtk/empathy-contact-dialogs.c:221 +msgid "I would like to add you to my contact list." +msgstr "म तपाईँलाई मेरो सम्पर्क सूचीमा थप्न चाहन्छु ।" + +#: ../libempathy-gtk/empathy-contact-dialogs.c:245 +msgid "New contact" +msgstr "नयाँ सम्पर्क" + +#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1 +msgid "Decide _Later" +msgstr "पछि निर्णय गर्नुहोस्" + +#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2 +msgid "Subscription Request" +msgstr "सदस्यता अनुरोध" + +#: ../libempathy-gtk/empathy-contact-list-view.c:198 msgid "_Contact" msgstr "सम्पर्क" -#: ../libempathy-gtk/gossip-contact-list.c:294 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:202 msgid "_Group" msgstr "समूह" -#: ../libempathy-gtk/gossip-contact-list.c:298 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:206 +#: ../libempathy-gtk/empathy-main-window.glade.h:10 +msgid "_Chat" +msgstr "कुराकानी" + +#: ../libempathy-gtk/empathy-contact-list-view.c:206 msgid "Chat with contact" -msgstr "एउटा सम्पर्क थप्नुहोस्" +msgstr "सम्पर्क सहित कुराकानी" -#: ../libempathy-gtk/gossip-contact-list.c:302 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:210 msgid "Infor_mation" -msgstr "सम्पर्क जानकारी" +msgstr "जानकारी" -#: ../libempathy-gtk/gossip-contact-list.c:302 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:210 msgid "View contact information" -msgstr "सम्पर्क जानकारी" +msgstr "सम्पर्क जानकारी हेर्नुहोस्" -#: ../libempathy-gtk/gossip-contact-list.c:306 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:214 msgid "Re_name" -msgstr "समूह पुन: नामकरण गर्नुहोस्" +msgstr "पुन: नामकरण गर्नुहोस्" -#: ../libempathy-gtk/gossip-contact-list.c:306 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:214 msgid "Rename" -msgstr "फाइल नाम:" +msgstr "पुन: नामकरण गर्नुहोस्" -#: ../libempathy-gtk/gossip-contact-list.c:310 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:218 msgid "Edit the groups and name for this contact" -msgstr "कृपया यो खाताका लागि एउटा नाम प्रविष्ट गर्नुहोस्।" +msgstr "यो सम्पर्कका लागि समूह र नाम सम्पादन गर्नुहोस्" -#: ../libempathy-gtk/gossip-contact-list.c:314 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:222 msgid "_Remove" -msgstr "/सम्पर्क हटाउनुहोस्" +msgstr "हटाउनुहोस्" -#: ../libempathy-gtk/gossip-contact-list.c:314 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:222 msgid "Remove contact" -msgstr "/सम्पर्क हटाउनुहोस्" +msgstr "सम्पर्क हटाउनुहोस्" -#: ../libempathy-gtk/gossip-contact-list.c:318 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:226 msgid "_Invite to Chat Room" -msgstr "/कुराकानी कोठामा निमन्त्रणा गर्नुहोस्" +msgstr "कुराकानी कोठामा निमन्त्रणा गर्नुहोस्" -#: ../libempathy-gtk/gossip-contact-list.c:318 +#: ../libempathy-gtk/empathy-contact-list-view.c:226 msgid "Invite to a currently open chat room" -msgstr "" +msgstr "हालै खोलिएको कुराकानी कोठामा निमन्त्रणा गर्नुहोस्" -#: ../libempathy-gtk/gossip-contact-list.c:322 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:230 msgid "_Send File..." -msgstr "/फाइल पठाउनुहोस्..." +msgstr "फाइल पठाउनुहोस्..." -#: ../libempathy-gtk/gossip-contact-list.c:322 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:230 msgid "Send a file" -msgstr "एउटा फाइल चयन गर्नुहोस्" +msgstr "फाइल पठाउनुहोस्" -#: ../libempathy-gtk/gossip-contact-list.c:326 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-list-view.c:234 msgid "View previous conversations with this contact" -msgstr "अघिल्लो वार्तालाप हेर्नुहोस्" +msgstr "यो सम्पर्कसँग अघिल्लो वार्तालाप हेर्नुहोस्" -#: ../libempathy-gtk/gossip-preferences.c:250 -msgid "Language" -msgstr "भाषा" +#: ../libempathy-gtk/empathy-contact-list-view.c:239 +msgid "_Call" +msgstr "आह्वान" -#: ../libempathy-gtk/gossip-preferences.glade.h:1 -#, fuzzy -msgid "<b>Appearance</b>" -msgstr "<b>देखावट र व्यवहार</b>" +#: ../libempathy-gtk/empathy-contact-list-view.c:239 +msgid "Start a voice or video conversation with this contact" +msgstr "यो सम्पर्कसँग आवाज वा भिडियो वार्तालाप सुरु गर्नुहोस्" -#: ../libempathy-gtk/gossip-preferences.glade.h:2 -#, fuzzy -msgid "<b>Audio</b>" -msgstr "<b>बारेमा</b>" +#: ../libempathy-gtk/empathy-contact-list-view.c:1414 +msgid "Sorry, I don't want you in my contact list anymore." +msgstr "माफ गर्नुहोस्, तपाईँलाई मेरो सम्पर्क सूचीमा राख्न चाहन्न ।" -#: ../libempathy-gtk/gossip-preferences.glade.h:3 -#, fuzzy -msgid "<b>Behaviour</b>" -msgstr "<b>देखावट र व्यवहार</b>" - -#: ../libempathy-gtk/gossip-preferences.glade.h:4 -#, fuzzy -msgid "<b>Contact List</b>" -msgstr "<b>जडान</b>" - -#: ../libempathy-gtk/gossip-preferences.glade.h:5 -msgid "<b>Languages</b>" -msgstr "<b>भाषाहरू</b>" - -#: ../libempathy-gtk/gossip-preferences.glade.h:6 -msgid "<b>Options</b>" -msgstr "<b>विकल्पहरू</b>" - -#: ../libempathy-gtk/gossip-preferences.glade.h:7 -#, fuzzy -msgid "<b>Visual</b>" -msgstr "<b>विकल्पहरू</b>" +#: ../libempathy-gtk/empathy-contact-widget.c:637 +msgid "Select" +msgstr "चयन गर्नुहोस्" -#: ../libempathy-gtk/gossip-preferences.glade.h:8 -#, fuzzy -msgid "" -"<small>The list of languages reflects only the languages for which you have " -"a dictionary installed.</small>" -msgstr "" -"भाषाहरूको सूचीले यहाँ केबल तपाईँले जसका लागि शब्दकोश स्थापना गर्नुभएको थियो मात्र " -"प्रतिबिम्वित गर्दछ।" - -#: ../libempathy-gtk/gossip-preferences.glade.h:9 -msgid "Avatars are user chosen images shown in the contact list" -msgstr "" - -#: ../libempathy-gtk/gossip-preferences.glade.h:10 -#, fuzzy -msgid "Chat Th_eme:" -msgstr "कुराकानि विषयवस्तु:" - -#: ../libempathy-gtk/gossip-preferences.glade.h:11 -msgid "Display notifications when contacts come _online" -msgstr "" - -#: ../libempathy-gtk/gossip-preferences.glade.h:12 -#, fuzzy -msgid "Enable sounds when _away" -msgstr "टाढा हुँदा ध्वनिहरू अक्षम पार्नुहोस्" - -#: ../libempathy-gtk/gossip-preferences.glade.h:13 -#, fuzzy -msgid "Enable sounds when _busy" -msgstr "व्यस्त हुँदा ध्वनिहरू अक्षम पार्दछ" - -#: ../libempathy-gtk/gossip-preferences.glade.h:14 -msgid "General" -msgstr "सामान्य" - -#: ../libempathy-gtk/gossip-preferences.glade.h:15 -#, fuzzy -msgid "Notifications" -msgstr "सूचीत गर्ने ध्वनिहरू प्रयोग गर्नुहोस्" +#: ../libempathy-gtk/empathy-contact-widget.c:647 +#: ../libempathy-gtk/empathy-main-window.c:613 +msgid "Group" +msgstr "समूह" -#: ../libempathy-gtk/gossip-preferences.glade.h:16 -msgid "Preferences" -msgstr "प्राथमिकताहरु" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:1 +msgid "<b>Client Information</b>" +msgstr "<b>क्लाइन्ट जानकारी</b>" -#: ../libempathy-gtk/gossip-preferences.glade.h:17 -msgid "Show _avatars" -msgstr "" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:2 +msgid "<b>Contact Details</b>" +msgstr "<b>सम्पर्क विवरण</b>" -#: ../libempathy-gtk/gossip-preferences.glade.h:18 -#, fuzzy -msgid "Show _smileys as images" -msgstr "स्माइलिहरूलाई ग्राफिकल छविहरूमा परिवर्तन गर्नुहोस्" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:3 +msgid "<b>Contact</b>" +msgstr "<b>सम्पर्क</b>" -#: ../libempathy-gtk/gossip-preferences.glade.h:19 -#, fuzzy -msgid "Show co_mpact contact list" -msgstr "सम्पर्क सूची देखाउनुहोस्" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:4 +msgid "<b>Groups</b>" +msgstr "<b>समूह</b>" -#: ../libempathy-gtk/gossip-preferences.glade.h:20 -msgid "Sort by _name" -msgstr "" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:6 +msgid "Alias:" +msgstr "उपनाम:" -#: ../libempathy-gtk/gossip-preferences.glade.h:21 -msgid "Sort by s_tate" -msgstr "" - -#: ../libempathy-gtk/gossip-preferences.glade.h:22 -msgid "Spell Checking" -msgstr "हिज्जे जाँच" - -#: ../libempathy-gtk/gossip-preferences.glade.h:23 -msgid "Themes" -msgstr "" - -#: ../libempathy-gtk/gossip-preferences.glade.h:24 -#, fuzzy -msgid "_Enable spell checking" -msgstr "हिज्जे परीक्षण सक्षम पार्नुहोस्" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:7 +msgid "Birthday:" +msgstr "जन्मदिन:" -#: ../libempathy-gtk/gossip-preferences.glade.h:25 -msgid "_Open new chats in separate windows" -msgstr "नयाँ कुराकानी छुट्टै सञ्झ्यालहरूमा खोल्नुहोस्" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:8 +msgid "Client:" +msgstr "क्लाइन्ट:" -#: ../libempathy-gtk/gossip-preferences.glade.h:26 -msgid "_Play sound when messages arrive" -msgstr "सन्देशहरू आउँदा ध्वनि प्ले गर्नुहोस्" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:10 +msgid "Email:" +msgstr "इमेल:" -#: ../libempathy-gtk/gossip-preferences.glade.h:27 -#, fuzzy -msgid "_Use for chat rooms" -msgstr "यो कुराकानी कोठा बचत गर्नुहोस्" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:11 +msgid "Fullname:" +msgstr "पूरा नाम:" -#: ../libempathy-gtk/gossip-presence-chooser.c:702 -#, fuzzy -msgid "Custom message..." -msgstr "नयाँ सन्देश..." +#: ../libempathy-gtk/empathy-contact-widget.glade.h:12 +msgid "Identifier:" +msgstr "पहिचायक:" -#. Clear list -#: ../libempathy-gtk/gossip-presence-chooser.c:724 -#, fuzzy -msgid "Clear List..." -msgstr "सूची खाली गर्नुहोस्" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:13 +msgid "Information requested..." +msgstr "जानकारी अनुरोध गरियो..." -#: ../libempathy-gtk/gossip-presence-chooser.c:803 -#, fuzzy -msgid "Are you sure you want to clear the list?" -msgstr "के तपाईँ सो फाइल स्विकार गर्न चाहनुहुन्छ ?" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:14 +msgid "OS:" +msgstr "सञ्चालन प्रणाली:" -#: ../libempathy-gtk/gossip-presence-chooser.c:807 +#: ../libempathy-gtk/empathy-contact-widget.glade.h:15 msgid "" -"This will remove any custom messages you have added to the list of preset " -"status messages." -msgstr "" - -#: ../libempathy-gtk/gossip-presence-chooser.c:812 -msgid "Clear List" -msgstr "सूची खाली गर्नुहोस्" +"Select the groups you want this contact to appear in, you can select more " +"than one group or no groups." +msgstr "तपाईँले यो सम्पर्क देखाउनु चाहनुभएको समूह चयन गर्नुहोस्, तपाईँले बढीमा एउटा समूह वा समूह नभएको चयन गर्न सक्नुहुन्छ ।" -#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1 -msgid "Enter status message:" -msgstr "अवस्था सन्देश प्रविष्ट गर्नुहोस्" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:16 +msgid "Version:" +msgstr "संस्करण:" -#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2 -msgid "Status Message Presets" -msgstr "स्थिति सन्देश प्रस्तुत गर्दछ" +#: ../libempathy-gtk/empathy-contact-widget.glade.h:17 +msgid "Web site:" +msgstr "वेब साइट:" -#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3 -#, fuzzy -msgid "_Add to status message list" -msgstr "स्थितिमा सन्देश सूची थप्नुहोस्" +#: ../libempathy-gtk/empathy-group-chat.c:253 +msgid "Enter the new topic you want to set for this room:" +msgstr "तपाईँले यो कोठाका लागि सेट गर्न चाहनुभएको नयाँ विषय प्रविष्ट गर्नुहोस्:" -#: ../libempathy-gtk/gossip-private-chat.c:198 +#: ../libempathy-gtk/empathy-group-chat.c:366 #, c-format -msgid "%s went offline" -msgstr "%s अफलाइन भयो" +msgid "%s has joined the room" +msgstr "%s ले कोठा जडान गर्यो" -#: ../libempathy-gtk/gossip-private-chat.c:212 +#: ../libempathy-gtk/empathy-group-chat.c:369 #, c-format -msgid "%s has come online" -msgstr "%s अनलाइन भयो" - -#: ../libempathy-gtk/gossip-theme-manager.c:87 -msgid "Classic" -msgstr "पुरानो" - -#: ../libempathy-gtk/gossip-theme-manager.c:88 -#, fuzzy -msgid "Simple" -msgstr "उदाहरण" - -#: ../libempathy-gtk/gossip-theme-manager.c:89 -#, fuzzy -msgid "Clean" -msgstr "ग्राहक:" - -#: ../libempathy-gtk/gossip-theme-manager.c:90 -msgid "Blue" -msgstr "नीलो" - -#: ../src/empathy-main.c:145 -msgid "Don't connect on startup" -msgstr "सुरुवातमा जडान नगर्नुहोस्" - -#: ../src/empathy-main.c:155 -#, fuzzy -msgid "- Empathy Instant Messenger" -msgstr "- गोसिव तयारि मेसेन्जर" - -#~ msgid "Gossip Instant Messenger" -#~ msgstr "गोसिप तयारि मेसेन्जर" - -#~ msgid "Normal" -#~ msgstr "सामान्य" - -#~ msgid "Joining" -#~ msgstr "जोङ्दै" - -#~ msgid "Active" -#~ msgstr "सक्रिय" - -#~ msgid "Inactive" -#~ msgstr "निष्क्रिय" - -#~ msgid "Unknown" -#~ msgstr "अज्ञात" - -#~ msgid "Error" -#~ msgstr "त्रुटि" - -#, fuzzy -#~ msgid "No role" -#~ msgstr "सामान्य" - -#~ msgid "The nickname you have chosen is already in use." -#~ msgstr "तपाईँले छनौट गर्नुभएको उपनाम पहिला नै प्रयोगमा छ।" - -#~ msgid "The chat room you tried to join requires a password." -#~ msgstr "तपाईँले जोड्न प्रयास गर्न भएको कुराकानी सञ्झ्याललाई पासवर्ड आवश्यक पर्दछ।" - -#~ msgid "The remote conference server did not respond in a sensible time." -#~ msgstr "दूर कन्फेरेन्स सर्भरले मनाशिव समयमा प्रतिक्रिया जनाएन।" - -#~ msgid "The conference server you tried to join could not be found." -#~ msgstr "तपाईँले जोड्न चाहनुभएको कन्फेरेन्स सर्भर फेला पार्न सकिएन।" - -#~ msgid "An unknown error occurred, check your details are correct." -#~ msgstr "अज्ञात त्रुटि भयो, तपाईँको विस्तृत ठीक भनि जाँच गर्नुहोस्।" - -#, fuzzy -#~ msgid "Joining the chatroom was canceled." -#~ msgstr "कुराकानी कोठा जोड्नुहोस्" - -#, fuzzy -#~ msgid "Unavailable" -#~ msgstr "उपलब्ध" - -#~ msgid "An unknown error occurred." -#~ msgstr "एउटा अज्ञात त्रुटि भयो।" - -#~ msgid "Connection refused." -#~ msgstr "जडान अविस्कृत" - -#~ msgid "Server address could not be resolved." -#~ msgstr "सर्भर ठेगाना पुन: समाधान हुन सक्दैन।" - -#~ msgid "Connection timed out." -#~ msgstr "जडान समय समाप्त" - -#~ msgid "Authentication failed." -#~ msgstr "प्रमाणीकरण असफल" - -#~ msgid "The username you are trying already exists." -#~ msgstr "तपाईँले प्रयाश गर्नुभएको प्रयोगकर्ता नाम पहिल्यै अवस्थित छ।" - -#~ msgid "The username you are trying is not valid." -#~ msgstr "तपाईँले प्रयास गर्नुभएको प्रयोगकर्ता नाम वैध छैन।" - -#~ msgid "This feature is unavailable." -#~ msgstr "यो विशेषता उपलब्ध छैन।" - -#~ msgid "This feature is unauthorized." -#~ msgstr "यो विशेषता प्रमाणीकरण छैन।" - -#~ msgid "A specific protocol error occurred that was unexpected." -#~ msgstr "एउटा अप्रत्यासित प्रोटोकल त्रुटि देखा पर्यो।" - -#, fuzzy -#~ msgid "new account" -#~ msgstr "नयाँ खाता" - -#~ msgid "Home" -#~ msgstr "गृह" - -#~ msgid "Couldn't send message!" -#~ msgstr "सन्देश पठाउन सकिएन !" - -#~ msgid "Connection could not be opened" -#~ msgstr "जडान खोल्न सकिँदैन" - -#, fuzzy -#~ msgid "This service is unavailable or not found" -#~ msgstr "यो विशेषता उपलब्ध छैन।" - -#, fuzzy -#~ msgid "Registration is required" -#~ msgstr "दर्ता" - -#, fuzzy -#~ msgid "This feature is not implemented" -#~ msgstr "यो विशेषता प्रमाणीकरण छैन।" - -#~ msgid "Disconnect" -#~ msgstr "जडान विच्छेद गर्नुहोस्" - -#~ msgid "Connect" -#~ msgstr "जडान" - -#, fuzzy -#~ msgid "Successfully registered your new account settings." -#~ msgstr "तपाईँको नयाँ खाता दर्ता गर्न असफल" - -#, fuzzy -#~ msgid "You should now be able to connect to your new account." -#~ msgstr "तपाईँले --no-connect संग--accountसँगै प्रयोग गर्न सक्नुहुन्न" - -#, fuzzy -#~ msgid "Failed to register your new account settings." -#~ msgstr "तपाईँको नयाँ खाता दर्ता गर्न असफल" - -#, fuzzy -#~ msgid "Successfully changed your account password." -#~ msgstr "तपाईँको खाता पासवर्ड प्रविष्ट गर्नुहोस्:" - -#, fuzzy -#~ msgid "Failed to change your account password." -#~ msgstr "तपाईँको खाता पासवर्ड प्रविष्ट गर्नुहोस्:" - -#, fuzzy -#~ msgid "" -#~ "Please enter a new password for this account:\n" -#~ "%s" -#~ msgstr "" -#~ "कृपया समूहका लागि नयाँ नाम प्रविष्ट गर्नुहोस्:\n" -#~ "%s" - -#~ msgid "No information is available for this contact." -#~ msgstr "सम्पर्कका लागि कुनै पनि सूचना उपलब्ध छैन।" - -#~ msgid "Information requested, please wait..." -#~ msgstr "जानकारी अनुरोध गरिएको छ, कृपया प्रतीक्षा गर्नुहोस्..." - -#~ msgid "I would like to add you to my contact list." -#~ msgstr "म तपाईँलाई मेरो सम्पर्क सूचीमा थप्न चाहन्छु" - -#~ msgid "To summarize:" -#~ msgstr "संक्षेपिकरण गर्न:" - -#, fuzzy -#~ msgid "%d new message" -#~ msgid_plural "%d new messages" -#~ msgstr[0] "नयाँ सन्देश" -#~ msgstr[1] "नयाँ सन्देश" - -#, fuzzy -#~ msgid "%d subscription request" -#~ msgid_plural "%d subscription requests" -#~ msgstr[0] "सदस्यता अनुरोध" -#~ msgstr[1] "सदस्यता अनुरोध" - -#, fuzzy -#~ msgid "%d file transfer request" -#~ msgid_plural "%d file transfer requests" -#~ msgstr[0] "फाइल स्थान्तरण अनुरोध" -#~ msgstr[1] "फाइल स्थान्तरण अनुरोध" - -#, fuzzy -#~ msgid "%d server message" -#~ msgid_plural "%d server messages" -#~ msgstr[0] "सन्देश पठाउन सकिएन !" -#~ msgstr[1] "सन्देश पठाउन सकिएन !" - -#, fuzzy -#~ msgid "%d error" -#~ msgid_plural "%d errors" -#~ msgstr[0] "त्रुटि" -#~ msgstr[1] "त्रुटि" - -#~ msgid "If you quit, you will lose all unread information." -#~ msgstr "यदि तपाईँ निस्कनु भएमा, तपाईँले नपढेको सूचना हराउनु हुँनेछ।" - -#, fuzzy -#~ msgid "Edit Account _Details" -#~ msgstr "तपाईँको कुराकानी कोठाको विवरण सम्पादन गर्नुहोस्:" - -#~ msgid "Word" -#~ msgstr "शब्द" - -#~ msgid "New message from %s" -#~ msgstr "%s बाट नयाँ सन्देश" - -#~ msgid "Your invitation has been declined" -#~ msgstr "तपाईँको निमन्त्रण अविस्कार गरिएको छ" - -#~ msgid "Accept" -#~ msgstr "स्विकार गर्नुहोस्" - -#~ msgid "Decline" -#~ msgstr "अस्विकार गर्नुहोस्" - -#, fuzzy -#~ msgid "Name" -#~ msgstr "नाम:" - -#, fuzzy -#~ msgid "Room" -#~ msgstr "कोठा" - -#, fuzzy -#~ msgid "Auto Connect" -#~ msgstr "जडान रोक्नुहोस्" - -#, fuzzy -#~ msgid "Information requested..." -#~ msgstr "जानकारी अनुरोध गरिएको छ, कृपया प्रतीक्षा गर्नुहोस्..." - -#~ msgid "Do you want to remove this contact from your roster?" -#~ msgstr "के तपाईँ तपाईँको सम्पर्क रोस्टरबाट सम्पर्क हटाउन चाहनुहुन्छ ?" - -#~ msgid "" -#~ "Please enter a new name for the group:\n" -#~ "%s" -#~ msgstr "" -#~ "कृपया समूहका लागि नयाँ नाम प्रविष्ट गर्नुहोस्:\n" -#~ "%s" - -#~ msgid "Select" -#~ msgstr "चयन गर्नुहोस्" - -#~ msgid "Unsorted" -#~ msgstr "क्रमबद्ध नगरिएको" - -#~ msgid "New file transfer request from %s" -#~ msgstr "%s बाट नयाँ फाइल स्थान्तरण अनुरोध" - -#~ msgid "File transfer is not supported by both parties." -#~ msgstr "दुबै पक्षहरूबाट फाइल स्थान्तरण समर्थन गरिएन।" - -#~ msgid "Your file transfer offer declined." -#~ msgstr "तपाईँको फाइल स्थान्तरण अनुरोध अस्विकार भयो।" - -#~ msgid "The other user decided not to continue." -#~ msgstr "अर्को प्रयोगकर्ताले निरन्तरता नदिने निर्णय गर्यो।" - -#~ msgid "Unknown error occurred during file transfer." -#~ msgstr "फाइल स्थान्तरण गर्दा अज्ञात त्रुटि भयो।" - -#~ msgid "%s would like to send you a file." -#~ msgstr "%s के तपाईँले तपाईँलाई एउटा फाइल पठाउन चाहनुहुन्छ।" - -#~ msgid "Someone would like to send you a file." -#~ msgstr "कसैले तपाईँलाई एउटा फाइल पठाउन चाहन्छ।" - -#~ msgid "Select a file" -#~ msgstr "एउटा फाइल चयन गर्नुहोस्" - -#, fuzzy -#~ msgid "Connecting..." -#~ msgstr "जडान गर्दै" - -#, fuzzy -#~ msgid "Retry connection" -#~ msgstr "जडान रोक्नुहोस्" - -#~ msgid "Invited %s to join this chat conference." -#~ msgstr "यो कुराकानी सम्मेलनमा भाग लिन %s निमन्त्रणा गरियो।" - -#, fuzzy -#~ msgid "%s has set the topic: %s" -#~ msgstr "%s ले शीर्षक सेट गर्यो" - -#, fuzzy -#~ msgid "Enter the new topic you want to set for this room:" -#~ msgstr "यो सम्पर्कका लागि तपाईँ के उपनाम प्रयोग गर्न चाहनुहुन्छ ?" - -#, fuzzy -#~ msgid "%s has joined the room" -#~ msgstr "%s ले शीर्षक सेट गर्यो" - -#, fuzzy -#~ msgid "%s has left the room" -#~ msgstr "%s ले शीर्षक सेट गर्यो" - -#, fuzzy -#~ msgid "Topic: %s" -#~ msgstr "विषय:" - -#~ msgid "Account" -#~ msgstr "खाता" - -#~ msgid "Conversation With" -#~ msgstr "सँग सम्मेलन" - -#~ msgid "Date" -#~ msgstr "मिति" - -#~ msgid "List the available accounts" -#~ msgstr "उपलब्ध खाताहरू सूचीबद्ध गर्नुहोस्" - -#~ msgid "Which account to connect to on startup" -#~ msgstr "सुरुवात हुँदा कुन खातामा जडान गर्ने" - -#~ msgid "ACCOUNT-NAME" -#~ msgstr "खाता-नाम" - -#~ msgid "You can not use --no-connect together with --account" -#~ msgstr "तपाईँले --no-connect संग--accountसँगै प्रयोग गर्न सक्नुहुन्न" - -#~ msgid "No accounts available." -#~ msgstr "खाताहरू उपलब्ध छैन।" - -#~ msgid "Available accounts:" -#~ msgstr "उपलब्ध खाताहरू:" - -#~ msgid "[default]" -#~ msgstr "[पूर्वनिर्धारित]" - -#~ msgid "There is no account with the name '%s'." -#~ msgstr "'%s'.नामको कुनै खाता छैन" - -#~ msgid "Join" -#~ msgstr "जोड्नुहोस्" - -#, fuzzy -#~ msgid "Create" -#~ msgstr "मिति" - -#~ msgid "Chat Rooms" -#~ msgstr "कुराकानी कोठा" - -#, fuzzy -#~ msgid "Browsing for conference rooms, please wait..." -#~ msgstr "जानकारी अनुरोध गरिएको छ, कृपया प्रतीक्षा गर्नुहोस्..." - -#~ msgid "Default" -#~ msgstr "[पूर्वनिर्धारित]" - -#~ msgid "Chat!" -#~ msgstr "कुराकानी!" - -#~ msgid "%s wants to be added to your contact list." -#~ msgstr "तपाईँको सम्पर्क सूचीमा %s ले थपिन चाहन्छ।" - -#~ msgid "Someone wants to be added to your contact list." -#~ msgstr "कसैले तपाईँको सम्पर्क सूचीमा थपिन चाहन्छ।" - -#, fuzzy -#~ msgid "Subscription request" -#~ msgstr "सदस्यता अनुरोध" - -#~ msgid "Contact Information" -#~ msgstr "सम्पर्क जानकारी" - -#~ msgid "Subject: %s" -#~ msgstr "विषय: %s" - -#~ msgid "Suggestions for the word" -#~ msgstr "शब्दका लागि सुझावहरू" - -#~ msgid "New subscription request from %s" -#~ msgstr "%s बाट नयाँ सदस्यता अनुरोध" - -#~ msgid "Do you want to add this person to your contact list?" -#~ msgstr "के तपाईँले सो मान्छेलाई तपाईँको सम्पर्क सूचीमा थप गर्न चाहनुहुन्छ ?" - -#~ msgid "Do you want to add %s to your contact list?" -#~ msgstr "के तपाईँले तपाईँको सम्पर्क सूचीमा %sथप्न चाहनुहुन्छ?" - -#~ msgid "Please enter your %s account password" -#~ msgstr "कृपया तपाईँको %s खाता पासवर्ड प्रविष्ट गर्नुहोस्" - -#, fuzzy -#~ msgid "Logging in to account '%s'" -#~ msgstr "सँग लगइन गर्दै: %s" - -#~ msgid "Remember Password?" -#~ msgstr "पासवर्ड सम्झनुहोस् ?" - -#~ msgid "Could not display the help contents." -#~ msgstr "मद्दत सामग्री प्रदर्शन गर्न सकेन।" - -#~ msgid "The server does not seem to be responding." -#~ msgstr "सर्भरले प्रतिक्रिया जनाउने जस्तो देखिदैन।" - -#~ msgid "Try again later." -#~ msgstr "पछि पुन: प्रयास गर्नुहोस्।" - -#, fuzzy -#~ msgid "Change" -#~ msgstr "कुराकानी" - -#~ msgid "Contact goes offline" -#~ msgstr "सम्पर्क अफलाइन हुँदैछ" - -#~ msgid "Contact goes online" -#~ msgstr "सम्पर्क अनलाइन भयो" - -#~ msgid "Contact ID:" -#~ msgstr "सम्पर्क ID:" - -#~ msgid "Do you want to accept this file?" -#~ msgstr "के तपाईँ सो फाइल स्विकार गर्न चाहनुहुन्छ ?" - -#~ msgid "File Transfer Request" -#~ msgstr "फाइल स्थान्तरण अनुरोध" - -#~ msgid "File name:" -#~ msgstr "फाइल नाम:" +msgid "%s has left the room" +msgstr "%s ले कोठा छोड्यो" -#~ msgid "File size:" -#~ msgstr "फाइल साइज:" - -#, fuzzy -#~ msgid "Not supported yet" -#~ msgstr "अझसम्म समर्थन गरिएको छैन।" - -#~ msgid "This person wishes to send you this file:" -#~ msgstr "यो मान्छेले तपाईँलाई सो फाइल पठाउन चाहन्छ:" - -#~ msgid "Web site:" -#~ msgstr "वेब साइट:" - -#~ msgid "_Accept" -#~ msgstr "स्विकार गर्नुहोस्" - -#~ msgid "_Deny" -#~ msgstr "अस्वीकार गर्नुहोस्" - -#, fuzzy -#~ msgid "<b>Topic:</b>" -#~ msgstr "<b>विकल्पहरू</b>" - -#~ msgid "Account:" -#~ msgstr "खाता:" - -#, fuzzy -#~ msgid "Edit Favorite Room" -#~ msgstr "कुराकानी कोठा सम्पादन गर्नुहोस्" - -#~ msgid "Group Chat" -#~ msgstr "समूह कुराकानी" - -#, fuzzy -#~ msgid "Join New" -#~ msgstr "जोड्नुहोस्" - -#~ msgid "Join room on start_up" -#~ msgstr "सुरुवातमा कोठा जोड्नुहोस्" - -#, fuzzy -#~ msgid "Join this chat room when Gossip starts and you are connected" -#~ msgstr "गोसिव सुरु भएर तपाईँ जडानमा रहनुभएको बेलामा कुराकानी कोठा जोड्नुहोस्।" - -#~ msgid "N_ame:" -#~ msgstr "नाम:" - -#~ msgid "S_erver:" -#~ msgstr "सर्भर:" - -#~ msgid "_Nickname:" -#~ msgstr "उपनाम:" - -#~ msgid "_Room:" -#~ msgstr "कोठा:" - -#~ msgid "-" -#~ msgstr "-" - -#~ msgid "<b>About</b>" -#~ msgstr "<b>बारेमा</b>" - -#~ msgid "<b>Client Information</b>" -#~ msgstr "<b>ग्राहक जानकारी</b>" - -#, fuzzy -#~ msgid "<b>Groups</b>" -#~ msgstr "<b>बारेमा</b>" - -#, fuzzy -#~ msgid "<b>Name</b>" -#~ msgstr "<b>भाषाहरू</b>" - -#~ msgid "<b>Personal Details</b>" -#~ msgstr "<b>व्यक्तिगत विवरण</b>" - -#~ msgid "<b>Status</b>" -#~ msgstr "<b>वस्तुस्थिती</b>" - -#, fuzzy -#~ msgid "<b>Subscription</b>" -#~ msgstr "<b>विकल्पहरू</b>" - -#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>" -#~ msgstr "<span size=\"smaller\">उदाहरण: Mikael or user@server.org</span>" - -#, fuzzy -#~ msgid "Accou_nt:" -#~ msgstr "खाता:" - -#~ msgid "Add Contact" -#~ msgstr "सम्पर्क थप्नुहोस्" - -#, fuzzy -#~ msgid "Alia_s:" -#~ msgstr "उपनाम:" - -#~ msgid "Ch_at" -#~ msgstr "कुराकानी" - -#~ msgid "Client:" -#~ msgstr "ग्राहक:" - -#, fuzzy -#~ msgid "Con_tact:" -#~ msgstr "सम्पर्क" - -#~ msgid "Connect on S_tartup" -#~ msgstr "सुरुवातमा जडान गर्नुहोस्" - -#~ msgid "Contacts" -#~ msgstr "सम्पर्क" - -#~ msgid "Country:" -#~ msgstr "देश:" - -#~ msgid "Decide _Later" -#~ msgstr "पछि निर्णय गर्नुहोस्" - -#, fuzzy -#~ msgid "Edit Contact" -#~ msgstr "सम्पर्क थप्नुहोस्" - -#~ msgid "Edit Groups" -#~ msgstr "समूहहरू सम्पादन गर्नुहोस्" - -#~ msgid "Email:" -#~ msgstr "इमेल:" - -#~ msgid "ID:" -#~ msgstr "आइ डि:" - -#~ msgid "" -#~ "If you chose to decide later you will be asked the next time you log on." -#~ msgstr "" -#~ "यदि तपाईँले पछि छनौट निर्णय गर्नु भएमा तपाईँले पछिल्लो समय लगइन गर्दा तपाईँलाई " -#~ "सोधिने छ।" - -#~ msgid "Name:" -#~ msgstr "नाम:" - -#~ msgid "OS:" -#~ msgstr "ओ एस:" - -#~ msgid "Personal Details" -#~ msgstr "व्यक्तिगत विवरण" - -#, fuzzy -#~ msgid "R_egister" -#~ msgstr "दर्ता" - -#~ msgid "Search" -#~ msgstr "खोजी गर्नुहोस्" - -#~ msgid "Spell Checker" -#~ msgstr "हिज्जे परिक्षक" - -#~ msgid "Subscription Request" -#~ msgstr "सदस्यता अनुरोध" - -#~ msgid "Suggestions for the word:" -#~ msgstr "शब्दका लागि सुझावहरू:" - -#, fuzzy -#~ msgid "" -#~ "This acts as a filter to the contact list below. You can use segments of " -#~ "contact's name or ID, for example, \"jabber.org\" will list everyone " -#~ "using that server" -#~ msgstr "" -#~ "सम्पर्क सूची तलमा एउटा फिल्टरको रूपमा यसले कार्य गर्दछ। तपाईँले सम्पर्कको नाम वा " -#~ "आइडिको खण्ड प्रयोग गर्न सक्नुहुन्छ, उदाहरणका लागि, \"jabber.org\" ले त्यो सर्भर " -#~ "प्रयोग गर्ने जो कसैको पनि सूचीकृत गर्दछ।" - -#, fuzzy -#~ msgid "This is the name that will be used on your roster for this contact" -#~ msgstr "यो सम्पर्कका लागि तपाईँको रोस्टरमा यो नाम प्रयोग हुँनेछ।" - -#, fuzzy -#~ msgid "This name will be used to identify you in chat windows" -#~ msgstr "कुराकानि सञ्झ्यालहरूमा तपाईँलाई परिचित गर्न यो नाम प्रयोग गरिनेछ" - -#, fuzzy -#~ msgid "" -#~ "This name will be used to identify you when new contacts lookup your " -#~ "details" -#~ msgstr "" -#~ "तपाईँको विवरण नयाँ सम्पर्कले हेरेको बेलामा तपाईँलाई परिचित गर्न यो नाम प्रयोग गरिनेछ" - -#~ msgid "Use system pro_xy" -#~ msgstr "प्रोक्सि प्रणाली प्रयोग गर्नुहोस्" - -#~ msgid "Version:" -#~ msgstr "संस्करण:" - -#~ msgid "View Previous Conversations" -#~ msgstr "अघिल्लो वार्तालाप हेर्नुहोस्" - -#~ msgid "Which account do you want to use?" -#~ msgstr "तपाईँ कुन खाता प्रयोग गर्न चाहनुहुन्छ ?" - -#~ msgid "You are not subscribed to this contact." -#~ msgstr "तपाईँलाई सो खातामा सदस्यता दिइएको छैन।" - -#~ msgid "_Connect" -#~ msgstr "जडान" +#: ../libempathy-gtk/empathy-group-chat.c:449 +#, c-format +msgid "Topic: %s" +msgstr "विषय: %s" -#, fuzzy -#~ msgid "_Description:" -#~ msgstr "वर्णन:" +#: ../libempathy-gtk/empathy-group-chat.c:570 +#, c-format +msgid "Topic set to: %s" +msgstr "सेट गर्नुपर्ने विषय: %s" -#~ msgid "_Disconnect" -#~ msgstr "जडान विच्छेद गर्नुहोस्" +#: ../libempathy-gtk/empathy-group-chat.c:572 +msgid "No topic defined" +msgstr "कुनै विषय परिभाषित गरिएको छैन" -#, fuzzy -#~ msgid "_Email:" -#~ msgstr "इमेल:" +#: ../libempathy-gtk/empathy-group-chat.glade.h:1 +msgid "<b>Topic:</b>" +msgstr "<b>विषय:</b>" -#, fuzzy -#~ msgid "" -#~ "_Enter the name or contact ID of the person you want to chat to below:" -#~ msgstr "" -#~ "तपाईँले कुराकानी गर्न चाहनुभएको मानिसको सम्पर्क नाम वा ID तल प्रविष्ट गर्नुहोस्:" +#: ../libempathy-gtk/empathy-group-chat.glade.h:2 +msgid "Group Chat" +msgstr "समूह कुराकानी" -#, fuzzy -#~ msgid "_For:" -#~ msgstr "पोर्ट:" +#: ../libempathy-gtk/empathy-log-window.c:497 +msgid "Account" +msgstr "खाता" -#, fuzzy -#~ msgid "_Full Name:" -#~ msgstr "नाम:" +#: ../libempathy-gtk/empathy-log-window.c:504 +msgid "Conversation" +msgstr "वार्तालाप" -#, fuzzy -#~ msgid "_Group:" -#~ msgstr "समूह:" +#: ../libempathy-gtk/empathy-log-window.c:514 +msgid "Date" +msgstr "मिति" -#, fuzzy -#~ msgid "_Nick Name:" -#~ msgstr "उपनाम:" +#: ../libempathy-gtk/empathy-log-window.glade.h:1 +msgid "Conversations" +msgstr "वार्तालाप" -#, fuzzy -#~ msgid "_Password:" -#~ msgstr "पासवर्ड:" +#: ../libempathy-gtk/empathy-log-window.glade.h:2 +msgid "Search" +msgstr "खोजी गर्नुहोस्" -#, fuzzy -#~ msgid "_Quit Message:" -#~ msgstr "नयाँ सन्देश" +#: ../libempathy-gtk/empathy-log-window.glade.h:3 +msgid "View Previous Conversations" +msgstr "अघिल्लो वार्तालाप हेर्नुहोस्" -#~ msgid "_Subscribe" -#~ msgstr "सदस्य बनाऊनुहोस्" +#: ../libempathy-gtk/empathy-log-window.glade.h:4 +msgid "_For:" +msgstr "लागि:" -#, fuzzy -#~ msgid "_Web site:" -#~ msgstr "वेब साइट:" +#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286 +msgid "Chat Rooms" +msgstr "कुराकानी कोठा" -#~ msgid "Be silent when away" -#~ msgstr "टाढा हुँदा शान्त हुनुहोस्" +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2 +msgid "Browse:" +msgstr "ब्राउज:" -#~ msgid "Be silent when busy" -#~ msgstr "व्यस्त हुंदा शान्त हुनुहोस्" +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3 +msgid "Enter the room name to join here or click on one or more rooms in the list." +msgstr "यहाँ जडान गर्न कोठा नाम प्रविष्ट गर्नुहोस् वा सूचीमा एक वा धेरै कोठामा क्लिक गर्नुहोस् ।" -#~ msgid "Height of main window" -#~ msgstr "मुख्य सञ्झ्यालको उचाइ" +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4 +msgid "" +"Enter the server which hosts the room, or leave it empty if the room is on " +"the current account's server" +msgstr "कोठा होस्ट गर्ने सर्भर प्रविष्ट गर्नुहोस्, वा यदि कोठा हालको खाताको सर्भरमा छ भने यसलाई खाली छोड्नुहोस्" -#~ msgid "Preset status messages" -#~ msgstr "स्थिति सन्देश पुर्वनिश्चित गर्नुहोस्" +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5 +msgid "Join" +msgstr "जडान गर्नुहोस्" -#~ msgid "Preset status messages." -#~ msgstr "स्थिति सन्देश पुर्वनिश्चित गर्नुहोस्" +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6 +msgid "Join New" +msgstr "नयाँ जडान गर्नुहोस्" -#~ msgid "The X position of the main window." -#~ msgstr "मुख्य सञ्झ्यालको एक्स स्थिति" +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7 +msgid "Re_fresh" +msgstr "ताजा पार्नुहोस्" -#~ msgid "The Y position of the main window." -#~ msgstr "मुख्य सञ्झ्यालको वाइ स्थिति" +#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8 +msgid "This list represents all chat rooms hosted on the server you have entered." +msgstr "यो सूचीले तपाईँले प्रविष्ट गर्नुभएको सर्भरमा होस्ट भएका सबै कुराकानी कोठालाई प्रतिनिधित्व गर्दछ ।" -#~ msgid "The width of the main window." -#~ msgstr "मुख्य सञ्झ्यालको चौडाइ" +#: ../libempathy-gtk/empathy-main-window.c:278 +msgid "Show and edit accounts" +msgstr "खाताहरू देखाउनुहोस् र सम्पादन गर्नुहोस्" -#~ msgid "Whether spell checking should be turned on." -#~ msgstr "अक्षर हुँदैनखुल्ला राख्नु पर्दछ कि" +#: ../libempathy-gtk/empathy-main-window.c:634 +msgid "Contact" +msgstr "सम्पर्क" -#~ msgid "Width of the main window" -#~ msgstr "मुख्य सञ्झ्यालको चौडाइ" +#: ../libempathy-gtk/empathy-main-window.glade.h:1 +msgid "Contact list" +msgstr "सम्पर्क सूची" -#~ msgid "X position of main window" -#~ msgstr "मुख्य सञ्झ्यालको एक्स स्थिति " +#: ../libempathy-gtk/empathy-main-window.glade.h:2 +msgid "Context" +msgstr "सामग्री" -#~ msgid "Y position of main window" -#~ msgstr "मुख्य सञ्झ्यालको वाइ स्थिति" +#: ../libempathy-gtk/empathy-main-window.glade.h:3 +msgid "Join _Favorites" +msgstr "मनपर्ने जडान गर्नुहोस्" -#~ msgid "Perhaps you are trying to connect to the wrong port?" -#~ msgstr "सम्भवत तपाईँले गलत पोर्टमा जडान प्रयास गर्दै हुनुहुन्छ ?" +#: ../libempathy-gtk/empathy-main-window.glade.h:5 +msgid "Manage Favorites..." +msgstr "मनपर्ने प्रबन्ध गर्नुहोस्..." -#~ msgid "Perhaps the service is not currently running?" -#~ msgstr "सम्भवत सेवा हालमा चलिरहेको छैन ?" +#: ../libempathy-gtk/empathy-main-window.glade.h:6 +msgid "Show _Offline Contacts" +msgstr "अफलाइन सम्पर्कहरू देखाउनुहोस्" -#~ msgid "Check your connection details." -#~ msgstr "तपाईँको जडान विवरण जाँच गर्नुहोस्।" +#: ../libempathy-gtk/empathy-main-window.glade.h:7 +#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1 +#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1 +msgid "_About" +msgstr "बारेमा" -#~ msgid "Perhaps the server is not running this service." -#~ msgstr "सम्भवत सर्भर यस सेवामा चलिरहेको छैन।" +#: ../libempathy-gtk/empathy-main-window.glade.h:8 +msgid "_Accounts" +msgstr "खाताहरू" -#~ msgid "Check your username and password are correct." -#~ msgstr "तपाईँको प्रयोगकर्ता नाम र पासवर्ड ठीक छ भनि जाँच गर्नुहोस्।" +#: ../libempathy-gtk/empathy-main-window.glade.h:11 +msgid "_Contents" +msgstr "सामग्रीहरू" -#~ msgid "%s will be added to your contact list." -#~ msgstr "%s तपाईँको सम्पर्क सूचीमा थपिनेछ" +#: ../libempathy-gtk/empathy-main-window.glade.h:13 +msgid "_Help" +msgstr "मद्दत" -#~ msgid "%s ID of new contact:" -#~ msgstr "नयाँ सम्पर्कको %s ID:" +#: ../libempathy-gtk/empathy-main-window.glade.h:14 +#: ../libempathy-gtk/empathy-status-icon.glade.h:2 +msgid "_New Message..." +msgstr "नयाँ सन्देश..." -#~ msgid "Example: %s" -#~ msgstr "उदाहरण: %s" +#: ../libempathy-gtk/empathy-main-window.glade.h:15 +msgid "_Personal Information" +msgstr "व्यक्तिगत जानकारी" -#~ msgid "Gossip, Instant Messaging Client" -#~ msgstr "गसिप, तुरुन्त सन्देश गर्ने ग्राहक" +#: ../libempathy-gtk/empathy-main-window.glade.h:16 +#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3 +msgid "_Preferences" +msgstr "प्राथमिकताहरु" -#~ msgid "You have no Instant Messaging accounts configured!" -#~ msgstr "तपाईँसँग तत्काल सन्देशगर्ने खाता कन्फिगर गरेको हुनुपर्दछ !" +#: ../libempathy-gtk/empathy-main-window.glade.h:17 +#: ../libempathy-gtk/empathy-status-icon.glade.h:3 +msgid "_Quit" +msgstr "अन्त्य गर्नुहोस्" -#~ msgid "" -#~ "Next you will be presented with the Account Information dialog to set " -#~ "your details up." -#~ msgstr "पछि तपाईँले तपाईँको विवरण सेट गर्न खाता सूचना संवादसँग प्रस्तुति गर्नु हुँनेछ।" +#: ../libempathy-gtk/empathy-preferences.c:243 +msgid "Language" +msgstr "भाषा" -#~ msgid "" -#~ "Please enter your invitation message to:\n" -#~ "%s" -#~ msgstr "" -#~ "यसका लागि कृपया तपाईँको निमन्त्रण सन्देश प्रविष्ट गर्नुहोस्:\n" -#~ "%s" +#: ../libempathy-gtk/empathy-preferences.glade.h:1 +msgid "<b>Appearance</b>" +msgstr "<b>देखावट</b>" -#~ msgid "Contact Information for %s" -#~ msgstr "%s का लागि सम्पर्क सूचना" +#: ../libempathy-gtk/empathy-preferences.glade.h:2 +msgid "<b>Audio</b>" +msgstr "<b>अडियो</b>" -#~ msgid "Requested Information" -#~ msgstr "खाता सूचना" +#: ../libempathy-gtk/empathy-preferences.glade.h:3 +msgid "<b>Behaviour</b>" +msgstr "<b>व्यवहार</b>" -#~ msgid "/Contact Infor_mation" -#~ msgstr "/सम्पर्क जानकारी" +#: ../libempathy-gtk/empathy-preferences.glade.h:4 +msgid "<b>Contact List</b>" +msgstr "<b>सम्पर्क सूची</b>" -#~ msgid "/Re_name Contact" -#~ msgstr "/सम्पर्क पुन: नामकरण गर्नुहोस्" +#: ../libempathy-gtk/empathy-preferences.glade.h:5 +msgid "<b>Enable spell checking for languages:</b>" +msgstr "<b>भाषाहरूका लागि हिज्जे जाँच सक्षम पार्नुहोस्:</b>" -#~ msgid "/_Edit Groups" -#~ msgstr "/समूहहरू सम्पादन गर्नुहोस्" +#: ../libempathy-gtk/empathy-preferences.glade.h:6 +msgid "<b>Options</b>" +msgstr "<b>विकल्प</b>" -#~ msgid "/_View Previous Conversations" -#~ msgstr "/पहिलो वार्तालाप हेर्नुहोस्" +#: ../libempathy-gtk/empathy-preferences.glade.h:7 +msgid "<b>Visual</b>" +msgstr "<b>दृश्यात्मक</b>" -#~ msgid "" -#~ "Please enter a new nickname for the contact\n" -#~ "%s" -#~ msgstr "" -#~ "कृपया सम्पर्कका लागि नयाँ उपनाम प्रविष्ट गर्नुहोस्\n" -#~ "%s" +#: ../libempathy-gtk/empathy-preferences.glade.h:8 +msgid "" +"<small>The list of languages reflects only the languages for which you have " +"a dictionary installed.</small>" +msgstr "<small>भाषाको सूचीले तपाईँले शब्दकोशमा स्थापना गर्नुभएको भाषाहरू मात्र परावर्तन गर्दछ ।</small>" -#~ msgid "Edit groups for %s" -#~ msgstr "%s का लागि समूहहरू सम्पादन गर्नुहोस्" +#: ../libempathy-gtk/empathy-preferences.glade.h:9 +msgid "Avatars are user chosen images shown in the contact list" +msgstr "अवतारहरू सम्पर्क सूचीमा देखाइएको प्रयोगकर्ताले छानेको छविहरू हुन्" -#~ msgid "Conversation Log" -#~ msgstr "सम्मेलन लग" +#: ../libempathy-gtk/empathy-preferences.glade.h:10 +msgid "Chat Th_eme:" +msgstr "कुराकानी विषयवस्तु:" -#~ msgid "Registering account" -#~ msgstr "खाता दर्ता गर्दै" +#: ../libempathy-gtk/empathy-preferences.glade.h:11 +msgid "Display notifications when contacts come _online" +msgstr "सम्पर्कहरू अनलाइन आउँदा सूचनाहरू प्रदर्शन गर्नुहोस्" -#~ msgid "Respond" -#~ msgstr "प्रतिक्रिया" +#: ../libempathy-gtk/empathy-preferences.glade.h:12 +msgid "Enable sounds when _away" +msgstr "टाढा हुँदा ध्वनि सक्षम पार्नुहोस्" -#~ msgid "Available..." -#~ msgstr "उपलब्ध..." +#: ../libempathy-gtk/empathy-preferences.glade.h:13 +msgid "Enable sounds when _busy" +msgstr "व्यस्त हुँदा ध्वनि सक्षम पार्नुहोस्" -#~ msgid "Busy..." -#~ msgstr "व्यस्त..." +#: ../libempathy-gtk/empathy-preferences.glade.h:14 +msgid "General" +msgstr "सामान्य" -#~ msgid "Away..." -#~ msgstr "टाढा..." +#: ../libempathy-gtk/empathy-preferences.glade.h:15 +msgid "Notifications" +msgstr "सूचना" -#~ msgid "" -#~ "Customize your own nickname, the server and chatroom which you wish to " -#~ "join." -#~ msgstr "तपाईँले जोड्न चाहनुभएको आफ्नो उपनाम, सर्भर र कुराकानी कोठा अनुकूलन गर्नुहोस्।" +#: ../libempathy-gtk/empathy-preferences.glade.h:16 +msgid "Preferences" +msgstr "प्राथमिकताहरू" -#~ msgid "Na_me:" -#~ msgstr "नाम:" +#: ../libempathy-gtk/empathy-preferences.glade.h:17 +msgid "Show _avatars" +msgstr "अवतार देखाउनुहोस्" -#~ msgid "New Chat Room" -#~ msgstr "नयाँ कुराकानी कोठा" +#: ../libempathy-gtk/empathy-preferences.glade.h:18 +msgid "Show _smileys as images" +msgstr "छविको रूपमा स्माइलीहरू देखाउनुहोस्" -#~ msgid "" -#~ "Pick a saved chat room from the presets available below and click Join to " -#~ "start chatting." -#~ msgstr "" -#~ "तलबाट हालमा उपलब्धबाट एउटा बचत गरिएको कुराकानी कोठा लिनुहोस् र कुराकानी सुरु गर्न " -#~ "जोड्नु क्लिक गर्नुहोस्।" +#: ../libempathy-gtk/empathy-preferences.glade.h:19 +msgid "Show co_mpact contact list" +msgstr "सङ्कुचन सम्पर्क सूची देखाउनुहोस्" -#~ msgid " " -#~ msgstr " " +#: ../libempathy-gtk/empathy-preferences.glade.h:20 +msgid "Sort by _name" +msgstr "नाम अनुसार क्रमबद्ध गर्नुहोस्" -#~ msgid "<b>Information requested, please wait...</b>" -#~ msgstr "<b>जानकारी अनुरोध गरिएको छ, कृपया प्रतीक्षा गर्नुहोस्...</b>" +#: ../libempathy-gtk/empathy-preferences.glade.h:21 +msgid "Sort by s_tate" +msgstr "स्थिति अनुसार क्रमबद्ध गर्नुहोस्" -#~ msgid "<b>Sound</b>" -#~ msgstr "<b>आवाज</b>" +#: ../libempathy-gtk/empathy-preferences.glade.h:22 +msgid "Spell Checking" +msgstr "हिज्जे जाँच" -#~ msgid "<span size=\"smaller\">Example:</span>" -#~ msgstr "<span size=\"smaller\">उदाहरण:</span>" +#: ../libempathy-gtk/empathy-preferences.glade.h:23 +msgid "Themes" +msgstr "विषयवस्तु" -#~ msgid "Account Name" -#~ msgstr "खाता नाम" +#: ../libempathy-gtk/empathy-preferences.glade.h:24 +msgid "_Open new chats in separate windows" +msgstr "नयाँ कुराकानी छुट्टै सञ्झ्यालहरूमा खोल्नुहोस्" -#~ msgid "Check spelling while I _type" -#~ msgstr " I टाइप गर्दा हिज्जे जाँच गर्नुहोस्" +#: ../libempathy-gtk/empathy-preferences.glade.h:25 +msgid "_Play sound when messages arrive" +msgstr "सन्देशहरू आउँदा ध्वनि प्ले गर्नुहोस्" -#~ msgid "Connection Details" -#~ msgstr "जडान विवरण" +#: ../libempathy-gtk/empathy-preferences.glade.h:26 +msgid "_Use for chat rooms" +msgstr "कुराकानीका लागि प्रयोग गर्नुहोस्" -#~ msgid "Do you already have an account set up on a server?" -#~ msgstr "के तपाईँले पहिल्यै सर्भरमा एउटा खाता सेटअप गर्नुभएको छ ?" +#. Custom messages +#: ../libempathy-gtk/empathy-presence-chooser.c:690 +msgid "Custom messages..." +msgstr "अनुकूल सन्देशहरू..." -#~ msgid "Enter the port used in the connection for this account." -#~ msgstr "यो खाताका लागि जडानमा प्रयोग गरिएको पोर्ट प्रविष्ट गर्नुहोस्।" +#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1 +msgid "Custom message" +msgstr "अनुकूल सन्देश" -#~ msgid "Enter the server used in the connection for this account." -#~ msgstr "यो खाताका लागि जडानमा प्रयोग गरिएको सर्भर प्रविष्ट गर्नुहोस्।" +#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2 +msgid "Message:" +msgstr "सन्देश:" -#~ msgid "Enter the user's contact ID:" -#~ msgstr "प्रयोगकर्ताको सम्पर्क ID प्रविष्ट गर्नुहोस्:" +#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3 +msgid "Save message" +msgstr "सन्देश बचत गर्नुहोस्" -#~ msgid "Enter your real name here." -#~ msgstr "तपाईँको वास्तविक नाम यहाँ प्रविष्ट गर्नुहोस्।" +#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4 +msgid "Status:" +msgstr "वस्तुस्थिति:" -#~ msgid "Finished" -#~ msgstr "समाप्त" +#: ../libempathy-gtk/empathy-private-chat.c:188 +#, c-format +msgid "%s went offline" +msgstr "%s अफलाइन भयो" -#~ msgid "For increased security, enable this option." -#~ msgstr "सुरक्षा बढाउनका लागि, यो विकल्प सक्षम पार्नुहोस्।" +#: ../libempathy-gtk/empathy-private-chat.c:202 +#, c-format +msgid "%s has come online" +msgstr "%s अनलाइन भयो" -#~ msgid "Gossip" -#~ msgstr "गसिप" +#: ../libempathy-gtk/empathy-spell-dialog.c:85 +msgid "Word" +msgstr "शब्द" -#~ msgid "" -#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n" -#~ "\n" -#~ "This assistant will help you configure Gossip and connect you to your " -#~ "favorite Jabber server.\n" -#~ "\n" -#~ "To get started, just click \"Forward\"." -#~ msgstr "" -#~ "ज्याबर तयारि सन्देश प्रणालीका लागि गसिप एउटा आधुनिक ग्राहक हो।\n" -#~ "\n" -#~ "यो सहायकले तपाईँलाई गसिप कन्फिगर गर्न र तपाईँलाई तपाईँको मन पर्ने ज्याबर सेवामा " -#~ "जडान गर्न मद्दत गर्दछ।\n" -#~ "\n" -#~ "सुरु हुन, \"अघिल्तिर\"क्लिक गर्नुहोस्।" +#: ../libempathy-gtk/empathy-spell-dialog.c:258 +msgid "Suggestions for the word" +msgstr "शब्दका लागि सुझावहरू" -#~ msgid "" -#~ "If you have another machine on your network which 'proxies' the " -#~ "connection to the internet and you want to use it, enable this option." -#~ msgstr "" -#~ "यदि तपाईँसँग तपाईँको सञ्जालमा इन्टरनेटमा जडान 'प्रोक्सि' गर्ने अर्को मेशिन छ भने र " -#~ "तपाईँले यो प्रयोग गर्न चाहनुहुन्छ भने, यो विकल्प सक्षम पार्नुहोस्।" +#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1 +msgid "Spell Checker" +msgstr "हिज्जे परीक्षक" -#~ msgid "" -#~ "If you need to set specific connection details, like a different server " -#~ "or port, you can configure that here:" -#~ msgstr "" -#~ "यदि तपाईँले निर्दिष्ट जडान विवरण सेट गर्न आवश्यक परेमा, फरक सर्भरको जस्तो वा पोर्ट, " -#~ "तपाईँले त्यो यहाँ कन्फिगर गर्न सक्नुहुन्छ:" - -#~ msgid "" -#~ "In order to subscribe to presence notifications from the user, a request " -#~ "will be sent. Until this request is approved, the user will always be " -#~ "shown as \"Offline\" in your contact list." -#~ msgstr "" -#~ "प्रयोगकर्ताबाट उपस्थिति सूचीतताको सदस्य बन्नका लागि, एउटा अनुरोध पठाइनेछ। यो " -#~ "अनुरोध स्विकार नहुँदासम्म तपाईँको सम्पर्क सूचीमा प्रयोगकर्तालाई सधै \"अफलाइन\"को रूपमा " -#~ "देखाइने छ।" - -#~ msgid "In which group do you want to place this contact?" -#~ msgstr "तपाईँले यो सम्पर्कलाई कुन समूहमा राख्न चाहनुहुन्छ ?" +#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2 +msgid "Suggestions for the word:" +msgstr "शब्दका लागि सुझावहरू:" -#~ msgid "Jabber ID:" -#~ msgstr "ज्याबर आइडि:" +#: ../libempathy-gtk/empathy-status-icon.c:311 +#, c-format +msgid "" +"New message from %s:\n" +"%s" +msgstr "" +"%s बाट नयाँ सन्देश:\n" +"%s" -#~ msgid "Join _Group Chat..." -#~ msgstr "समूह कुराकानि जोड्नुहोस्..." +#: ../libempathy-gtk/empathy-status-icon.c:572 +#, c-format +msgid "Subscription requested by %s" +msgstr "%s द्वारा अनुरोध गरिएको सदस्यता" -#~ msgid "Nickname:" -#~ msgstr "उपनाम:" +#: ../libempathy-gtk/empathy-status-icon.c:575 +#, c-format +msgid "" +"\n" +"Message: %s" +msgstr "" +"\n" +"सन्देश: %s" -#~ msgid "Port:" -#~ msgstr "पोर्ट:" +#: ../libempathy-gtk/empathy-status-icon.glade.h:1 +msgid "Status" +msgstr "वस्तुस्थिति" -#~ msgid "Press Subscribe to request to receive their status." -#~ msgstr "तिनिहरूको अवस्था प्राप्त गर्न सदस्यता थिच्नुहोस्।" +#: ../libempathy-gtk/empathy-status-icon.glade.h:4 +msgid "_Show Contact List" +msgstr "सम्पर्क सूची देखाउनुहोस्" -#~ msgid "Registering Account" -#~ msgstr "खाता दर्ता गर्दैछ" +#: ../libempathy-gtk/empathy-theme-manager.c:87 +msgid "Classic" +msgstr "पुरानो" -#~ msgid "Requested information." -#~ msgstr "अनुरोधित जानकारी" +#: ../libempathy-gtk/empathy-theme-manager.c:88 +msgid "Simple" +msgstr "साधरण" -#~ msgid "Requesting contact information, please wait..." -#~ msgstr "व्यक्तिगत विवरण अनुरोध गर्दै, कृपया प्रतीक्षा गर्नुहोस्..." +#: ../libempathy-gtk/empathy-theme-manager.c:89 +msgid "Clean" +msgstr "खाली गर्नुहोस्" -#~ msgid "Resource:" -#~ msgstr "संसाधन:" +#: ../libempathy-gtk/empathy-theme-manager.c:90 +msgid "Blue" +msgstr "नीलो" -#~ msgid "Sending request" -#~ msgstr "अनुरोध पठाउँदै" - -#~ msgid "Server:" -#~ msgstr "सर्भर:" - -#~ msgid "Web Site:" -#~ msgstr "वेब साइट:" - -#~ msgid "Welcome to Gossip" -#~ msgstr "गसिपमा स्वागत छ" - -#~ msgid "What instant messaging system does the contact use?" -#~ msgstr "सम्पर्कले के तयारि सन्देश प्रणाली प्रयोग गर्दछ ?" - -#~ msgid "What is your name?" -#~ msgstr "तपाईँको नाम के हो ?" - -#~ msgid "" -#~ "What name do you want to use to identify this account?\n" -#~ "\n" -#~ "This name could be something associated with the service provider, for " -#~ "example, <b>Google</b>." -#~ msgstr "" -#~ "तपाईँले सो खाता परिचित गर्न कुन नाम चाहनुहुन्छ ?\n" -#~ "\n" -#~ "यो नाम तपाईँको सर्भर प्रदायकसँग सम्बन्धित हुन सक्दछ, उदाहरणका लागि, <b>गुगल</b>" - -#~ msgid "What password do you want to use?" -#~ msgstr "तपाईँ कुन पासवर्ड प्रयोग गर्न चाहनुहुन्छ ?" - -#~ msgid "What username do you use?" -#~ msgstr "तपाईँ कुन प्रयोगकर्ता नाम प्रयोग गर्नुहुन्छ ?" - -#~ msgid "What username do you want to use?" -#~ msgstr "तपाईँ कुन प्रयोगकर्ता नाम प्रयोग गर्न चाहनुहुन्छ ?" - -#~ msgid "Which account do you want to add this contact to?" -#~ msgstr "तपाईँले यो सम्पर्कलाई कुन खाता थप्न चाहनुहुन्छ ?" - -#~ msgid "" -#~ "You can change your account settings later by selecting the Edit-" -#~ ">Accounts menu item." -#~ msgstr "" -#~ "तपाईँले सम्पादन-> खाताको मेनु वस्तु चयन गरेर तपाईँको खाता सेटिङ परिवर्तन गर्न सक्नुहुन्छ।" +#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1 +msgid "The contact to display in the applet. Empty means no contact is displayed." +msgstr "एप्लेटमा प्रदर्शन गर्न सम्पर्क । खालीको अर्थ कुनै सम्पर्क प्रदर्शन भएको छैन ।" -#~ msgid "" -#~ "You can leave this blank if you don't want your password stored on a " -#~ "public machine. If you decide to do this, you will be prompted each time " -#~ "you connect for a password." -#~ msgstr "" -#~ "यदि तपाईँले सार्वजनिक मेशिनमा तपाईँको पासवर्ड सङ्ग्रह गर्न चाहानु हुन्न भने तपाईँले " -#~ "यसलाई खाली छोड्न सक्नुहुन्छ। यदि तपाईँले त्यस्तो गर्ने निर्णय गर्न भयो भने, तपाईँलाई हरेक " -#~ "पटक पासवर्डका लागि जडान गर्दा प्रोप्ट गरिनेछ।" +#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2 +msgid "The contact's avatar token. Empty means contact has no avatar." +msgstr "सम्पर्कको अवतार टोकन । खालीको अर्थ सम्पर्कसँग अवतार छैन ।" -#~ msgid "" -#~ "You need to set a name for the connection, for example, <b>Home</b> or " -#~ "<b>Laptop</b>." -#~ msgstr "" -#~ "तपाईँले जडानका लागि एउटा नाम सेट गर्न आवश्यक छ, उदाहरणका लागि, <b>गृह</b> वा " -#~ "<b>ल्याबटप</b>" +#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1 +msgid "Megaphone" +msgstr "मेगाफोन" -#~ msgid "Your Account" -#~ msgstr "तपाईँको खाता" +#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2 +#: ../megaphone/src/megaphone-applet.c:419 +msgid "Talk!" +msgstr "कुराकानी!" -#~ msgid "Your Identity" -#~ msgstr "तपाईँको पहिचान" +#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2 +msgid "_Information" +msgstr "जानकारी" -#~ msgid "Your new account has now been set up." -#~ msgstr "तपाईँको नयाँ खाता अहिले सेटअप गरिएको छ।" +#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1 +msgid "Presence" +msgstr "उपस्थिति" -#~ msgid "_Forget" -#~ msgstr "बिसर्नु" +#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2 +#: ../nothere/src/nothere-applet.c:89 +msgid "Set your own presence" +msgstr "तपाईँको आफ्नो उपस्थिति सेट गर्नुहोस्" -#~ msgid "_No" -#~ msgstr "होइन" +#: ../src/empathy.c:271 +msgid "Don't connect on startup" +msgstr "सुरुआतमा जडान नगर्नुहोस्" -#~ msgid "_Search..." -#~ msgstr "खोजी गर्नुहोस्" +#: ../src/empathy.c:282 +msgid "- Empathy Instant Messenger" +msgstr "इम्प्याथी शीघ्र मेसेन्जर" -#~ msgid "_Yes" -#~ msgstr "हो" diff --git a/python/README b/python/README index 29bb89d02..9cae95c1f 100644 --- a/python/README +++ b/python/README @@ -5,19 +5,7 @@ To update python binding: $ python /usr/share/pygtk/2.0/codegen/h2def.py libempathy-gtk/*.h > python/pyempathygtk/pyempathygtk.defs 2) -Manually modify pyempathy.defs, ContactList is not an object but an interface: -(define-interface ContactList - (in-module "Empathy") - (c-name "EmpathyContactList") - (gtype-id "EMPATHY_TYPE_CONTACT_LIST") -) - -ContactManager, TpChatroom and TpContactList implements ContactList interface: - (implements "EmpathyContactList") - -That can be done by applying pyempathy.patch - -remove all ephy stuff +Apply pyempathy.patch and pyempathygtk.patch 3) Manually update headers in pyempathy.override and pyempathygtk.override. diff --git a/python/pyempathy/pyempathy.defs b/python/pyempathy/pyempathy.defs index 116248f70..8d8f7c7ea 100644 --- a/python/pyempathy/pyempathy.defs +++ b/python/pyempathy/pyempathy.defs @@ -158,9 +158,10 @@ (c-name "EmpathyTpCallStatus") (gtype-id "EMPATHY_TYPE_TP_CALL_STATUS") (values - '("preparing" "EMPATHY_TP_CALL_STATUS_PREPARING") - '("ringing" "EMPATHY_TP_CALL_STATUS_RINGING") - '("running" "EMPATHY_TP_CALL_STATUS_RUNNING") + '("readying" "EMPATHY_TP_CALL_STATUS_READYING") + '("pending" "EMPATHY_TP_CALL_STATUS_PENDING") + '("accepted" "EMPATHY_TP_CALL_STATUS_ACCEPTED") + '("closed" "EMPATHY_TP_CALL_STATUS_CLOSED") ) ) @@ -1333,87 +1334,54 @@ (is-constructor-of "EmpathyTpCall") (return-type "EmpathyTpCall*") (parameters - '("McAccount*" "account") - '("TpChan*" "tp_chan") + '("TpConn*" "connection") + '("TpChan*" "channel") ) ) -(define-method is_incoming - (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_is_incoming") - (return-type "gboolean") -) - -(define-method get_status +(define-method accept_incoming_call (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_get_status") - (return-type "EmpathyTpCallStatus") -) - -(define-method get_contact - (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_get_contact") - (return-type "EmpathyContact*") -) - -(define-method accept - (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_accept") - (return-type "none") -) - -(define-method invite - (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_invite") + (c-name "empathy_tp_call_accept_incoming_call") (return-type "none") - (parameters - '("EmpathyContact*" "contact") - ) ) -(define-method request_streams +(define-method close_channel (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_request_streams") + (c-name "empathy_tp_call_close_channel") (return-type "none") - (parameters - '("gboolean" "audio") - '("gboolean" "video") - ) ) -(define-method send_video +(define-method request_video_stream_direction (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_send_video") + (c-name "empathy_tp_call_request_video_stream_direction") (return-type "none") (parameters - '("gboolean" "send") + '("gboolean" "is_sending") ) ) -(define-method add_preview_window - (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_add_preview_window") +(define-function empathy_tp_call_add_preview_video + (c-name "empathy_tp_call_add_preview_video") (return-type "none") (parameters - '("guint" "socket_id") + '("guint" "preview_video_socket_id") ) ) -(define-method remove_preview_window - (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_remove_preview_window") +(define-function empathy_tp_call_remove_preview_video + (c-name "empathy_tp_call_remove_preview_video") (return-type "none") (parameters - '("guint" "socket_id") + '("guint" "preview_video_socket_id") ) ) -(define-method set_output_window +(define-method add_output_video (of-object "EmpathyTpCall") - (c-name "empathy_tp_call_set_output_window") + (c-name "empathy_tp_call_add_output_video") (return-type "none") (parameters - '("guint" "socket_id") + '("guint" "output_video_socket_id") ) ) diff --git a/python/pyempathy/pyempathy.override b/python/pyempathy/pyempathy.override index 7425972ea..7a7e6820d 100644 --- a/python/pyempathy/pyempathy.override +++ b/python/pyempathy/pyempathy.override @@ -17,6 +17,7 @@ headers #include "empathy-message.h" #include "empathy-status-presets.h" #include "empathy-time.h" +#include "empathy-tp-call.h" #include "empathy-tp-chat.h" #include "empathy-tp-chatroom.h" #include "empathy-tp-contact-factory.h" diff --git a/python/pyempathygtk/pyempathygtk.defs b/python/pyempathygtk/pyempathygtk.defs index 8b7929e3d..0d5a3e5ca 100644 --- a/python/pyempathygtk/pyempathygtk.defs +++ b/python/pyempathygtk/pyempathygtk.defs @@ -443,8 +443,9 @@ ;; From empathy-call-window.h -(define-function empathy_call_window_show - (c-name "empathy_call_window_show") +(define-function empathy_call_window_new + (c-name "empathy_call_window_new") + (is-constructor-of "EmpathyCallWindow") (return-type "GtkWidget*") (parameters '("EmpathyTpCall*" "call") diff --git a/python/pyempathygtk/pyempathygtk.override b/python/pyempathygtk/pyempathygtk.override index f806b62f8..4967fa689 100644 --- a/python/pyempathygtk/pyempathygtk.override +++ b/python/pyempathygtk/pyempathygtk.override @@ -62,7 +62,7 @@ import gtk.StatusIcon as PyGtkStatusIcon_Type import gtk.Button as PyGtkButton_Type import gtk.EventBox as PyGtkEventBox_Type import gtk.CellRendererPixbuf as PyGtkCellRendererPixbuf_Type -import gdk.Pixbuf as PyGdkPixbuf_Type +import gtk.gdk.Pixbuf as PyGdkPixbuf_Type import empathy.Contact as PyEmpathyContact_Type import empathy.ContactList as PyEmpathyContactList_Type import empathy.TpChat as PyEmpathyTpChat_Type diff --git a/src/empathy-call-chandler.c b/src/empathy-call-chandler.c index be9de1175..e1568c18c 100644 --- a/src/empathy-call-chandler.c +++ b/src/empathy-call-chandler.c @@ -18,95 +18,70 @@ * Authors: Elliot Fairweather <elliot.fairweather@collabora.co.uk> */ -#include <config.h> - -#include <stdlib.h> - -#include <glib.h> -#include <glib/gi18n.h> #include <gtk/gtk.h> -#include <libgnomevfs/gnome-vfs.h> - #include <libmissioncontrol/mission-control.h> -#include <libempathy/empathy-chandler.h> -#include <libempathy/empathy-utils.h> #include <libempathy/empathy-tp-call.h> +#include <libempathy/empathy-chandler.h> #include <libempathy/empathy-debug.h> +#include <libempathy/empathy-utils.h> #include <libempathy-gtk/empathy-call-window.h> -#define DEBUG_DOMAIN "EmpathyCall" - -#define BUS_NAME "org.gnome.Empathy.CallChandler" -#define OBJECT_PATH "/org/gnome/Empathy/CallChandler" +#define DEBUG_DOMAIN "CallChandler" static guint nb_calls = 0; static void -call_chandler_weak_notify (gpointer data, - GObject *where_the_object_was) +weak_notify (gpointer data, + GObject *where_the_object_was) { - nb_calls--; - if (nb_calls == 0) { - empathy_debug (DEBUG_DOMAIN, "No more calls, leaving..."); - gtk_main_quit (); - } + nb_calls--; + if (nb_calls == 0) + { + empathy_debug (DEBUG_DOMAIN, "No more calls, leaving..."); + gtk_main_quit (); + } } static void -call_chandler_new_channel_cb (EmpathyChandler *chandler, - TpConn *tp_conn, - TpChan *tp_chan, - MissionControl *mc) +new_channel_cb (EmpathyChandler *chandler, + TpConn *connection, + TpChan *channel, + MissionControl *mc) { - EmpathyTpCall *call; - McAccount *account; - GtkWidget *window; - - account = mission_control_get_account_for_connection (mc, tp_conn, NULL); + EmpathyTpCall *call; - call = empathy_tp_call_new (account, tp_chan); - window = empathy_call_window_show (call); - g_object_unref (account); - g_object_unref (call); + call = empathy_tp_call_new (connection, channel); + empathy_call_window_new (call); + g_object_unref (call); - nb_calls++; - g_object_weak_ref (G_OBJECT (window), call_chandler_weak_notify, NULL); + nb_calls++; + g_object_weak_ref (G_OBJECT (call), weak_notify, NULL); } int main (int argc, char *argv[]) { - EmpathyChandler *chandler; - MissionControl *mc; + MissionControl *mc; + EmpathyChandler *chandler; - empathy_debug_set_log_file_from_env (); + gtk_init (&argc, &argv); - bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - textdomain (GETTEXT_PACKAGE); + mc = empathy_mission_control_new (); - gtk_init (&argc, &argv); + chandler = empathy_chandler_new ("org.gnome.Empathy.CallChandler", + "/org/gnome/Empathy/CallChandler"); + g_signal_connect (chandler, "new-channel", + G_CALLBACK (new_channel_cb), mc); - gtk_window_set_default_icon_name ("empathy"); - gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), - PKGDATADIR G_DIR_SEPARATOR_S "icons"); + empathy_debug (DEBUG_DOMAIN, "Ready to handle new streamed media channels"); - mc = empathy_mission_control_new (); - chandler = empathy_chandler_new (BUS_NAME, OBJECT_PATH); - g_signal_connect (chandler, "new-channel", - G_CALLBACK (call_chandler_new_channel_cb), - mc); + gtk_main (); - empathy_debug (DEBUG_DOMAIN, "Ready to handle new streamed media channels"); + g_object_unref (chandler); + g_object_unref (mc); - gtk_main (); - - g_object_unref (chandler); - g_object_unref (mc); - - return EXIT_SUCCESS; + return EXIT_SUCCESS; } - diff --git a/src/empathy.c b/src/empathy.c index 5f76ecc0b..fb7b5cd31 100644 --- a/src/empathy.c +++ b/src/empathy.c @@ -94,7 +94,7 @@ create_salut_account (void) { McProfile *profile; McProtocol *protocol; - gboolean salut_created; + gboolean salut_created = FALSE; McAccount *account; GList *accounts; EBook *book; @@ -106,11 +106,9 @@ create_salut_account (void) gchar *jid = NULL; /* Check if we already created a salut account */ - if (!empathy_conf_get_bool (empathy_conf_get(), - EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, - &salut_created)) { - return; - } + empathy_conf_get_bool (empathy_conf_get(), + EMPATHY_PREFS_SALUT_ACCOUNT_CREATED, + &salut_created); if (salut_created) { return; } |