public void LoadImages()
		{
			Images.Clear();

			var bigImageFolder = new StorageDirectory(_root.RelativePathParts.Merge(ImageSource.BigImageFolderName));
			if (!bigImageFolder.ExistsLocal()) return;


			foreach (var file in bigImageFolder.GetLocalFiles().Where(file => file.Extension == ImageSource.ImageFileExtension))
			{
				var imageSource = ImageSource.FromFolder(_root, Path.GetFileNameWithoutExtension(file.LocalPath));
				if (imageSource != null)
					Images.Add(imageSource);
			}
		}
Beispiel #2
0
        public IEnumerable <StorageFile> GetLocalFiles(Func <string, bool> filter = null, bool recursive = false)
        {
            if (filter == null)
            {
                filter = item => true;
            }

            var items = new List <StorageFile>();

            if (recursive)
            {
                foreach (var directoryPath in Directory.GetDirectories(LocalPath))
                {
                    var subDirectory = new StorageDirectory(RelativePathParts.Merge(Path.GetFileName(directoryPath)));
                    items.AddRange(subDirectory.GetLocalFiles(filter, true));
                }
            }
            items.AddRange(Directory.GetFiles(LocalPath)
                           .Where(filePath => filter(Path.GetFileName(filePath)))
                           .Select(filePath => new StorageFile(RelativePathParts.Merge(Path.GetFileName(filePath)))));
            return(items);
        }
Beispiel #3
0
        private async Task Download(string targetPath)
        {
            if (FileStorageManager.Instance.DataState == DataActualityState.Updated ||
                FileStorageManager.Instance.UseLocalMode)
            {
                return;
            }

            var filter = new Func <string, bool>(
                itemName => itemName.StartsWith(String.Format("{0}.", Name), StringComparison.OrdinalIgnoreCase));

            var existedFiles     = (_parentFoder.ExistsLocal() ? _parentFoder.GetLocalFiles(filter).ToArray() : new StorageFile[] { }).ToList();
            var archivePartFiles = (await _parentFoder.GetRemoteFiles(filter)).ToList();

            var successfullyExtracted = true;

            do
            {
                if (existedFiles.Count != archivePartFiles.Count ||
                    !existedFiles.All(exsited => archivePartFiles.Any(actual => actual.Name == exsited.Name)) ||
                    !successfullyExtracted)
                {
                    existedFiles.ForEach(file =>
                    {
                        try
                        {
                            if (File.Exists(file.LocalPath))
                            {
                                File.Delete(file.LocalPath);
                            }
                        }
                        catch
                        {
                        }
                    });
                }

                var isOutdated = false;
                foreach (var archivePartFile in archivePartFiles)
                {
                    var fileOutDated = await archivePartFile.IsOutOfDate(true);

                    isOutdated |= fileOutDated;
                    if (fileOutDated)
                    {
                        await archivePartFile.Download(true);
                    }
                }
                if (isOutdated || !TargetExists(targetPath))
                {
                    var fileStreams = new List <FileStream>();
                    try
                    {
                        Cleanup(targetPath);
                        Int64 alreadyRead   = 0;
                        var   contentLenght = archivePartFiles.Sum(s => new FileInfo(s.LocalPath).Length);
                        fileStreams.AddRange(archivePartFiles.Select(s => s.LocalPath).Select(File.OpenRead).ToList());
                        using (var reader = RarReader.Open(fileStreams))
                        {
                            while (reader.MoveToNextEntry())
                            {
                                alreadyRead += reader.Entry.CompressedSize;
                                reader.WriteEntryToDirectory(targetPath, new ExtractionOptions {
                                    ExtractFullPath = true, Overwrite = true
                                });
                                FileStorageManager.Instance.ShowExtractionProgress(new FileProcessingProgressEventArgs(NameOnly, contentLenght,
                                                                                                                       alreadyRead));
                            }
                            FileStorageManager.Instance.ShowExtractionProgress(new FileProcessingProgressEventArgs(NameOnly, 100, 100));
                        }
                        successfullyExtracted = TargetExists(targetPath);
                    }
                    catch
                    {
                        successfullyExtracted = false;
                    }
                    finally
                    {
                        try
                        {
                            foreach (var fileStream in fileStreams)
                            {
                                fileStream.Close();
                                fileStream.Dispose();
                            }
                        }
                        catch { }
                        fileStreams.Clear();
                    }
                }
            } while (!successfullyExtracted);
        }
		public IEnumerable<StorageFile> GetLocalFiles(Func<string, bool> filter = null, bool recursive = false)
		{
			if (filter == null)
				filter = item => true;

			var items = new List<StorageFile>();
			if (recursive)
			{
				foreach (var directoryPath in Directory.GetDirectories(LocalPath))
				{
					var subDirectory = new StorageDirectory(RelativePathParts.Merge(Path.GetFileName(directoryPath)));
					items.AddRange(subDirectory.GetLocalFiles(filter, true));
				}
			}
			items.AddRange(Directory.GetFiles(LocalPath)
					.Where(filePath => filter(Path.GetFileName(filePath)))
					.Select(filePath => new StorageFile(RelativePathParts.Merge(Path.GetFileName(filePath)))));
			return items;
		}