Example #1
0
        internal string ParseAllDocsReturn(List <List <PouchData> > askedDataList)
        {
            // Get all Data

            List <PouchData> retPouchData = new List <PouchData>();
            // Iterate over whole list and only take highest rev ticket
            int highestRev;

            foreach (List <PouchData> cPouchDataList in askedDataList)
            {
                highestRev = 0;
                PouchData pouchDataToAdd = new PouchData();
                foreach (PouchData cPouchData in cPouchDataList)
                {
                    using (MessageControllerHelper helper = new MessageControllerHelper())
                    {
                        if (helper.ParseSeqId(cPouchData._rev) > highestRev)
                        {
                            highestRev     = helper.ParseSeqId(cPouchData._rev);
                            pouchDataToAdd = cPouchData;
                        }
                    }
                    retPouchData.Add(pouchDataToAdd);
                }
            }

            // Parse data into correct string
            string retMessage = "";

            // TODO: Find out if this is correct
            // Returns + 1 (First Row is extra, i guess)
            int totalrows = retPouchData.Count + 1;

            List <object> rows = new List <object>();

            foreach (PouchData cPouchData in retPouchData)
            {
                object cData = new
                {
                    id    = cPouchData._id,
                    key   = cPouchData._id,
                    value = new
                    {
                        rev = cPouchData._rev
                    },
                    doc = cPouchData
                };
                rows.Add(cData);
            }

            object ret = new
            {
                total_rows = totalrows,
                rows       = rows
            };

            retMessage = JsonConvert.SerializeObject(ret);

            return(retMessage);
        }
Example #2
0
        public HttpResponseMessage GetChanges(string db, string style, string since, int limit)
        {
            Console.WriteLine("In Changes, db: " + db + ", style: " + style + ", since: " + since + ", limit: " + limit);

            // Get Revisions from DB
            List <Change> revsList = new List <Change>();

            // Get Data for revision Ids
            List <PouchData> pouchDataList = new List <PouchData>();

            using (DatabaseContext _db = new DatabaseContext())
            {
                // only take limit if there is more than limit in db
                int RevsCount = _db.Changes.Where(e => e.DatabaseName.Equals(db)).ToList().Count();
                if (RevsCount < limit)
                {
                    limit = RevsCount;
                }

                revsList = _db.Changes.Where(e => e.DatabaseName.Equals(db)).OrderByDescending(e => e.seq).Take(limit).ToList();

                // Remove all before Since
                using (MessageControllerHelper helper = new MessageControllerHelper())
                {
                    if (!since.Equals("") && !since.Equals("0"))
                    {
                        revsList = helper.FindRevsAfterSince(since, revsList);
                    }
                }


                // Get Data to look for revision ids
                // TODO: Smarter solution!!
                if (db.Equals("Tickets"))
                {
                    // not sure if limit here would be working as intended as i don't know the ordering
                    // _db.Tickets.Take(limit).ToList();

                    // take the list and convert it into a json string
                    var tempString = JsonConvert.SerializeObject(_db.Tickets.ToList());

                    // If we now deserialize it, only the inclusive Parameters stay
                    pouchDataList = JsonConvert.DeserializeObject <List <PouchData> >(tempString);
                }
                else
                {
                    Console.WriteLine("ERROR!!! Read TODOs. We may have other stuff than only Tickets");
                }
            }

            // Get highest Sequence Number (Find latest Change)
            int           _seq = 0, highestSequenceId = 0;
            string        highestSequence = "";
            List <Change> tempRevsList    = new List <Change>();

            foreach (Change cChange in revsList)
            {
                _seq = 0;
                using (MessageControllerHelper helper = new MessageControllerHelper())
                {
                    _seq = helper.ParseSeqId(cChange.seq);
                }
                if (highestSequenceId < _seq)
                {
                    highestSequenceId = _seq;
                    highestSequence   = cChange.seq;
                }

                // Remove first element since it is the same
                if (!since.Equals("") && !since.Equals("0"))
                {
                    continue;
                }

                tempRevsList.Add(cChange);
            }
            revsList = tempRevsList;

            using (MessageControllerHelper helper = new MessageControllerHelper())
            {
                string temp;
                using (ReturnParser parser = new ReturnParser())
                {
                    temp = parser.GetChangesReturn(revsList, pouchDataList, highestSequence);
                }
                return(helper.GetJsonResponse(HttpStatusCode.OK, new StringContent(temp)));
            }
        }
Example #3
0
        public string GetChangesReturn(List <Change> changes, List <PouchData> data, string highestSequenceId)
        {
            // return current Row
            List <object>         tempRet             = new List <object>();
            List <List <string> > allRevsOfIdFiltered = new List <List <string> >();

            foreach (Change cChange in changes)
            {
                string currentSeq = cChange.seq;

                // Get each rev of with same id as current change
                List <string> cRevsOfId         = new List <string>();
                List <string> cRevsOfIdFiltered = new List <string>();
                foreach (PouchData cPouchData in data)
                {
                    if (cChange.id.Equals(cPouchData._id) && GetSequenceOfPouchItem(cPouchData) == currentSeq)
                    {
                        cRevsOfId.Add(cPouchData._rev);
                        continue;
                    }
                }

                // Find highest rev
                int highestRev = 0;
                foreach (string cRev in cRevsOfId)
                {
                    using (MessageControllerHelper helper = new MessageControllerHelper())
                    {
                        int cId = helper.ParseSeqId(cRev);
                        if (cId > highestRev)
                        {
                            highestRev = cId;
                        }
                    }
                }

                foreach (string cRev in cRevsOfId)
                {
                    using (MessageControllerHelper helper = new MessageControllerHelper())
                    {
                        if (helper.ParseSeqId(cRev) == highestRev)
                        {
                            cRevsOfIdFiltered.Add(cRev);
                        }
                    }
                }
                allRevsOfIdFiltered.Add(cRevsOfIdFiltered);
            }

            bool[] doubles = new bool[changes.Count];
            // List<Tuple<string, string>> changes_unique = new List<Tuple<string, string>>();
            for (int i = 0; i < changes.Count; i++)
            {
                Change cChange = changes[i];
                foreach (Change cInnerChange in changes)
                {
                    if (cChange.id.Equals(cInnerChange.id))
                    {
                        // We found the original
                        if (cChange.seq.Equals(cInnerChange.seq))
                        {
                            continue;
                        }

                        // We found a double
                        using (MessageControllerHelper helper = new MessageControllerHelper())
                        {
                            if (helper.ParseSeqId(cChange.seq) < helper.ParseSeqId(cInnerChange.seq))
                            {
                                doubles[i] = true;
                            }
                        }
                    }
                }
            }

            changes.Reverse();
            Array.Reverse(doubles);
            allRevsOfIdFiltered.Reverse();

            for (int i = 0; i < changes.Count; i++)
            {
                if (doubles[i] == true)
                {
                    continue;
                }

                // Build return
                List <object> _changes = new List <object>();
                foreach (string cRevision in allRevsOfIdFiltered[i])
                {
                    object revTemp = new
                    {
                        rev = cRevision
                    };
                    _changes.Add(revTemp);
                }
                object cRow = new
                {
                    seq     = changes[i].seq,
                    id      = changes[i].id,
                    changes = _changes
                };
                tempRet.Add(cRow);
            }

            object ret = new
            {
                results  = tempRet,
                last_seq = highestSequenceId,
                pending  = 0                // 0 for now, don't now why
            };

            return(JsonConvert.SerializeObject(ret));
        }