[xpcom] Fix compilation warnings from debug messages
[browser-dbus-bridge.git] / xpcom-dbusservice / DBusSignal.cpp
1 /**
2  * Browser D-Bus Bridge, XPCOM version
3  *
4  * Copyright © 2008 Movial Creative Technologies Inc
5  *  Contact: Movial Creative Technologies Inc, <info@movial.com>
6  *  Authors: Lauri Mylläri, <lauri.myllari@movial.com>
7  *           Kalle Vahlman, <kalle.vahlman@movial.com>
8  *
9  * The contents of this file are subject to the Mozilla Public License
10  * Version 1.1 (the "License"); you may not use this file except in
11  * compliance with the License. You may obtain a copy of the License at
12  * http://www.mozilla.org/MPL/
13  *
14  * Software distributed under the License is distributed on an "AS IS"
15  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
16  * License for the specific language governing rights and limitations
17  * under the License.
18  *
19  * The Original Code is the Browser D-Bus Bridge, XPCOM version.
20  *
21  * The Initial Developer of the Original Code is Movial Creative Technologies
22  * Inc. Portions created by Initial Developer are Copyright (C) 2008
23  * Movial Creative Technologies Inc. All Rights Reserved.
24  *
25  */
26
27 #include <stdio.h>
28
29 #include "IDBusService.h"
30
31 #include "DBusSignal.h"
32
33 #include "bdb-debug.h"
34
35
36 //
37 // DBusSignal implementation
38 //
39
40 NS_IMPL_ISUPPORTS2(DBusSignal, IDBusSignal, nsISupportsWeakReference)
41
42 DBusSignal::DBusSignal(DBusService *aDBusService,
43                        PRUint32 aBusType,
44                        const nsACString& aInterface,
45                        const nsACString& aSignal,
46                        const nsACString& aSender,
47                        const nsACString& aObject,
48                        JSContext *cx) :
49     mDBusService(aDBusService),
50     mBusType(aBusType),
51     mInterface(aInterface),
52     mSignal(aSignal),
53     mSender(aSender),
54     mObject(aObject),
55     mCallback(0),
56     mEnabled(PR_FALSE),
57     mFilterActive(PR_FALSE),
58     mJScx(cx)
59 {
60     BDBLOG(("DBusSignal::DBusSignal()\n"));
61     BDBLOG(("  mBusType   : %d\n", mBusType));
62     BDBLOG(("  aInterface : %s\n", PromiseFlatCString(aInterface).get()));
63     BDBLOG(("  aSignal    : %s\n", PromiseFlatCString(aSignal).get()));
64     BDBLOG(("  aSender    : %s\n", PromiseFlatCString(aSender).get()));
65     BDBLOG(("  aObject    : %s\n", PromiseFlatCString(aObject).get()));
66     BDBLOG(("  mEnabled   : %d\n", mEnabled));
67 }
68
69 DBusSignal::~DBusSignal()
70 {
71     BDBLOG(("DBusSignal::~DBusSignal()\n"));
72     if (mFilterActive)
73         filterDisable();
74     if (mCallback)
75         NS_RELEASE(mCallback);
76 }
77
78 NS_IMETHODIMP
79 DBusSignal::GetOnEmit(IDBusSignalObserver **aCallback)
80 {
81     BDBLOG(("DBusSignal::GetOnEmit()\n"));
82     NS_IF_ADDREF(*aCallback = mCallback);
83     return NS_OK;
84 }
85
86 NS_IMETHODIMP
87 DBusSignal::SetOnEmit(IDBusSignalObserver *aCallback)
88 {
89     BDBLOG(("DBusSignal::SetOnEmit(%08x)\n", (unsigned int)aCallback));
90     if (mCallback)
91     {
92         if (mFilterActive)
93             filterDisable();
94         NS_RELEASE(mCallback);
95     }
96     mCallback = aCallback;
97     NS_IF_ADDREF(mCallback);
98     if (mEnabled && mCallback)
99         filterEnable();
100     return NS_OK;
101 }
102
103 NS_IMETHODIMP
104 DBusSignal::GetEnabled(PRBool *aEnabled)
105 {
106     BDBLOG(("DBusSignal::GetEnabled()\n"));
107     *aEnabled = mEnabled;
108     return NS_OK;
109 }
110
111 NS_IMETHODIMP
112 DBusSignal::SetEnabled(PRBool aEnabled)
113 {
114     BDBLOG(("DBusSignal::SetEnabled(%s)\n", aEnabled ? "PR_TRUE" : "PR_FALSE"));
115
116     if (aEnabled && !mCallback)
117     {
118         BDBLOG(("  ERROR: trying to enable with no onEmit set!\n"));
119         return NS_ERROR_NOT_AVAILABLE;
120     }
121
122     /* change filter state if necessary */
123     if (mFilterActive && !aEnabled)
124         filterDisable();
125     if (!mFilterActive && aEnabled && mCallback)
126         filterEnable();
127
128     mEnabled = aEnabled;
129
130     return NS_OK;
131 }
132
133 NS_IMETHODIMP
134 DBusSignal::GetBusType(PRUint32 *aBusType)
135 {
136     *aBusType = mBusType;
137     return NS_OK;
138 }
139
140 NS_IMETHODIMP
141 DBusSignal::GetInterfaceName(nsACString& aInterface)
142 {
143     aInterface.Assign(mInterface);
144     return NS_OK;
145 }
146
147 NS_IMETHODIMP
148 DBusSignal::GetSignalName(nsACString& aSignal)
149 {
150     aSignal.Assign(mSignal);
151     return NS_OK;
152 }
153
154 NS_IMETHODIMP
155 DBusSignal::GetSender(nsACString& aSender)
156 {
157     aSender.Assign(mSender);
158     return NS_OK;
159 }
160
161 NS_IMETHODIMP
162 DBusSignal::GetObjectPath(nsACString& aObject)
163 {
164     aObject.Assign(mObject);
165     return NS_OK;
166 }
167
168 NS_IMETHODIMP
169 DBusSignal::GetJSContext(JSContext **aJSContext)
170 {
171     *aJSContext = mJScx;
172     return NS_OK;
173 }
174
175 void
176 DBusSignal::filterEnable()
177 {
178     BDBLOG(("DBusSignal::filterEnable()\n"));
179     mFilterActive = PR_TRUE;
180
181     mDBusService->AddSignalObserver(this);
182 }
183
184 void
185 DBusSignal::filterDisable()
186 {
187     BDBLOG(("DBusSignal::filterDisable()\n"));
188     mFilterActive = PR_FALSE;
189     
190     mDBusService->RemoveSignalObserver(this);
191 }
192
193 /* vim: set cindent ts=4 et sw=4: */