예제 #1
0
        protected override IEnumerable <ThreadInfo> HandleNoPath(ThreadManager TM, Dictionary <string, string> query, object state)
        {
            var currentThread = TM.CurrentThread;

            if (query.ContainsKey("version"))
            {
                double version;
                if (Double.TryParse(query["version"], out version))
                {
                    if (version >= Program.TagsVersion)
                    {
                        yield return(TM.Return(currentThread, new JsonResponse(HttpStatusCode.NoContent)));
                    }
                }
            }

            var response   = new TagsResponse(Program.TagsVersion);
            var categories = new Dictionary <string, TagCategory>();

            categories.Add("", response.Root);

            yield return(TM.MakeDbCall(currentThread, Program.ConnectionString, "spGetTagCategories"));

            using (var table = TM.GetResult <DataTable>(currentThread)) {
                foreach (DataRow row in table.Rows)
                {
                    var category = new TagCategory(row);
                    categories[category.Parent ?? ""].Children.Add(category);
                    categories.Add(category.Name, category);
                }
            }

            yield return(TM.MakeDbCall(currentThread, Program.ConnectionString, "spGetTags"));

            using (var table = TM.GetResult <DataTable>(currentThread)) {
                foreach (DataRow row in table.Rows)
                {
                    var tag = new Tag(row);
                    categories[(string)row["category"]].Tags.Add(tag);
                }
            }

            yield return(TM.Return(currentThread, new JsonResponse(response)));
        }
예제 #2
0
 public TagsResponse(double version)
 {
     Version = version;
     Root    = new TagCategory();
 }