# HG changeset patch
# User cli
# Date 1315743559 -7200
# Node ID e118b4d60029c6065d5def39bd7d0eb47cde1e2c
# Parent  28870db3b9fdb3398e7a3cdfa338814e421a587e
Complete XDAEMON GROUPFLAG subcommand.

diff -r 28870db3b9fd -r e118b4d60029 src/org/sonews/daemon/command/XDaemonCommand.java
--- a/src/org/sonews/daemon/command/XDaemonCommand.java	Sat Sep 10 20:20:19 2011 +0200
+++ b/src/org/sonews/daemon/command/XDaemonCommand.java	Sun Sep 11 14:19:19 2011 +0200
@@ -132,23 +132,24 @@
 				String flagName = commands[4];
 				if(commands[3].equalsIgnoreCase("SET")) {
 					if(flagName.equals("MAILINGLIST")) {
-
+						group.setFlag(Channel.MAILINGLIST);
 					} else if(flagName.equals("DELETED")) {
-
+						group.setFlag(Channel.DELETED);
 					} else if(flagName.equals("READONLY")) {
-
+						group.setFlag(Channel.READONLY);
 					}
 				} else if(commands[3].equalsIgnoreCase("UNSET")) {
 					if(flagName.equals("MAILINGLIST")) {
-
+						group.unsetFlag(Channel.MAILINGLIST);
 					} else if(flagName.equals("DELETED")) {
-
+						group.unsetFlag(Channel.DELETED);
 					} else if(flagName.equals("READONLY")) {
-
+						group.unsetFlag(Channel.READONLY);
 					}
 				} else {
 					conn.println("500 invalid command usage");
 				}
+				StorageManager.current().update(group);
 			} else if (commands.length == 4 && commands[1].equalsIgnoreCase("SET")) {
 				String key = commands[2];
 				String val = commands[3];
diff -r 28870db3b9fd -r e118b4d60029 src/org/sonews/storage/Group.java
--- a/src/org/sonews/storage/Group.java	Sat Sep 10 20:20:19 2011 +0200
+++ b/src/org/sonews/storage/Group.java	Sun Sep 11 14:19:19 2011 +0200
@@ -27,9 +27,28 @@
  * @author Christian Lins
  * @since sonews/0.5.0
  */
-// TODO: This class should not be public!
 public class Group extends Channel {
 
+	/**
+	 * If this flag is set the Group is no real newsgroup but a mailing list
+	 * mirror. In that case every posting and receiving mails must go through
+	 * the mailing list gateway.
+	 */
+	public static final int MAILINGLIST = 0x1;
+
+	/**
+	 * If this flag is set the Group is marked as readonly and the posting
+	 * is prohibited. This can be useful for groups that are synced only in
+	 * one direction.
+	 */
+	public static final int READONLY = 0x2;
+
+	/**
+	 * If this flag is set the Group is marked as deleted and must not occur
+	 * in any output. The deletion is done lazily by a low priority daemon.
+	 */
+	public static final int DELETED = 0x80;
+
 	private long id = 0;
 	private int flags = -1;
 	private String name = null;
@@ -47,8 +66,10 @@
 	}
 
 	/**
+	 * Constructor.
 	 * @param name
 	 * @param id
+	 * @param flags
 	 */
 	public Group(final String name, final long id, final int flags) {
 		this.id = id;
@@ -99,7 +120,6 @@
 	 */
 	public long getInternalID() {
 		assert id > 0;
-
 		return id;
 	}
 
@@ -133,6 +153,10 @@
 		this.flags |= flag;
 	}
 
+	public void unsetFlag(final int flag) {
+		this.flags &= ~flag;
+	}
+
 	public void setName(final String name) {
 		this.name = name;
 	}