public async Task SetCurrentPathAsync(string CurrentPath)
        {
            this.CurrentPath = CurrentPath;

            PathConfiguration Config = await SQLite.Current.GetPathConfiguration(CurrentPath).ConfigureAwait(true);

            ViewModeIndex = Config.DisplayModeIndex.GetValueOrDefault();
        }
Exemple #2
0
        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));
            }
        }
Exemple #4
0
        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));
            }
        }
Exemple #5
0
        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);
                }
            }
        }
Exemple #6
0
        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");
                }
            });
Exemple #7
0
        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));
            }
        }