예제 #1
0
        private static void RebuildAll(CancellationToken ct)
        {
            Bricks.Clear();

            using (var content = new LifContentWrapper(Source, SourcePath))
            {
                var primitiveFiles = content.GetPrimitiveFiles();
                var partIDs        = primitiveFiles.Select(x => x.PartID).Distinct();
                CurrentProgress = new ProgressInfo(partIDs.Count(), 0);

                foreach (int partID in partIDs)
                {
                    if (ct.IsCancellationRequested)
                    {
                        break;
                    }
                    try
                    {
                        var partInfo  = content.GetPart(partID);
                        var brickInfo = new BrickInfo(partInfo)
                        {
                            Validated  = true,
                            LastUpdate = DateTime.Now
                        };
                        Bricks.Add(brickInfo);
                    }
                    catch { }

                    CurrentProgress.TotalValidated++;
                }
            }
        }
예제 #2
0
        private static void DifferencialRebuild(CancellationToken ct)
        {
            foreach (var brickInfo in Bricks)
            {
                if (ChangedParts.Contains(brickInfo.PartId))
                {
                    brickInfo.Validated = false;
                }
            }

            CurrentProgress = new ProgressInfo(ChangedParts.Count, 0);

            foreach (int partID in ChangedParts)
            {
                if (ct.IsCancellationRequested)
                {
                    break;
                }

                var brickInfo = GetBrick(partID);

                PartWrapper partInfo = null;
                try
                {
                    partInfo = PartWrapper.GetPartFromDirectory(SourcePath, partID, false);
                }
                catch { }

                if (brickInfo != null && partInfo == null)
                {
                    Bricks.Remove(brickInfo);
                    continue;
                }
                else if (partInfo != null)
                {
                    if (brickInfo == null)
                    {
                        brickInfo = new BrickInfo(partInfo)
                        {
                            LastUpdate = DateTime.Now,
                            Validated  = true
                        };
                        Bricks.Add(brickInfo);
                    }
                    else
                    {
                        brickInfo.UpdateInfo(partInfo);
                        brickInfo.LastUpdate = DateTime.Now;
                        brickInfo.Validated  = true;
                    }
                }

                CurrentProgress.TotalValidated++;
            }

            ChangedParts.Clear();
        }
예제 #3
0
 public bool ContainsBrick(int id, out BrickInfo foundBrick)
 {
     foundBrick = Bricks.FirstOrDefault(x => x.PartId == id);
     return(foundBrick != null);
     //if (Dictionary.Count == 0)
     //{
     //    foundBrick = Bricks.FirstOrDefault(x => x.PartId == id);
     //    return foundBrick != null;
     //}
     //else
     //    return Dictionary.TryGetValue(id, out foundBrick);
 }