ekiga r6978 - in trunk: lib/engine/components/avahi-publisher lib/engine/presence/skel src/endpoints



Author: jpuydt
Date: Sun Sep 14 18:01:03 2008
New Revision: 6978
URL: http://svn.gnome.org/viewvc/ekiga?rev=6978&view=rev

Log:
Fixed #550275

Modified:
   trunk/lib/engine/components/avahi-publisher/avahi-publisher-main.cpp
   trunk/lib/engine/components/avahi-publisher/avahi-publisher.h
   trunk/lib/engine/presence/skel/presence-core.cpp
   trunk/lib/engine/presence/skel/presence-core.h
   trunk/src/endpoints/opal-main.cpp

Modified: trunk/lib/engine/components/avahi-publisher/avahi-publisher-main.cpp
==============================================================================
--- trunk/lib/engine/components/avahi-publisher/avahi-publisher-main.cpp	(original)
+++ trunk/lib/engine/components/avahi-publisher/avahi-publisher-main.cpp	Sun Sep 14 18:01:03 2008
@@ -40,6 +40,34 @@
 
 #include <iostream>
 
+class Service: public Ekiga::Service
+{
+public:
+
+  Service (Ekiga::PresenceCore& core_,
+	   Avahi::PresencePublisher* publisher_):
+    core(core_), publisher(publisher_)
+  {
+    core.add_presence_publisher (*publisher);
+  }
+
+  ~Service ()
+  {
+    core.remove_presence_publisher (*publisher);
+    delete publisher;
+  }
+
+  const std::string get_name () const
+  { return "avahi-presence-publisher"; }
+
+  const std::string get_description () const
+  { return "\tObject bringing in Avahi presence publishing"; }
+
+private:
+  Ekiga::PresenceCore& core;
+  Avahi::PresencePublisher* publisher;
+};
+
 bool
 avahi_publisher_init (Ekiga::ServiceCore &core,
                       int* /*argc*/,
@@ -62,9 +90,10 @@
       && details != NULL) {
 
     Avahi::PresencePublisher* publisher = NULL;
+    Service* service = NULL;
     publisher = new Avahi::PresencePublisher (core, *details, *call_core);
-    presence_core->add_presence_publisher (*publisher);
-    core.add (*publisher);
+    service = new Service (*presence_core, publisher);
+    core.add (*service);
     result = true;
   }
 

