1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-27 01:57:52 +00:00
transmission/gtk/notify.c
Jordan Lee 879a2afcbd Update the copyright year in the source code comments.
The Berne Convention says that the copyright year is moot, so instead of adding another year to each file as in previous years, I've removed the year altogether from the source code comments in libtransmission, gtk, qt, utils, daemon, and cli.

Juliusz's copyright notice in tr-dht and Johannes' copyright notice in tr-lpd have been left alone; it didn't seem appropriate to modify them.
2011-01-19 13:48:47 +00:00

175 lines
4.6 KiB
C

/*
* This file Copyright (C) Mnemosyne LLC
*
* This file is licensed by the GPL version 2. Works owned by the
* Transmission project are granted a special exemption to clause 2(b)
* so that the bulk of its code can remain under the MIT license.
* This exemption does not extend to derived works not owned by
* the Transmission project.
*
* $Id$
*/
#include <string.h>
#ifdef HAVE_LIBCANBERRA
#include <canberra-gtk.h>
#endif
#ifdef HAVE_GIO
#include <gio/gio.h>
#endif
#include <glib/gi18n.h>
#include "actions.h" /* NOTIFICATION_ICON */
#include "conf.h"
#include "notify.h"
#include "tr-prefs.h"
#include "util.h"
#ifndef HAVE_LIBNOTIFY
void gtr_notify_init( void ) { }
void gtr_notify_send( TrTorrent * tor UNUSED ) { }
void gtr_notify_added( const char * name UNUSED ) { }
#else
#include <libnotify/notify.h>
void
gtr_notify_init( void )
{
notify_init( "Transmission" );
}
static void
notifyCallback( NotifyNotification * n UNUSED,
const char * action,
gpointer gdata )
{
TrTorrent * gtor = TR_TORRENT( gdata );
if( !strcmp( action, "folder" ) )
{
tr_torrent_open_folder( gtor );
}
else if( !strcmp( action, "file" ) )
{
tr_torrent * tor = tr_torrent_handle( gtor );
const tr_info * info = tr_torrent_info( gtor );
if( tor && info )
{
const char * dir = tr_torrentGetDownloadDir( tor );
char * path = g_build_filename( dir, info->files[0].name, NULL );
gtr_open_file( path );
g_free( path );
}
}
}
static gboolean
can_support_actions( void )
{
static gboolean supported;
static gboolean have_checked = FALSE;
if( !have_checked )
{
GList * c;
GList * caps = notify_get_server_caps( );
have_checked = TRUE;
for( c=caps; c && !supported; c=c->next )
supported = !strcmp( "actions", (char*)c->data );
g_list_foreach( caps, (GFunc)g_free, NULL );
g_list_free( caps );
}
return supported;
}
static void
addIcon( NotifyNotification * notify )
{
int size = 32;
GtkIconTheme * theme;
GdkPixbuf * icon;
gtk_icon_size_lookup( GTK_ICON_SIZE_DIALOG, &size, &size );
theme = gtk_icon_theme_get_default( );
icon = gtk_icon_theme_load_icon( theme, NOTIFICATION_ICON, size, 0, NULL );
if( icon != NULL )
{
notify_notification_set_icon_from_pixbuf( notify, icon );
g_object_unref( icon );
}
}
void
gtr_notify_send( TrTorrent *tor )
{
#ifdef HAVE_LIBCANBERRA
if( gtr_pref_flag_get( PREF_KEY_PLAY_DOWNLOAD_COMPLETE_SOUND ) )
{
/* play the sound, using sounds from the naming spec */
ca_context_play( ca_gtk_context_get (), 0,
CA_PROP_EVENT_ID, "complete-download",
CA_PROP_APPLICATION_NAME, g_get_application_name,
CA_PROP_EVENT_DESCRIPTION, _("Download complete"),
NULL);
}
#endif
if( gtr_pref_flag_get( PREF_KEY_SHOW_DESKTOP_NOTIFICATION ) )
{
const tr_info * info = tr_torrent_info( tor );
NotifyNotification * n;
n = notify_notification_new( _( "Torrent Complete" ),
info->name, NULL
/* the fourth argument was removed in libnotify 0.7.0 */
#if !defined(NOTIFY_VERSION_MINOR) || (NOTIFY_VERSION_MAJOR == 0 && NOTIFY_VERSION_MINOR < 7)
, NULL
#endif
);
addIcon( n );
if( can_support_actions( ) )
{
if( info->fileCount == 1 )
notify_notification_add_action(
n, "file", _( "Open File" ),
NOTIFY_ACTION_CALLBACK( notifyCallback ), tor,
NULL );
notify_notification_add_action(
n, "folder", _( "Open Folder" ),
NOTIFY_ACTION_CALLBACK( notifyCallback ), tor, NULL );
}
notify_notification_show( n, NULL );
}
}
void
gtr_notify_added( const char * name )
{
if( gtr_pref_flag_get( PREF_KEY_SHOW_DESKTOP_NOTIFICATION ) )
{
NotifyNotification * n = notify_notification_new(
_( "Torrent Added" ), name, NULL
/* the fourth argument was removed in libnotify 0.7.0 */
#if !defined(NOTIFY_VERSION_MINOR) || (NOTIFY_VERSION_MAJOR == 0 && NOTIFY_VERSION_MINOR < 7)
, NULL
#endif
);
addIcon( n );
notify_notification_set_timeout( n, NOTIFY_EXPIRES_DEFAULT );
notify_notification_show( n, NULL );
}
}
#endif