comparison libpurple/sound.c @ 15373:5fe8042783c1

Rename gtk/ and libgaim/ to pidgin/ and libpurple/
author Sean Egan <seanegan@gmail.com>
date Sat, 20 Jan 2007 02:32:10 +0000
parents
children 32c366eeeb99
comparison
equal deleted inserted replaced
15372:f79e0f4df793 15373:5fe8042783c1
1 /*
2 * gaim
3 *
4 * Gaim is the legal property of its developers, whose names are too numerous
5 * to list here. Please refer to the COPYRIGHT file distributed with this
6 * source distribution.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 *
22 */
23 #include "internal.h"
24
25 #include "blist.h"
26 #include "prefs.h"
27 #include "sound.h"
28
29 static GaimSoundUiOps *sound_ui_ops = NULL;
30
31 #define STATUS_AVAILABLE 1
32 #define STATUS_AWAY 2
33
34 static gboolean
35 gaim_sound_play_required(const GaimAccount *account)
36 {
37 gint pref_status = gaim_prefs_get_int("/core/sound/while_status");
38
39 if (pref_status == 3)
40 {
41 /* Play sounds: Always */
42 return TRUE;
43 }
44
45 if (account != NULL)
46 {
47 GaimStatus *status = gaim_account_get_active_status(account);
48
49 if (gaim_status_is_online(status))
50 {
51 gboolean available = gaim_status_is_available(status);
52 return (( available && pref_status == STATUS_AVAILABLE) ||
53 (!available && pref_status == STATUS_AWAY));
54 }
55 }
56
57 /* We get here a couple of ways. Either the request has been OK'ed
58 * by gaim_sound_play_event() and we're here because the UI has
59 * called gaim_sound_play_file(), or we're here for something
60 * not related to an account (like testing a sound). */
61 return TRUE;
62 }
63
64 void
65 gaim_sound_play_file(const char *filename, const GaimAccount *account)
66 {
67 if (!gaim_sound_play_required(account))
68 return;
69
70 if(sound_ui_ops && sound_ui_ops->play_file)
71 sound_ui_ops->play_file(filename);
72 }
73
74 void
75 gaim_sound_play_event(GaimSoundEventID event, const GaimAccount *account)
76 {
77 if (!gaim_sound_play_required(account))
78 return;
79
80 if(sound_ui_ops && sound_ui_ops->play_event) {
81 int plugin_return;
82
83 plugin_return = GPOINTER_TO_INT(gaim_signal_emit_return_1(
84 gaim_sounds_get_handle(), "playing-sound-event",
85 event, account));
86
87 if (plugin_return)
88 return;
89 else
90 sound_ui_ops->play_event(event);
91 }
92 }
93
94 void
95 gaim_sound_set_ui_ops(GaimSoundUiOps *ops)
96 {
97 if(sound_ui_ops && sound_ui_ops->uninit)
98 sound_ui_ops->uninit();
99
100 sound_ui_ops = ops;
101
102 if(sound_ui_ops && sound_ui_ops->init)
103 sound_ui_ops->init();
104 }
105
106 GaimSoundUiOps *
107 gaim_sound_get_ui_ops(void)
108 {
109 return sound_ui_ops;
110 }
111
112 void
113 gaim_sound_init()
114 {
115 void *handle = gaim_sounds_get_handle();
116
117 /**********************************************************************
118 * Register signals
119 **********************************************************************/
120
121 gaim_signal_register(handle, "playing-sound-event",
122 gaim_marshal_BOOLEAN__INT_POINTER,
123 gaim_value_new(GAIM_TYPE_BOOLEAN), 2,
124 gaim_value_new(GAIM_TYPE_INT),
125 gaim_value_new(GAIM_TYPE_SUBTYPE,
126 GAIM_SUBTYPE_ACCOUNT));
127
128 gaim_prefs_add_none("/core/sound");
129 gaim_prefs_add_int("/core/sound/while_status", STATUS_AVAILABLE);
130 }
131
132 void
133 gaim_sound_uninit()
134 {
135 if(sound_ui_ops && sound_ui_ops->uninit)
136 sound_ui_ops->uninit();
137
138 gaim_signals_unregister_by_instance(gaim_sounds_get_handle());
139 }
140
141 void *
142 gaim_sounds_get_handle()
143 {
144 static int handle;
145
146 return &handle;
147 }