Modified: trunk/lib/engine/components/avahi-publisher/avahi-publisher.h
==============================================================================
--- trunk/lib/engine/components/avahi-publisher/avahi-publisher.h	(original)
+++ trunk/lib/engine/components/avahi-publisher/avahi-publisher.h	Sun Sep 14 18:01:03 2008
@@ -54,8 +54,7 @@
 
 namespace Avahi
 {
-  class PresencePublisher: public Ekiga::Service,
-			   public Ekiga::PresencePublisher
+  class PresencePublisher: public Ekiga::PresencePublisher
   {
 public:
 
@@ -65,12 +64,6 @@
 
     ~PresencePublisher ();
 
-    const std::string get_name () const
-      { return "avahi-presence-publisher"; }
-
-    const std::string get_description () const
-      { return "\tObject bringing in Avahi presence publishing"; }
-
     void publish (const Ekiga::PersonalDetails & details);
 
     /* public only to be called by C callbacks... */

Modified: trunk/lib/engine/presence/skel/presence-core.cpp
==============================================================================
--- trunk/lib/engine/presence/skel/presence-core.cpp	(original)
+++ trunk/lib/engine/presence/skel/presence-core.cpp	Sun Sep 14 18:01:03 2008
@@ -135,6 +135,12 @@
   presentity_decorators.push_back (&decorator);
 }
 
+void
+Ekiga::PresenceCore::remove_presentity_decorator (PresentityDecorator& decorator)
+{
+  presentity_decorators.remove (&decorator);
+}
+
 bool
 Ekiga::PresenceCore::populate_presentity_menu (Presentity& presentity,
 					       const std::string uri,
@@ -156,7 +162,7 @@
 void
 Ekiga::PresenceCore::add_presence_fetcher (PresenceFetcher &fetcher)
 {
-  presence_fetchers.insert (&fetcher);
+  presence_fetchers.push_back (&fetcher);
   fetcher.presence_received.connect (sigc::mem_fun (this,
 						    &Ekiga::PresenceCore::on_presence_received));
   fetcher.status_received.connect (sigc::mem_fun (this,
@@ -169,13 +175,20 @@
 }
 
 void
+Ekiga::PresenceCore::remove_presence_fetcher (PresenceFetcher& fetcher)
+{
+  presence_fetchers.remove (&fetcher);
+  // FIXME: unconnect the signals!
+}
+
+void
 Ekiga::PresenceCore::fetch_presence (const std::string uri)
 {
   uri_infos[uri].count++;
 
   if (uri_infos[uri].count == 1) {
 
-    for (std::set<PresenceFetcher *>::iterator iter
+    for (std::list<PresenceFetcher*>::iterator iter
 	   = presence_fetchers.begin ();
 	 iter != presence_fetchers.end ();
 	 iter++)
@@ -194,7 +207,7 @@
 
     uri_infos.erase (uri_infos.find (uri));
 
-    for (std::set<PresenceFetcher *>::iterator iter
+    for (std::list<PresenceFetcher*>::iterator iter
 	   = presence_fetchers.begin ();
 	 iter != presence_fetchers.end ();
 	 iter++)
@@ -221,12 +234,18 @@
 void
 Ekiga::PresenceCore::add_presence_publisher (PresencePublisher &publisher)
 {
-  presence_publishers.insert (&publisher);
+  presence_publishers.push_back (&publisher);
+}
+
+void
+Ekiga::PresenceCore::remove_presence_publisher (PresencePublisher& publisher)
+{
+  presence_publishers.remove (&publisher);
 }
 
 void Ekiga::PresenceCore::publish (const PersonalDetails* details) 
 {
-  for (std::set<PresencePublisher *>::iterator iter
+  for (std::list<PresencePublisher*>::iterator iter
 	 = presence_publishers.begin ();
        iter != presence_publishers.end ();
        iter++)

Modified: trunk/lib/engine/presence/skel/presence-core.h
==============================================================================
--- trunk/lib/engine/presence/skel/presence-core.h	(original)
+++ trunk/lib/engine/presence/skel/presence-core.h	Sun Sep 14 18:01:03 2008
@@ -220,6 +220,11 @@
      */
     void add_presentity_decorator (PresentityDecorator &decorator);
 
+    /** Removes a decorator from the pool of presentity decorators.
+     * @param The presentity decorator.
+     */
+    void remove_presentity_decorator (PresentityDecorator& decorator);
+
     /** Populates a menu with the actions available on a given uri.
      * @param The uri for which the decoration is needed.
      * @param The builder to populate.
@@ -230,7 +235,7 @@
 
   private:
 
-    std::list<PresentityDecorator *> presentity_decorators;
+    std::list<PresentityDecorator*> presentity_decorators;
 
     /*** API to help presentities get presence ***/
   public:
@@ -240,6 +245,11 @@
      */
     void add_presence_fetcher (PresenceFetcher &fetcher);
 
+    /** Removes a fetcher from the pool of presentce fetchers.
+     * @param The presence fetcher.
+     */
+    void remove_presence_fetcher (PresenceFetcher &fetcher);
+
     /** Tells the PresenceCore that someone is interested in presence
      * information for the given uri.
      * @param: The uri for which presence is requested.
@@ -260,7 +270,7 @@
 
   private:
 
-    std::set<PresenceFetcher *> presence_fetchers;
+    std::list<PresenceFetcher*> presence_fetchers;
     void on_presence_received (const std::string uri,
 			       const std::string presence);
     void on_status_received (const std::string uri,
@@ -281,10 +291,11 @@
   public:
 
     void add_presence_publisher (PresencePublisher &publisher);
+    void remove_presence_publisher (PresencePublisher& publisher);
 
   private:
 
-    std::set<PresencePublisher *> presence_publishers;
+    std::list<PresencePublisher*> presence_publishers;
     void publish (const PersonalDetails* details);
     void on_personal_details_updated (PersonalDetails &details);
     void on_registration_event (const Ekiga::Account & account,

Modified: trunk/src/endpoints/opal-main.cpp
==============================================================================
--- trunk/src/endpoints/opal-main.cpp	(original)
+++ trunk/src/endpoints/opal-main.cpp	Sun Sep 14 18:01:03 2008
@@ -73,6 +73,9 @@
   return false;
 }
 
+/* FIXME: add here an Ekiga::Service which will add&remove publishers,
+ * decorators and fetchers
+ */
 
 using namespace Opal;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]