Add channel position.
authorMartin Johansson <martin@fatbob.nu>
Wed, 13 Nov 2013 21:47:37 +0000 (22:47 +0100)
committerMartin Johansson <martin@fatbob.nu>
Wed, 13 Nov 2013 21:47:37 +0000 (22:47 +0100)
src/channel.c
src/channel.h
src/conf.c
src/conf.h
src/messagehandler.c

index 7e939a527b4307f57c36b205558c6cfdb46653bb..021f9bd5bb63eb87646e09dfda3bbd5583b17641 100644 (file)
@@ -161,6 +161,7 @@ void Chan_init()
                        channel_t *ch, *ch_itr = NULL;
                        ch = Chan_createChannel(chdesc.name, chdesc.description);
                        ch->noenter = chdesc.noenter;
+                       ch->position = chdesc.position;
                        if (chdesc.password) {
                                Log_info("Setting password on channel '%s'", ch->name); 
                                ch->password = strdup(chdesc.password);
index c32ae5be41d18551ddc162e4f054cf226b2bcc37..35caceb4946d1f6c4707e506fc8547cbc927055c 100644 (file)
@@ -42,6 +42,7 @@ typedef struct channel {
        char *password;
        struct channel *parent;
        bool_t temporary, noenter, silent;
+       int position;
        struct dlist node;
        struct dlist subs;
        struct dlist clients;
index 447061f46d5c93047791e4ba9b5968d728629ad9..2ec69a5a570eb7ca93dc95c86daf5ce82ad07f20 100644 (file)
@@ -340,6 +340,13 @@ int Conf_getNextChannel(conf_channel_t *chdesc, int index)
                chdesc->silent = false;
        else
                chdesc->silent = config_setting_get_bool(setting);
+       
+       ret = snprintf(configstr, maxconfig, "channels.[%d].position", index);
+       setting = config_lookup(&configuration, configstr);
+       if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
+               chdesc->position = 0;
+       else
+               chdesc->position = config_setting_get_int(setting);
 
        return 0;
 }
index d30ed416b1667741b4bd74cc036312acfd199f98..9cab3d149b56ae98fdcb201c4440f014c459f7b5 100644 (file)
@@ -55,7 +55,6 @@ typedef enum param {
        BANFILE,
        SYNC_BANFILE,
        OPUS_THRESHOLD,
-       SILENT_CHANNEL,
 } param_t;
 
 typedef struct {
@@ -64,6 +63,7 @@ typedef struct {
        const char *description;
        const char *password;
        bool_t noenter, silent;
+       int position;
 } conf_channel_t;
 
 typedef struct {
index f075c469d76e0bf54bdf6d5b304352360832adc1..1e49241890d6252664522f06177a88a3d956e49a 100644 (file)
@@ -263,6 +263,10 @@ void Mh_handle_message(client_t *client, message_t *msg)
                        sendmsg->payload.channelState->name = strdup(ch_itr->name);
                        if (ch_itr->desc)
                                sendmsg->payload.channelState->description = strdup(ch_itr->desc);
+                       if (ch_itr->position != 0) {
+                               sendmsg->payload.channelState->has_position = true;
+                               sendmsg->payload.channelState->position = ch_itr->position;
+                       }
                        Log_debug("Send channel info: %s", sendmsg->payload.channelState->name);
                        Client_send_message(client, sendmsg);                   
                }
@@ -728,6 +732,8 @@ void Mh_handle_message(client_t *client, message_t *msg)
                newchan = Chan_createChannel(msg->payload.channelState->name,
                                                                         msg->payload.channelState->description);
                newchan->temporary = true;
+               if (msg->payload.channelState->has_position)
+                       newchan->position = msg->payload.channelState->position;
                Chan_addChannel(parent, newchan);
                msg->payload.channelState->has_channel_id = true;
                msg->payload.channelState->channel_id = newchan->id;