Example #1
0
        public Stream GetContents()
        {
            Stream dataFile = new FileStream(item.DataPath,
                                             FileMode.Open, FileAccess.Read, FileShare.Read);

            var itemFile = item.ItemFile;
            var lastRev  = itemFile.GetLastRevision();

            if (lastRev != null)
            {
                IEnumerable <DeltaOperation> deltaOps = null;
                while (lastRev != null && lastRev.Revision > this.Version)
                {
                    var branchRev = lastRev as BranchRevisionRecord;
                    if (branchRev != null)
                    {
                        var branchRevId = branchRev.Revision;
                        var itemPath    = item.Database.GetDataPath(branchRev.BranchFile);
                        itemFile = new ItemFile(itemPath, item.Database.Encoding);
                        lastRev  = itemFile.GetLastRevision();
                        while (lastRev != null && lastRev.Revision >= branchRevId)
                        {
                            lastRev = itemFile.GetPreviousRevision(lastRev);
                        }
                    }
                    else
                    {
                        var editRev = lastRev as EditRevisionRecord;
                        if (editRev != null)
                        {
                            var delta = itemFile.GetPreviousDelta(editRev);
                            if (delta != null)
                            {
                                var curDeltaOps = delta.Operations;
                                deltaOps = (deltaOps == null) ? curDeltaOps :
                                           DeltaUtil.Merge(deltaOps, curDeltaOps);
                            }
                        }
                        lastRev = itemFile.GetPreviousRevision(lastRev);
                    }
                }

                if (deltaOps != null)
                {
                    dataFile = new DeltaStream(dataFile, deltaOps);
                }
            }

            return(dataFile);
        }