public async Task SetCurrentPathAsync(string CurrentPath) { this.CurrentPath = CurrentPath; PathConfiguration Config = await SQLite.Current.GetPathConfiguration(CurrentPath).ConfigureAwait(true); ViewModeIndex = Config.DisplayModeIndex.GetValueOrDefault(); }
public async Task SetPathConfigurationAsync(PathConfiguration Configuration) { using (SqliteCommand Command = new SqliteCommand { Connection = Connection }) { List <string> ValueLeft = new List <string>(4) { "Path" }; List <string> ValueRight = new List <string>(4) { "@Path" }; List <string> UpdatePart = new List <string>(4) { "Path = @Path" }; Command.Parameters.AddWithValue("@Path", Configuration.Path); if (Configuration.DisplayModeIndex.HasValue) { ValueLeft.Add("DisplayMode"); ValueRight.Add("@DisplayMode"); UpdatePart.Add("DisplayMode = @DisplayMode"); Command.Parameters.AddWithValue("@DisplayMode", Configuration.DisplayModeIndex); } if (Configuration.Target.HasValue) { ValueLeft.Add("SortColumn"); ValueRight.Add("@SortColumn"); UpdatePart.Add("SortColumn = @SortColumn"); Command.Parameters.AddWithValue("@SortColumn", Enum.GetName(typeof(SortTarget), Configuration.Target)); } if (Configuration.Direction.HasValue) { ValueLeft.Add("SortDirection"); ValueRight.Add("@SortDirection"); UpdatePart.Add("SortDirection = @SortDirection"); Command.Parameters.AddWithValue("@SortDirection", Enum.GetName(typeof(SortDirection), Configuration.Direction)); } Command.CommandText = $"Insert Into PathConfiguration ({string.Join(", ", ValueLeft)}) Values ({string.Join(", ", ValueRight)}) On Conflict (Path) Do Update Set {string.Join(", ", UpdatePart)} Where Path = @Path"; await Command.ExecuteNonQueryAsync().ConfigureAwait(false); } }
public static void SavePathGroupState(string Path, GroupTarget Target, GroupDirection Direction) { PathConfiguration CurrentConfiguration = SQLite.Current.GetPathConfiguration(Path); if (CurrentConfiguration.GroupTarget != Target || CurrentConfiguration.GroupDirection != Direction) { SQLite.Current.SetPathConfiguration(new PathConfiguration(Path, Target, Direction)); GroupStateChanged?.Invoke(null, new GroupStateChangedEventArgs(Path, Target, Direction)); } }
public static void SavePathSortState(string Path, SortTarget Target, SortDirection Direction) { if (Target == SortTarget.OriginPath || Target == SortTarget.Path) { throw new NotSupportedException("SortTarget.Path and SortTarget.OriginPath is not allowed in this method"); } PathConfiguration CurrentConfiguration = SQLite.Current.GetPathConfiguration(Path); if (CurrentConfiguration.SortTarget != Target || CurrentConfiguration.SortDirection != Direction) { SQLite.Current.SetPathConfiguration(new PathConfiguration(Path, Target, Direction)); SortStateChanged?.Invoke(null, new SortStateChangedEventArgs(Path, Target, Direction)); } }
public async Task SetPathConfiguration(PathConfiguration Configuration) { bool ShouldCreateNew = true; using (SqliteCommand Command = new SqliteCommand("Select Count(*) From PathConfiguration Where Path = @Path", Connection)) { Command.Parameters.AddWithValue("@Path", Configuration.Path); if (Convert.ToInt32(await Command.ExecuteScalarAsync().ConfigureAwait(false)) > 0) { ShouldCreateNew = false; } } StringBuilder Builder = new StringBuilder(); if (ShouldCreateNew) { Builder.Append($"Insert Into PathConfiguration (Path) Values ('{Configuration.Path}');"); } if (Configuration.DisplayModeIndex.HasValue) { Builder.Append($"Update PathConfiguration Set DisplayMode = {Configuration.DisplayModeIndex.Value} Where Path = '{Configuration.Path}';"); } if (Configuration.SortColumn.HasValue) { Builder.Append($"Update PathConfiguration Set SortColumn = '{Enum.GetName(typeof(SortTarget), Configuration.SortColumn)}' Where Path = '{Configuration.Path}';"); } if (Configuration.SortDirection.HasValue) { Builder.Append($"Update PathConfiguration Set SortDirection = '{Enum.GetName(typeof(SortDirection), Configuration.SortDirection)}' Where Path = '{Configuration.Path}';"); } if (!string.IsNullOrEmpty(Builder.ToString())) { using (SqliteCommand Command = new SqliteCommand(Builder.ToString(), Connection)) { await Command.ExecuteNonQueryAsync().ConfigureAwait(false); } } }
private async void Modified(string Path) { await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low, async() => { try { await Locker.WaitAsync(); try { if (CurrentLocation == System.IO.Path.GetDirectoryName(Path)) { if (await FileSystemStorageItemBase.OpenAsync(Path) is FileSystemStorageItemBase ModifiedItem) { PathConfiguration Config = await SQLite.Current.GetPathConfigurationAsync(CurrentLocation); if (CurrentCollection.FirstOrDefault((Item) => Item.Path.Equals(Path, StringComparison.OrdinalIgnoreCase)) is FileSystemStorageItemBase OldItem) { if (ModifiedItem.GetType() == OldItem.GetType()) { await OldItem.RefreshAsync(); } else { CurrentCollection.Remove(OldItem); if (!SettingControl.IsDisplayProtectedSystemItems || !ModifiedItem.IsSystemItem) { if ((ModifiedItem is IHiddenStorageItem && SettingControl.IsDisplayHiddenItem) || ModifiedItem is not IHiddenStorageItem) { if (CurrentCollection.Any()) { int Index = SortCollectionGenerator.SearchInsertLocation(CurrentCollection, ModifiedItem, Config.SortTarget.GetValueOrDefault(), Config.SortDirection.GetValueOrDefault()); if (Index >= 0) { CurrentCollection.Insert(Index, ModifiedItem); } else { CurrentCollection.Add(ModifiedItem); } } else { CurrentCollection.Add(ModifiedItem); } } } } } else if (ModifiedItem is not IHiddenStorageItem) { if (CurrentCollection.Any()) { int Index = SortCollectionGenerator.SearchInsertLocation(CurrentCollection, ModifiedItem, Config.SortTarget.GetValueOrDefault(), Config.SortDirection.GetValueOrDefault()); if (Index >= 0) { CurrentCollection.Insert(Index, ModifiedItem); } else { CurrentCollection.Add(ModifiedItem); } } else { CurrentCollection.Add(ModifiedItem); } } } } } finally { Locker.Release(); } } catch (Exception ex) { LogTracer.Log(ex, $"{ nameof(StorageAreaWatcher)}: Modify item in collection failed"); } });
public void SetPathConfiguration(PathConfiguration Configuration) { using SqliteCommand Command = new SqliteCommand { Connection = Connection }; List <string> ValueLeft = new List <string>(4) { "Path" }; List <string> ValueRight = new List <string>(4) { "@Path" }; List <string> UpdatePart = new List <string>(4) { "Path = @Path" }; Command.Parameters.AddWithValue("@Path", Configuration.Path); if (Configuration.DisplayModeIndex != null) { ValueLeft.Add("DisplayMode"); ValueRight.Add("@DisplayMode"); UpdatePart.Add("DisplayMode = @DisplayMode"); Command.Parameters.AddWithValue("@DisplayMode", Configuration.DisplayModeIndex); } if (Configuration.SortTarget != null) { ValueLeft.Add("SortColumn"); ValueRight.Add("@SortColumn"); UpdatePart.Add("SortColumn = @SortColumn"); Command.Parameters.AddWithValue("@SortColumn", Enum.GetName(typeof(SortTarget), Configuration.SortTarget)); } if (Configuration.SortDirection != null) { ValueLeft.Add("SortDirection"); ValueRight.Add("@SortDirection"); UpdatePart.Add("SortDirection = @SortDirection"); Command.Parameters.AddWithValue("@SortDirection", Enum.GetName(typeof(SortDirection), Configuration.SortDirection)); } if (Configuration.GroupTarget != null) { ValueLeft.Add("GroupColumn"); ValueRight.Add("@GroupColumn"); UpdatePart.Add("GroupColumn = @GroupColumn"); Command.Parameters.AddWithValue("@GroupColumn", Enum.GetName(typeof(GroupTarget), Configuration.GroupTarget)); } if (Configuration.GroupDirection != null) { ValueLeft.Add("GroupDirection"); ValueRight.Add("@GroupDirection"); UpdatePart.Add("GroupDirection = @GroupDirection"); Command.Parameters.AddWithValue("@GroupDirection", Enum.GetName(typeof(GroupDirection), Configuration.GroupDirection)); } Command.CommandText = $"Insert Into PathConfiguration ({string.Join(", ", ValueLeft)}) Values ({string.Join(", ", ValueRight)}) On Conflict (Path) Do Update Set {string.Join(", ", UpdatePart)} Where Path = @Path"; Command.ExecuteNonQuery(); }
public async Task <IEnumerable <FileSystemStorageItemBase> > GetFilterCollection() { List <FileSystemStorageItemBase> NameFilterResult = null; List <FileSystemStorageItemBase> ModTimeFilterResult = null; List <FileSystemStorageItemBase> TypeFilterResult = null; List <FileSystemStorageItemBase> SizeFilterResult = null; if (NameCondition != NameFilterCondition.None) { NameFilterResult = new List <FileSystemStorageItemBase>(); if (NameCondition.HasFlag(NameFilterCondition.Regex)) { try { NameFilterResult.AddRange(OriginCopy.Where((Item) => Regex.IsMatch(Item.Name, RegexExpression))); } catch { NameFilterResult.AddRange(OriginCopy); } } else { if (NameCondition.HasFlag(NameFilterCondition.From_A_To_G)) { NameFilterResult.AddRange(OriginCopy.Where((Item) => (Item.Name.FirstOrDefault() >= 65 && Item.Name.FirstOrDefault() <= 71) || (Item.Name.FirstOrDefault() >= 97 && Item.Name.FirstOrDefault() <= 103))); } if (NameCondition.HasFlag(NameFilterCondition.From_H_To_N)) { NameFilterResult.AddRange(OriginCopy.Where((Item) => (Item.Name.FirstOrDefault() >= 72 && Item.Name.FirstOrDefault() <= 78) || (Item.Name.FirstOrDefault() >= 104 && Item.Name.FirstOrDefault() <= 110))); } if (NameCondition.HasFlag(NameFilterCondition.From_O_To_T)) { NameFilterResult.AddRange(OriginCopy.Where((Item) => (Item.Name.FirstOrDefault() >= 79 && Item.Name.FirstOrDefault() <= 84) || (Item.Name.FirstOrDefault() >= 111 && Item.Name.FirstOrDefault() <= 116))); } if (NameCondition.HasFlag(NameFilterCondition.From_U_To_Z)) { NameFilterResult.AddRange(OriginCopy.Where((Item) => (Item.Name.FirstOrDefault() >= 85 && Item.Name.FirstOrDefault() <= 90) || (Item.Name.FirstOrDefault() >= 117 && Item.Name.FirstOrDefault() <= 112))); } if (NameCondition.HasFlag(NameFilterCondition.Other)) { NameFilterResult.AddRange(OriginCopy.Where((Item) => Item.Name.FirstOrDefault() < 65 || (Item.Name.FirstOrDefault() > 90 && Item.Name.FirstOrDefault() < 97) || Item.Name.FirstOrDefault() > 122)); } } } if (ModTimeCondition != ModTimeFilterCondition.None) { ModTimeFilterResult = new List <FileSystemStorageItemBase>(); if (ModTimeCondition.HasFlag(ModTimeFilterCondition.Range)) { ModTimeFilterResult.AddRange(OriginCopy.Where((Item) => Item.ModifiedTimeRaw >= ModTimeFrom && Item.ModifiedTimeRaw <= ModTimeTo)); } if (ModTimeCondition.HasFlag(ModTimeFilterCondition.One_Month_Ago)) { ModTimeFilterResult.AddRange(OriginCopy.Where((Item) => Item.ModifiedTimeRaw >= DateTimeOffset.Now.AddMonths(-1))); } if (ModTimeCondition.HasFlag(ModTimeFilterCondition.Three_Month_Ago)) { ModTimeFilterResult.AddRange(OriginCopy.Where((Item) => Item.ModifiedTimeRaw >= DateTimeOffset.Now.AddMonths(-3))); } if (ModTimeCondition.HasFlag(ModTimeFilterCondition.Long_Ago)) { ModTimeFilterResult.AddRange(OriginCopy.Where((Item) => Item.ModifiedTimeRaw < DateTimeOffset.Now.AddMonths(-3))); } } if (TypeFilter.Count > 0) { TypeFilterResult = OriginCopy.Where((Item) => TypeFilter.Contains(Item.Type.ToLower())).ToList(); } if (SizeCondition != SizeFilterCondition.None) { SizeFilterResult = new List <FileSystemStorageItemBase>(); if (SizeCondition.HasFlag(SizeFilterCondition.Smaller)) { SizeFilterResult.AddRange(OriginCopy.Where((Item) => Item.SizeRaw >> 10 < 1024)); } if (SizeCondition.HasFlag(SizeFilterCondition.Medium)) { SizeFilterResult.AddRange(OriginCopy.Where((Item) => Item.SizeRaw >> 10 >= 1024 && Item.SizeRaw >> 20 < 128)); } if (SizeCondition.HasFlag(SizeFilterCondition.Larger)) { SizeFilterResult.AddRange(OriginCopy.Where((Item) => Item.SizeRaw >> 20 >= 128 && Item.SizeRaw >> 20 < 1024)); } if (SizeCondition.HasFlag(SizeFilterCondition.Huge)) { SizeFilterResult.AddRange(OriginCopy.Where((Item) => Item.SizeRaw >> 30 >= 1)); } } IEnumerable <FileSystemStorageItemBase> FilterIntersct = null; if (NameFilterResult != null) { if (FilterIntersct == null) { FilterIntersct = NameFilterResult; } else { FilterIntersct = FilterIntersct.Intersect(NameFilterResult); } } if (ModTimeFilterResult != null) { if (FilterIntersct == null) { FilterIntersct = ModTimeFilterResult; } else { FilterIntersct = FilterIntersct.Intersect(ModTimeFilterResult); } } if (TypeFilterResult != null) { if (FilterIntersct == null) { FilterIntersct = TypeFilterResult; } else { FilterIntersct = FilterIntersct.Intersect(TypeFilterResult); } } if (SizeFilterResult != null) { if (FilterIntersct == null) { FilterIntersct = SizeFilterResult; } else { FilterIntersct = FilterIntersct.Intersect(SizeFilterResult); } } if (FilterIntersct != null && FilterIntersct.Any()) { PathConfiguration Config = await SQLite.Current.GetPathConfigurationAsync(CurrentPath); return(SortCollectionGenerator.GetSortedCollection(FilterIntersct, Config.Target.GetValueOrDefault(), Config.Direction.GetValueOrDefault())); } else { return(new List <FileSystemStorageItemBase>(0)); } }