示例#1
0
        private void CalculateCacheSizeAsync(Action <long, long> callback)
        {
            BeginOnThreadPool(() =>
            {
                _isCalculating = true;

                var length1 = 0L;
                var length2 = 0L;
                var files   = new List <TelegramFileInfo>();
                _settings.Clear();
                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    var fileNames = store.GetFileNames();

                    foreach (var fileName in fileNames)
                    {
                        if (fileName.StartsWith("staticmap"))
                        {
                        }

                        try
                        {
                            var fileInfo = new TelegramFileInfo {
                                Name = fileName
                            };
                            if (store.FileExists(fileName))
                            {
                                using (var file = new IsolatedStorageFileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, store))
                                {
                                    fileInfo.Length = file.Length;
                                    if (IsValidCacheFileName(fileName))
                                    {
                                        if (IsValidPhotoFileName(fileName))
                                        {
                                            _settings.PhotosLength += file.Length;
                                        }
                                        else if (IsValidMusicFileName(fileName))
                                        {
                                            _settings.MusicLength += file.Length;
                                        }
                                        else if (IsValidVideoFileName(fileName))
                                        {
                                            _settings.VideoLength += file.Length;
                                        }
                                        else if (IsValidVoiceMessageFileName(fileName))
                                        {
                                            _settings.VoiceMessagesLength += file.Length;
                                        }
                                        else if (IsValidDocumentFileName(fileName))
                                        {
                                            _settings.DocumentsLength += file.Length;
                                        }
                                        else if (IsValidOtherFileName(fileName))
                                        {
                                            _settings.OtherFilesLength += file.Length;
                                        }

                                        length1 += file.Length;
                                        fileInfo.IsValidCacheFileName = true;
                                    }
                                }
                            }
                            files.Add(fileInfo);
                        }
                        catch (Exception ex)
                        {
                            TLUtils.WriteException("CalculateCacheSizeAsync OpenFile: " + fileName, ex);
                        }
                    }

                    var directoryNames = store.GetDirectoryNames();
                    foreach (var fileName in directoryNames)
                    {
                        try
                        {
                            var fileInfo = new TelegramFileInfo {
                                Name = fileName, Length = -1
                            };
                            files.Add(fileInfo);
                        }
                        catch (Exception ex)
                        {
                            TLUtils.WriteException("CalculateCacheSizeAsync OpenFile: " + fileName, ex);
                        }
                    }

                    length2 = GetDatabaseLength(store, files);
                }

                _isCalculating = false;

                callback.SafeInvoke(length1, length2);

                BeginOnUIThread(() =>
                {
                    Files.Clear();
                    foreach (var file in files)
                    {
                        Files.Add(file);
                    }
                });
            });
        }