コード例 #1
0
        public static async Task SetUsersInGroup(ulong group_id, ulong[] user_ids, ProgressInterface progi = null)
        {
            if (progi != null)
            {
                progi.Show();
                progi.SetLabel("Gathering Information");
                progi.SetMaximum(2);
            }

            var group_list = await GetGroupIDs();

            if (progi != null)
            {
                progi.Step();
            }

            if (!group_list.Contains(group_id))
            {
                throw new Exception("User group " + group_id + "doesn't exist.");
            }

            var users_in_group = await GetUsersInGroup(group_id);

            if (progi != null)
            {
                progi.Step();
            }

            var users_to_remove = users_in_group.Where(x => !user_ids.Contains(x));
            var users_to_add    = user_ids.Where(x => !users_in_group.Contains(x));

            if (progi != null)
            {
                progi.Reset();
                progi.SetMaximum(2);
            }


            //remove users

            if (users_to_remove.Count() > 0)
            {
                var sqlconn2 = await ARDBConnectionManager.default_manager.CheckOut();

                string val = "";

                foreach (var user in users_to_remove)
                {
                    val += user + ", ";
                }

                val = val.Substring(0, val.Length - 2);

                using (MySqlCommand sqlcmd = new MySqlCommand("delete from `" + group_id + "` where user_id in (" + val + ");", sqlconn2.Connection))
                {
                    //sqlcmd.Parameters.AddWithValue("@user_ids", val);

                    await sqlcmd.ExecuteNonQueryAsync();
                }

                ARDBConnectionManager.default_manager.CheckIn(sqlconn2);

                if (progi != null)
                {
                    progi.Step();
                }
            }

            //add users
            if (users_to_add.Count() > 0)
            {
                var sqlconn2 = await ARDBConnectionManager.default_manager.CheckOut();

                string val = "";

                foreach (var user in users_to_add)
                {
                    val += "(" + user + "), ";
                }

                val = val.Substring(0, val.Length - 2);

                using (MySqlCommand sqlcmd = new MySqlCommand("insert into `" + group_id + "` (user_id) values " + val + ";", sqlconn2.Connection))
                {
                    //sqlcmd.Parameters.AddWithValue("@user_ids", val);

                    await sqlcmd.ExecuteNonQueryAsync();
                }

                ARDBConnectionManager.default_manager.CheckIn(sqlconn2);

                if (progi != null)
                {
                    progi.Step();
                }
            }

            progi.Dispose();
        }