14192
|
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 void
|
|
32 gaim_sound_play_file(const char *filename, const GaimAccount *account)
|
|
33 {
|
|
34 GaimStatus *status;
|
|
35
|
|
36 if ((account != NULL) && (!gaim_prefs_get_bool("/core/sound/while_away")))
|
|
37 {
|
|
38 status = gaim_account_get_active_status(account);
|
|
39 if (gaim_status_is_online(status) && !gaim_status_is_available(status))
|
|
40 return;
|
|
41 }
|
|
42
|
|
43 if(sound_ui_ops && sound_ui_ops->play_file)
|
|
44 sound_ui_ops->play_file(filename);
|
|
45 }
|
|
46
|
|
47 void
|
|
48 gaim_sound_play_event(GaimSoundEventID event, const GaimAccount *account)
|
|
49 {
|
|
50 GaimStatus *status;
|
|
51
|
|
52 if ((account != NULL) &&
|
|
53 (!gaim_prefs_get_bool("/core/sound/while_away")))
|
|
54 {
|
|
55 status = gaim_account_get_active_status(account);
|
|
56 if (gaim_status_is_online(status) &&
|
|
57 !gaim_status_is_available(status))
|
|
58 return;
|
|
59 }
|
|
60
|
|
61 if(sound_ui_ops && sound_ui_ops->play_event) {
|
|
62 int plugin_return;
|
|
63
|
|
64 plugin_return = GPOINTER_TO_INT(gaim_signal_emit_return_1(
|
|
65 gaim_sounds_get_handle(), "playing-sound-event",
|
|
66 event, account));
|
|
67
|
|
68 if (plugin_return)
|
|
69 return;
|
|
70 else
|
|
71 sound_ui_ops->play_event(event);
|
|
72 }
|
|
73 }
|
|
74
|
|
75 void
|
|
76 gaim_sound_set_ui_ops(GaimSoundUiOps *ops)
|
|
77 {
|
|
78 if(sound_ui_ops && sound_ui_ops->uninit)
|
|
79 sound_ui_ops->uninit();
|
|
80
|
|
81 sound_ui_ops = ops;
|
|
82
|
|
83 if(sound_ui_ops && sound_ui_ops->init)
|
|
84 sound_ui_ops->init();
|
|
85 }
|
|
86
|
|
87 GaimSoundUiOps *
|
|
88 gaim_sound_get_ui_ops(void)
|
|
89 {
|
|
90 return sound_ui_ops;
|
|
91 }
|
|
92
|
|
93 void
|
|
94 gaim_sound_init()
|
|
95 {
|
|
96 void *handle = gaim_sounds_get_handle();
|
|
97
|
|
98 /**********************************************************************
|
|
99 * Register signals
|
|
100 **********************************************************************/
|
|
101
|
|
102 gaim_signal_register(handle, "playing-sound-event",
|
|
103 gaim_marshal_BOOLEAN__INT_POINTER,
|
|
104 gaim_value_new(GAIM_TYPE_BOOLEAN), 2,
|
|
105 gaim_value_new(GAIM_TYPE_INT),
|
|
106 gaim_value_new(GAIM_TYPE_POINTER));
|
|
107
|
|
108 gaim_prefs_add_none("/core/sound");
|
|
109 gaim_prefs_add_bool("/core/sound/while_away", FALSE);
|
|
110
|
|
111 }
|
|
112
|
|
113 void
|
|
114 gaim_sound_uninit()
|
|
115 {
|
|
116 if(sound_ui_ops && sound_ui_ops->uninit)
|
|
117 sound_ui_ops->uninit();
|
|
118
|
|
119 gaim_signals_unregister_by_instance(gaim_sounds_get_handle());
|
|
120 }
|
|
121
|
|
122 void *
|
|
123 gaim_sounds_get_handle()
|
|
124 {
|
|
125 static int handle;
|
|
126
|
|
127 return &handle;
|
|
128 }
|