public async Task <List <Structures.Post> > getPostList(int tid, int numPage) { string strUrl = strUrlBaseApi + strPostList + "&tid=" + tid + "&ppp=" + tpp + "&page=" + numPage; string strJson = await hc.GetStringAsync(new Uri(strUrl)); JsonObject jo = JsonObject.Parse(strJson); JsonArray postsArray = jo["Variables"].GetObject()["postlist"].GetArray(); int numPosts = postsArray.Count; List <Structures.Post> result = new List <Structures.Post>(); arc = strJson; // sort posts by lastpost time in ascending order (earlier in the front) Helpers.ComparableJsonContainer[] posts = new Helpers.ComparableJsonContainer[numPosts]; for (int i = 0; i < numPosts; i++) { JsonObject tmp = postsArray[i].GetObject(); Helpers.ComparableJsonContainer postTuple = new Helpers.ComparableJsonContainer { obj = tmp, key = int.Parse(tmp["dbdateline"].GetString()) }; posts[i] = postTuple; } IEnumerable <Helpers.ComparableJsonContainer> sortedTTs = posts.OrderBy(tuple => tuple.key); foreach (Helpers.ComparableJsonContainer tuple in sortedTTs) { // replace all img attachments with real urls string resultTmp = Helpers.AttachSolver.solve(tuple.obj); // replace all html char entities resultTmp = Helpers.MyHTMLSolver.removeHTMLCharEntities(resultTmp); // replace <br> with <br/> and <img ...> with <img .../> resultTmp = Helpers.MyHTMLSolver.completeTags(resultTmp); Structures.Post p = new Structures.Post(); p.htmlMsg = resultTmp; p.strUriAvatar = Helpers.AvatarFactory.getAvatar(tuple.obj["authorid"].GetString(), true); p.strUriAvatar_s = Helpers.AvatarFactory.getAvatar(tuple.obj["authorid"].GetString(), false); p.tid = tuple.obj["tid"].GetString(); p.authorid = tuple.obj["authorid"].GetString(); p.author = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["author"].GetString()); p.dateline = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["dateline"].GetString()); p.memberstatus = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["memberstatus"].GetString()); p.status = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["status"].GetString()); result.Add(p); } return(result); }
public async Task <List <Structures.Thread> > getThreadList(int fid, int numPage) { string strUrl = strUrlBaseApi + strThreadList + "&fid=" + fid + "&tpp=" + tpp + "&page=" + numPage; string strJson = await hc.GetStringAsync(new Uri(strUrl)); JsonObject jo = JsonObject.Parse(strJson); JsonArray threadsArray = jo["Variables"].GetObject()["forum_threadlist"].GetArray(); int numThreads = threadsArray.Count; List <Structures.Thread> result = new List <Structures.Thread>(); arc = strJson; // sort threads by lastpost time in descending order Helpers.ComparableJsonContainer[] threads = new Helpers.ComparableJsonContainer[numThreads]; for (int i = 0; i < numThreads; i++) { JsonObject tmp = threadsArray[i].GetObject(); Helpers.ComparableJsonContainer threadTuple = new Helpers.ComparableJsonContainer { obj = tmp, key = int.Parse(tmp["dblastpost"].GetString()) }; threads[i] = threadTuple; } IEnumerable <Helpers.ComparableJsonContainer> sortedTTs = threads.OrderByDescending(tuple => tuple.key); foreach (Helpers.ComparableJsonContainer tuple in sortedTTs) { Structures.Thread t = new Structures.Thread(); /// HtmlUtilities.ConvertToText toooooooooooooooooo slow! t.tid = tuple.obj["tid"].GetString(); t.fid = fid.ToString(); t.authorid = tuple.obj["authorid"].GetString(); t.author = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["author"].GetString()); t.subject = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["subject"].GetString()); t.lastpost = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["lastpost"].GetString()); t.lastposter = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["lastposter"].GetString()); t.dateline = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["dateline"].GetString()); t.replies = Helpers.MyHTMLSolver.removeHTMLCharEntities(tuple.obj["replies"].GetString()); result.Add(t); } return(result); }