Пример #1
0
        public DiffResultInstance DiffWithZip(object target)
        {
            byte[] zipBytes;
            if (target is Base64EncodedByteArrayInstance)
            {
                //Create the excel document instance from a byte array.
                var byteArray = target as Base64EncodedByteArrayInstance;
                zipBytes = byteArray.Data;
            }
            else
            {
                var targetUrl = TypeConverter.ToString(target);
                if (Uri.IsWellFormedUriString(targetUrl, UriKind.Relative))
                {
                    targetUrl = SPUtility.ConcatUrls(SPBaristaContext.Current.Web.Url, targetUrl);
                }
                SPFile file;
                if (SPHelper.TryGetSPFile(targetUrl, out file))
                {
                    zipBytes = file.OpenBinary(SPOpenBinaryOptions.SkipVirusScan);
                }
                else
                {
                    throw new JavaScriptException(Engine, "Error",
                                                  "A file was not found in the specified location: " + targetUrl);
                }
            }

            var sourceFolderInfo = new List <DiffInfoInstance>();
            var targetFolderInfo = new List <DiffInfoInstance>();

            var itemsIterator = new ContentIterator();

            itemsIterator.ProcessFilesInFolder(m_folder, true,
                                               spFile =>
            {
                var fileInfo = new DiffInfoInstance(Engine)
                {
                    Url = spFile.Url.ReplaceFirstOccurenceIgnoreCase(m_folder.Url, ""),
                    TimeLastModified = JurassicHelper.ToDateInstance(Engine,
                                                                     spFile.TimeLastModified)
                };

                var fileBytes = spFile.OpenBinary(SPOpenBinaryOptions.SkipVirusScan);
                using (var md5 = MD5.Create())
                {
                    fileInfo.Hash =
                        Convert.ToBase64String(md5.ComputeHash(fileBytes));
                }

                sourceFolderInfo.Add(fileInfo);
            },
                                               null);

            using (var ms = new MemoryStream(zipBytes))
            {
                using (var zf = new ZipFile(ms))
                {
                    foreach (ZipEntry ze in zf)
                    {
                        if (ze.IsDirectory)
                        {
                            continue;
                        }

                        var fileInfo = new DiffInfoInstance(Engine)
                        {
                            Url = "/" + ze.Name,
                            TimeLastModified = JurassicHelper.ToDateInstance(Engine,
                                                                             ze.DateTime)
                        };

                        using (var zs = zf.GetInputStream(ze))
                        {
                            using (var md5 = MD5.Create())
                            {
                                fileInfo.Hash =
                                    Convert.ToBase64String(md5.ComputeHash(zs));
                            }
                        }

                        targetFolderInfo.Add(fileInfo);
                    }
                }
            }

            var result = new DiffResultInstance(Engine);

            result.Process(sourceFolderInfo, targetFolderInfo);
            return(result);
        }
Пример #2
0
        public DiffResultInstance Diff(SPFolderInstance targetFolder, object recursive)
        {
            if (targetFolder == null)
            {
                throw new JavaScriptException(Engine, "Error", "Target Folder must be specified.");
            }

            var bRecurse = true;

            if (recursive != Undefined.Value && recursive != Null.Value && recursive != null)
            {
                bRecurse = TypeConverter.ToBoolean(recursive);
            }

            var sourceFolderInfo = new List <DiffInfoInstance>();
            var targetFolderInfo = new List <DiffInfoInstance>();

            var itemsIterator = new ContentIterator();

            itemsIterator.ProcessFilesInFolder(m_folder, bRecurse,
                                               spFile =>
            {
                var fileInfo = new DiffInfoInstance(Engine)
                {
                    Url = spFile.Url.ReplaceFirstOccurenceIgnoreCase(m_folder.Url, ""),
                    TimeLastModified = JurassicHelper.ToDateInstance(Engine,
                                                                     spFile.TimeLastModified)
                };

                var fileBytes = spFile.OpenBinary(SPOpenBinaryOptions.SkipVirusScan);
                using (var md5 = MD5.Create())
                {
                    fileInfo.Hash =
                        Convert.ToBase64String(md5.ComputeHash(fileBytes));
                }

                sourceFolderInfo.Add(fileInfo);
            },
                                               null);

            itemsIterator.ProcessFilesInFolder(targetFolder.Folder, bRecurse,
                                               spFile =>
            {
                var fileInfo = new DiffInfoInstance(Engine)
                {
                    Url = spFile.Url.ReplaceFirstOccurenceIgnoreCase(targetFolder.Folder.Url, ""),
                    TimeLastModified = JurassicHelper.ToDateInstance(Engine,
                                                                     spFile.TimeLastModified)
                };

                var fileBytes = spFile.OpenBinary(SPOpenBinaryOptions.SkipVirusScan);
                using (var md5 = MD5.Create())
                {
                    fileInfo.Hash =
                        Convert.ToBase64String(md5.ComputeHash(fileBytes));
                }

                targetFolderInfo.Add(fileInfo);
            },
                                               null);

            var result = new DiffResultInstance(Engine);

            result.Process(sourceFolderInfo, targetFolderInfo);
            return(result);
        }