Esempio n. 1
0
        public async Task <Listing> LinksForSubreddit(Subreddits subreddits, string subredditName, string after)
        {
            var subredditId = await TranslateSubredditNameToId(subreddits, subredditName);

            var keyspace = new byte[8];

            for (int i = 0; i < 8 && i < subredditId.Length; i++)
            {
                keyspace[i] = (byte)subredditId[i];
            }

            var linkCursor = await _linksDB.SelectAsync(_linksDB.GetKeys().First(), keyspace);

            if (after != null && linkCursor != null)
            {
                var afterKeyspace = new byte[16];

                for (int i = 0; i < 16 && i < after.Length + 10; i++)
                {
                    afterKeyspace[i] = (byte)after[i + 2]; //skip ahead past the after type identifier
                }
                await linkCursor.SeekAsync(_linksDB.GetKeys().First(), afterKeyspace);
            }

            return(await DeserializeCursor(linkCursor, 25));
        }
Esempio n. 2
0
        private async Task <string> TranslateSubredditNameToId(Subreddits subreddits, string subredditName)
        {
            var subreddit = await subreddits.GetSubreddit(null, subredditName);

            if (subreddit != null)
            {
                return(((Subreddit)subreddit.Data).Name);
            }
            else
            {
                return(null);
            }
        }
Esempio n. 3
0
        public async Task<Listing> LinksForSubreddit(Subreddits subreddits, string subredditName, string after)
        {
            try
            {
                var subredditId = await TranslateSubredditNameToId(subreddits, subredditName);
                if (subredditId == null)
                    return new Listing { Data = new ListingData { Children = new List<Thing>() } };

                var keyspace = new byte[8];

                for (int i = 0; i < 8 && i < subredditId.Length; i++)
                    keyspace[i] = (byte)subredditId[i];

                using (var linkCursor = await _linksDB.SelectAsync(_linksDB.GetKeys().First(), keyspace))
                {
                    if (after != null && linkCursor != null)
                    {
                        var afterKeyspace = new byte[16];

                        for (int i = 0; i < 16 && i < after.Length + 10; i++)
                            afterKeyspace[i] = (byte)after[i + 2]; //skip ahead past the after type identifier

                        await linkCursor.SeekAsync(_linksDB.GetKeys().First(), afterKeyspace, DBReadFlags.NoLock);
                    }

                    return await DeserializeCursor(linkCursor, 25);
                }
            }
            catch (Exception ex)
            {
                var errorCode = DBError.TranslateError((uint)ex.HResult);
                Debug.WriteLine(errorCode);
                return new Listing { Data = new ListingData { Children = new List<Thing>() } };
            }
        }
Esempio n. 4
0
 private async Task<string> TranslateSubredditNameToId(Subreddits subreddits, string subredditName)
 {
     var subreddit = await subreddits.GetSubreddit(null, subredditName);
     if (subreddit != null)
         return ((Subreddit)subreddit.Data).Name;
     else
         return null;
 }