public CompareFoldersWorker(IEnumerable<IVirtualItem> list1, IEnumerable<IVirtualItem> list2, CompareFoldersOptions options)
 {
     this.Options = CompareFoldersOptions.CompareLastWriteTime | CompareFoldersOptions.CompareAttributes;
     this.FStoredProgress = -1;
     this.FList1 = list1;
     this.FList2 = list2;
     this.Options = options;
 }
 private IList<string> CompareFolders(IEnumerable<IVirtualItem> list1, IEnumerable<IVirtualItem> list2, CompareFoldersOptions options, bool cancellable)
 {
     bool flag = (options & CompareFoldersOptions.CompareContent) > 0;
     int num = 0;
     this.FTotalSize = 0L;
     this.FProcessedSize = 0L;
     this.FStoredProgress = -1;
     ICollection is2 = list1 as ICollection;
     List<IVirtualItem> list = new List<IVirtualItem>((is2 != null) ? is2.Count : 0x80);
     foreach (IVirtualItem item in list1)
     {
         if (!(item is IVirtualFolder))
         {
             list.Add(item);
             if (flag)
             {
                 this.FTotalSize += Convert.ToInt64(item[3]);
             }
         }
     }
     ICollection is3 = list2 as ICollection;
     Dictionary<string, IVirtualItem> dictionary = new Dictionary<string, IVirtualItem>((is3 != null) ? is3.Count : 0x80, StringComparer.OrdinalIgnoreCase);
     foreach (IVirtualItem item in list2)
     {
         if (!(item is IVirtualFolder))
         {
             dictionary.Add(item.Name, item);
         }
     }
     List<string> list3 = new List<string>(Math.Min(list.Count, dictionary.Count));
     IComparer defaultInvariant = Comparer.DefaultInvariant;
     if (flag)
     {
         this.OnProgress();
     }
     foreach (IVirtualItem item2 in list)
     {
         IVirtualItem item3;
         if (cancellable)
         {
             base.CheckSuspendingPending();
             if (base.CancellationPending)
             {
                 return null;
             }
         }
         bool flag2 = false;
         if (dictionary.TryGetValue(item2.Name, out item3))
         {
             bool flag3 = string.Equals(item2.Name, item3.Name, StringComparison.OrdinalIgnoreCase);
             if (flag3)
             {
                 if ((CompareFoldersOptions.CompareAttributes & options) > 0)
                 {
                     flag3 = defaultInvariant.Compare(item2.Attributes, item3.Attributes) == 0;
                 }
                 if (flag3 && ((options & CompareFoldersOptions.CompareLastWriteTime) > 0))
                 {
                     bool flag4 = item2.IsPropertyAvailable(8);
                     bool flag5 = item3.IsPropertyAvailable(8);
                     if (flag4 && flag5)
                     {
                         DateTime time = (DateTime) item2[8];
                         DateTime time2 = (DateTime) item3[8];
                         TimeSpan span = (TimeSpan) (time - time2);
                         flag3 = Math.Abs(span.Ticks) < 0x989680L;
                     }
                     else
                     {
                         flag3 = flag4 == flag5;
                     }
                 }
                 if (flag3 && ((options & CompareFoldersOptions.CompareSize) > 0))
                 {
                     flag3 = defaultInvariant.Compare(item2[3], item3[3]) == 0;
                 }
                 if (flag3 && flag)
                 {
                     IChangeVirtualFile file = item2 as IChangeVirtualFile;
                     IChangeVirtualFile file2 = item3 as IChangeVirtualFile;
                     flag3 = (file != null) && (file2 != null);
                     if (flag3)
                     {
                         bool async = (options & CompareFoldersOptions.CompareContentAsync) > 0;
                         if ((options & CompareFoldersOptions.AutoCompareContentAsync) > 0)
                         {
                             IGetVirtualVolume parent = item2.Parent as IGetVirtualVolume;
                             IGetVirtualVolume volume2 = item3.Parent as IGetVirtualVolume;
                             async = ((parent != null) && (volume2 != null)) && ((parent.Location != volume2.Location) || (parent.VolumeType != volume2.VolumeType));
                         }
                         FileOptions options2 = FileOptions.SequentialScan | (async ? FileOptions.Asynchronous : FileOptions.None);
                         using (Stream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.Read, options2, 0L))
                         {
                             using (Stream stream2 = file2.Open(FileMode.Open, FileAccess.Read, FileShare.Read, options2, 0L))
                             {
                                 flag3 = this.StreamsEqual(stream, stream2, 0L, async);
                                 flag2 = true;
                             }
                         }
                     }
                 }
                 if (flag3)
                 {
                     list3.Add(item2.Name);
                 }
             }
         }
         if (flag)
         {
             if (!flag2)
             {
                 this.FProcessedSize += (long) item2[3];
             }
             this.OnProgress();
         }
         else
         {
             int progressPercent = (++num * 100) / list.Count;
             if (progressPercent != this.FStoredProgress)
             {
                 base.RaiseProgressChanged(progressPercent, null);
                 this.FStoredProgress = progressPercent;
             }
         }
     }
     return list3;
 }
 public IList<string> CompareFolders(IEnumerable<IVirtualItem> list1, IEnumerable<IVirtualItem> list2, CompareFoldersOptions options)
 {
     return this.CompareFolders(list1, list2, options, false);
 }
 public CompareFoldersWorker()
 {
     this.Options = CompareFoldersOptions.CompareLastWriteTime | CompareFoldersOptions.CompareAttributes;
     this.FStoredProgress = -1;
 }
        private string Write200_CompareFoldersOptions(CompareFoldersOptions v)
        {
            switch (v)
            {
                case CompareFoldersOptions.CompareContentAsync:
                    return "CompareContentAsync";

                case CompareFoldersOptions.AutoCompareContentAsync:
                    return "AutoCompareContentAsync";

                case CompareFoldersOptions.CompareAttributes:
                    return "CompareAttributes";

                case CompareFoldersOptions.CompareLastWriteTime:
                    return "CompareLastWriteTime";

                case CompareFoldersOptions.CompareSize:
                    return "CompareSize";

                case CompareFoldersOptions.CompareContent:
                    return "CompareContent";
            }
            return XmlSerializationWriter.FromEnum((long) v, new string[] { "CompareAttributes", "CompareLastWriteTime", "CompareSize", "CompareContent", "CompareContentAsync", "AutoCompareContentAsync" }, new long[] { 1L, 2L, 4L, 8L, 0x10L, 0x20L }, "Nomad.Workers.CompareFoldersOptions");
        }