]> git.meshlink.io Git - catta/blobdiff - avahi-client/entrygroup.c
l10n: Updated Italian (it) translation to 100%
[catta] / avahi-client / entrygroup.c
index 003b17cfd5cc309c92063721741e44cf09c46d8a..e2fc3b9298e146e431f9f080f399b4f0fb7cf438 100644 (file)
 void avahi_entry_group_set_state(AvahiEntryGroup *group, AvahiEntryGroupState state) {
     assert(group);
 
-    if (group->state == state)
+    if (group->state_valid && group->state == state)
         return;
 
     group->state = state;
+    group->state_valid = 1;
 
     if (group->callback)
         group->callback(group, state, group->userdata);
@@ -82,9 +83,7 @@ static int retrieve_state(AvahiEntryGroup *group) {
     dbus_message_unref(message);
     dbus_message_unref(reply);
 
-    avahi_entry_group_set_state(group, (AvahiEntryGroupState) state);
-    
-    return AVAHI_OK;
+    return state;
     
 fail:
     if (dbus_error_is_set(&error)) {
@@ -106,6 +105,7 @@ AvahiEntryGroup* avahi_entry_group_new (AvahiClient *client, AvahiEntryGroupCall
     DBusMessage *message = NULL, *reply = NULL;
     DBusError error;
     char *path;
+    int state;
 
     assert(client);
 
@@ -124,7 +124,7 @@ AvahiEntryGroup* avahi_entry_group_new (AvahiClient *client, AvahiEntryGroupCall
     group->client = client;
     group->callback = callback;
     group->userdata = userdata;
-    group->state = AVAHI_ENTRY_GROUP_UNCOMMITED;
+    group->state_valid = 0;
     group->path = NULL;
     AVAHI_LLIST_PREPEND(AvahiEntryGroup, groups, client->groups, group);
     
@@ -157,8 +157,12 @@ AvahiEntryGroup* avahi_entry_group_new (AvahiClient *client, AvahiEntryGroupCall
         goto fail;
     }
 
-    if (retrieve_state(group) < 0)
+    if ((state = retrieve_state(group)) < 0) {
+        avahi_client_set_errno(client, state);
         goto fail;
+    }
+    
+    avahi_entry_group_set_state(group, (AvahiEntryGroupState) state);
 
     dbus_message_unref(message);
     dbus_message_unref(reply);
@@ -237,7 +241,7 @@ int avahi_entry_group_free(AvahiEntryGroup *group) {
         
     assert(group);
     
-    if (group->path && !avahi_client_is_connected(client))
+    if (group->path && avahi_client_is_connected(client))
         r = entry_group_simple_method_call(group, "Free");
     
     AVAHI_LLIST_REMOVE(AvahiEntryGroup, groups, client->groups, group);
@@ -249,27 +253,40 @@ int avahi_entry_group_free(AvahiEntryGroup *group) {
 }
 
 int avahi_entry_group_commit(AvahiEntryGroup *group) {
+    int ret;
     assert(group);
     
     if (!group->path || !avahi_client_is_connected(group->client))
         return avahi_client_set_errno(group->client, AVAHI_ERR_BAD_STATE);
 
-    return entry_group_simple_method_call(group, "Commit");
+    if ((ret = entry_group_simple_method_call(group, "Commit")) < 0)
+        return ret;
+
+    group->state_valid = 0;
+    return ret;
 }
 
 int avahi_entry_group_reset(AvahiEntryGroup *group) {
+    int ret;
     assert(group);
     
     if (!group->path || !avahi_client_is_connected(group->client))
         return avahi_client_set_errno(group->client, AVAHI_ERR_BAD_STATE);
 
-    return entry_group_simple_method_call(group, "Reset");
+    if ((ret = entry_group_simple_method_call(group, "Reset")) < 0)
+        return ret;
+    
+    group->state_valid = 0;
+    return ret;
 }
 
 int avahi_entry_group_get_state (AvahiEntryGroup *group) {
     assert (group);
 
-    return group->state;
+    if (group->state_valid)
+        return group->state;
+    
+    return retrieve_state(group);
 }
 
 AvahiClient* avahi_entry_group_get_client (AvahiEntryGroup *group) {
@@ -700,8 +717,6 @@ fail:
         dbus_message_unref(reply);
 
     return r;
-    
-    
 }
 
 /** Add a host/address pair */