From 92374fcd7bc6f10d636f6a7e3d2c1ab3e260a702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= Date: Mon, 11 Mar 2024 21:35:11 +0100 Subject: [PATCH] Console icons --- .../Services/IIconProvider.cs | 8 + .../FileTime.ConsoleUI.App/MainWindow.cs | 22 +- .../Services/NerdFontIconProvider.cs | 31 + .../Services/NerdFontIconProvider_Icons.cs | 114 +++ .../Services/NerdFontIconProvider_Maps.cs | 678 ++++++++++++++++++ .../FileTime.ConsoleUI.App/Startup.cs | 1 + .../IconProviders/MaterialIconProvider.cs | 1 - 7 files changed, 851 insertions(+), 4 deletions(-) create mode 100644 src/ConsoleApp/FileTime.ConsoleUI.App.Abstractions/Services/IIconProvider.cs create mode 100644 src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider.cs create mode 100644 src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider_Icons.cs create mode 100644 src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider_Maps.cs diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App.Abstractions/Services/IIconProvider.cs b/src/ConsoleApp/FileTime.ConsoleUI.App.Abstractions/Services/IIconProvider.cs new file mode 100644 index 0000000..7967b93 --- /dev/null +++ b/src/ConsoleApp/FileTime.ConsoleUI.App.Abstractions/Services/IIconProvider.cs @@ -0,0 +1,8 @@ +using FileTime.Core.Models; + +namespace FileTime.ConsoleUI.App.Services; + +public interface IIconProvider +{ + string GetImage(IItem? item); +} \ No newline at end of file diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs index 7ca85b7..bde95fa 100644 --- a/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs @@ -3,6 +3,7 @@ using FileTime.App.Core.Models.Enums; using FileTime.App.Core.ViewModels; using FileTime.ConsoleUI.App.Configuration; using FileTime.ConsoleUI.App.Controls; +using FileTime.ConsoleUI.App.Services; using FileTime.ConsoleUI.App.Styling; using FileTime.Core.Enums; using FileTime.Core.Models; @@ -39,6 +40,7 @@ public class MainWindow private readonly Dialogs _dialogs; private readonly Timeline _timeline; private readonly ItemPreviews _itemPreviews; + private readonly IIconProvider _iconProvider; private readonly IOptions _consoleApplicationConfiguration; private readonly Lazy _root; @@ -51,6 +53,7 @@ public class MainWindow Dialogs dialogs, Timeline timeline, ItemPreviews itemPreviews, + IIconProvider iconProvider, IOptions consoleApplicationConfiguration) { _rootViewModel = rootViewModel; @@ -61,6 +64,7 @@ public class MainWindow _dialogs = dialogs; _timeline = timeline; _itemPreviews = itemPreviews; + _iconProvider = iconProvider; _consoleApplicationConfiguration = consoleApplicationConfiguration; _root = new Lazy(Initialize); } @@ -540,9 +544,21 @@ public class MainWindow new Grid { Margin = "1 0 1 0", - ColumnDefinitionsObject = "* Auto", + ColumnDefinitionsObject = "2 * Auto", ChildInitializer = { + new TextBlock() + { + AsciiOnly = false + } + .Setup(t => + { + t.Bind( + t, + dc => dc == null ? string.Empty : _iconProvider.GetImage(dc.BaseItem), + tb => tb.Text + ); + }), new TextBlock() .Setup(t => { @@ -551,11 +567,11 @@ public class MainWindow dc => dc == null ? string.Empty : dc.DisplayNameText, tb => tb.Text ); - }), + }).WithExtension(new GridPositionExtension(1, 0)), new StackPanel { Orientation = Orientation.Horizontal, - Extensions = {new GridPositionExtension(1, 0)}, + Extensions = {new GridPositionExtension(2, 0)}, ChildInitializer = { new TextBlock() diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider.cs new file mode 100644 index 0000000..ccefd4d --- /dev/null +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider.cs @@ -0,0 +1,31 @@ +using FileTime.Core.Models; + +namespace FileTime.ConsoleUI.App.Services; + +public partial class NerdFontIconProvider : IIconProvider +{ + private const string _fileIcon = "\uf15b"; //"\uea7b" + + public string GetImage(IItem? item) + => item switch + { + IContainer container => GetContainerImage(container), + IElement element => GetElementImage(element), + _ => _fileIcon + }; + private string GetContainerImage(IContainer container) + { + if (_directoryIcons.TryGetValue(container.Name, out var icon)) + return icon; + return "\uf07b"; + } + + private string GetElementImage(IElement element) + { + if (_fileNameIcons.TryGetValue(element.Name, out var icon)) + return icon; + if (_fileExtensionIcons.TryGetValue(element.Name.Split('.').LastOrDefault() ?? "", out icon)) + return icon; + return _fileIcon; + } +} \ No newline at end of file diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider_Icons.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider_Icons.cs new file mode 100644 index 0000000..bbb3bd7 --- /dev/null +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider_Icons.cs @@ -0,0 +1,114 @@ +namespace FileTime.ConsoleUI.App.Services; + +partial class NerdFontIconProvider { + private const string AUDIO = "\uf001"; //  + private const string BINARY = "\ueae8"; //  + private const string BOOK = "\ue28b"; //  + private const string CALENDAR = "\ueab0"; //  + private const string CLOCK = "\uf43a"; //  + private const string COMPRESSED = "\uf410"; //  + private const string CONFIG = "\ue615"; //  + private const string CSS3 = "\ue749"; //  + private const string DATABASE = "\uf1c0"; //  + private const string DIFF = "\uf440"; //  + private const string DISK_IMAGE = "\ue271"; //  + private const string DOCKER = "\ue650"; //  + private const string DOCUMENT = "\uf1c2"; //  + private const string DOWNLOAD = "\udb80\uddda"; // 󰇚 + private const string EMACS = "\ue632"; //  + private const string ESLINT = "\ue655"; //  + private const string FILE = "\uf15b"; //  + private const string FILE_3D = "\udb80\udda7"; // 󰆧 + private const string FILE_OUTLINE = "\uf016"; //  + private const string FOLDER = "\ue5ff"; //  + private const string FOLDER_CONFIG = "\ue5fc"; //  + private const string FOLDER_GIT = "\ue5fb"; //  + private const string FOLDER_GITHUB = "\ue5fd"; //  + private const string FOLDER_HIDDEN = "\udb85\udf9e"; // 󱞞 + private const string FOLDER_KEY = "\udb82\udcac"; // 󰢬 + private const string FOLDER_NPM = "\ue5fa"; //  + private const string FOLDER_OPEN = "\uf115"; //  + private const string FONT = "\uf031"; //  + private const string GIST_SECRET = "\ueafa"; //  + private const string GIT = "\uf1d3"; //  + private const string GODOT = "\ue65f"; //  + private const string GRADLE = "\ue660"; //  + private const string GRAPHQL = "\ue662"; //  + private const string GRUNT = "\ue611"; //  + private const string GULP = "\ue610"; //  + private const string HTML5 = "\uf13b"; //  + private const string IMAGE = "\uf1c5"; //  + private const string INTELLIJ = "\ue7b5"; //  + private const string JSON = "\ue60b"; //  + private const string KEY = "\ueb11"; //  + private const string KEYPASS = "\uf23e"; //  + private const string LANG_ASSEMBLY = "\ue637"; //  + private const string LANG_C = "\ue61e"; //  + private const string LANG_CPP = "\ue61d"; //  + private const string LANG_CSHARP = "\udb80\udf1b"; // 󰌛 + private const string LANG_D = "\ue7af"; //  + private const string LANG_ELIXIR = "\ue62d"; //  + private const string LANG_FORTRAN = "\udb84\ude1a"; // 󱈚 + private const string LANG_FSHARP = "\ue7a7"; //  + private const string LANG_GO = "\ue65e"; //  + private const string LANG_GROOVY = "\ue775"; //  + private const string LANG_HASKELL = "\ue777"; //  + private const string LANG_JAVA = "\ue256"; //  + private const string LANG_JAVASCRIPT = "\ue74e"; //  + private const string LANG_KOTLIN = "\ue634"; //  + private const string LANG_NIM = "\ue677"; //  + private const string LANG_OCAML = "\ue67a"; //  + private const string LANG_PERL = "\ue67e"; //  + private const string LANG_PHP = "\ue73d"; //  + private const string LANG_PYTHON = "\ue606"; //  + private const string LANG_R = "\ue68a"; //  + private const string LANG_RUBY = "\ue21e"; //  + private const string LANG_RUBYRAILS = "\ue73b"; //  + private const string LANG_RUST = "\ue68b"; //  + private const string LANG_SASS = "\ue603"; //  + private const string LANG_STYLUS = "\ue600"; //  + private const string LANG_TEX = "\ue69b"; //  + private const string LANG_TYPESCRIPT = "\ue628"; //  + private const string LANG_V = "\ue6ac"; //  + private const string LIBRARY = "\ueb9c"; //  + private const string LICENSE = "\uf02d"; //  + private const string LOCK = "\uf023"; //  + private const string MAKE = "\ue673"; //  + private const string MARKDOWN = "\uf48a"; //  + private const string MUSTACHE = "\ue60f"; //  + private const string NODEJS = "\ue718"; //  + private const string NPM = "\ue71e"; //  + private const string OS_ANDROID = "\ue70e"; //  + private const string OS_APPLE = "\uf179"; //  + private const string OS_LINUX = "\uf17c"; //  + private const string OS_WINDOWS = "\uf17a"; //  + private const string OS_WINDOWS_CMD = "\uebc4"; //  + private const string PLAYLIST = "\udb83\udcb9"; // 󰲹 + private const string POWERSHELL = "\uebc7"; //  + private const string PRIVATE_KEY = "\udb80\udf06"; // 󰌆 + private const string PUBLIC_KEY = "\udb83\uddd6"; // 󰷖 + private const string RAZOR = "\uf1fa"; //  + private const string REACT = "\ue7ba"; //  + private const string README = "\udb80\udcba"; // 󰂺 + private const string SHEET = "\uf1c3"; //  + private const string SHELL = "\udb84\udd83"; // 󱆃 + private const string SHELL_CMD = "\uf489"; //  + private const string SHIELD_CHECK = "\udb81\udd65"; // 󰕥 + private const string SHIELD_KEY = "\udb82\udfc4"; // 󰯄 + private const string SHIELD_LOCK = "\udb82\udd9d"; // 󰦝 + private const string SIGNED_FILE = "\udb86\uddc3"; // 󱧃 + private const string SLIDE = "\uf1c4"; //  + private const string SUBLIME = "\ue7aa"; //  + private const string SUBTITLE = "\udb82\ude16"; // 󰨖 + private const string TERRAFORM = "\udb84\udc62"; // 󱁢 + private const string TEXT = "\uf15c"; //  + //private const string TYPST = "\u1D42D"; // 𝐭 + private const string UNITY = "\ue721"; //  + private const string VECTOR = "\udb81\udd59"; // 󰕙 + private const string VIDEO = "\uf03d"; //  + private const string VIM = "\ue7c5"; //  + private const string WRENCH = "\uf0ad"; //  + private const string XML = "\udb81\uddc0"; // 󰗀 + private const string YAML = "\ue6a8"; //  + private const string YARN = "\ue6a7"; //  +} \ No newline at end of file diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider_Maps.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider_Maps.cs new file mode 100644 index 0000000..f9d836a --- /dev/null +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/Services/NerdFontIconProvider_Maps.cs @@ -0,0 +1,678 @@ +namespace FileTime.ConsoleUI.App.Services; + +public partial class NerdFontIconProvider +{ + private Dictionary _directoryIcons = new() + { + {".config" , FOLDER_CONFIG}, //  + {".git" , FOLDER_GIT}, //  + {".github" ,FOLDER_GITHUB}, //  + {".npm" ,FOLDER_NPM}, //  + {".ssh" ,FOLDER_KEY}, // 󰢬 + {".Trash" , "\uf1f8"}, //  + {"config" , FOLDER_CONFIG}, //  + {"Contacts" , "\udb80\ude4c"}, // 󰉌 + {"cron.d" , FOLDER_CONFIG}, //  + {"cron.daily" , FOLDER_CONFIG}, //  + {"cron.hourly" , FOLDER_CONFIG}, //  + {"cron.monthly" , FOLDER_CONFIG}, //  + {"cron.weekly" , FOLDER_CONFIG}, //  + {"Desktop" , "\uf108"}, //  + {"Downloads" , "\udb80\ude4d"}, // 󰉍 + {"etc" , FOLDER_CONFIG}, //  + {"Favorites" , "\udb81\ude9d"}, // 󰚝 + {"hidden" ,FOLDER_HIDDEN}, // 󱞞 + {"home" , "\udb84\udcb5"}, // 󱂵 + {"include" , FOLDER_CONFIG}, //  + {"Mail" , "\udb80\uddf0"}, // 󰇰 + {"Movies" , "\udb83\udfce"}, // 󰿎 + {"Music" , "\udb84\udf59"}, // 󱍙 + {"node_modules" ,FOLDER_NPM}, //  + {"npm_cache" ,FOLDER_NPM}, //  + {"pam.d" ,FOLDER_KEY}, // 󰢬 + {"Pictures" , "\udb80\ude4f"}, // 󰉏 + {"ssh" ,FOLDER_KEY}, // 󰢬 + {"sudoers.d" ,FOLDER_KEY}, // 󰢬 + {"Videos" , "\uf03d"}, //  + {"xbps.d" , FOLDER_CONFIG}, //  + {"xorg.conf.d" , FOLDER_CONFIG}, //  + {"hi" ,BINARY}, //  + {"cabal" ,LANG_HASKELL}, //  + }; + + private Dictionary _fileNameIcons = new() + { + {".atom" ,"\ue764"}, //  + {".bashrc" ,SHELL}, // 󱆃 + {".bash_history" ,SHELL}, // 󱆃 + {".bash_logout" ,SHELL}, // 󱆃 + {".bash_profile" ,SHELL}, // 󱆃 + {".CFUserTextEncoding" ,OS_APPLE}, //  + {".clang-format" ,CONFIG}, //  + {".cshrc" ,SHELL}, // 󱆃 + {".DS_Store" ,OS_APPLE}, //  + {".emacs" ,EMACS}, //  + {".eslintrc.cjs" ,ESLINT}, //  + {".eslintrc.js" ,ESLINT}, //  + {".eslintrc.json" ,ESLINT}, //  + {".eslintrc.yaml" ,ESLINT}, //  + {".eslintrc.yml" ,ESLINT}, //  + {".gitattributes" ,GIT}, //  + {".gitconfig" ,GIT}, //  + {".gitignore" ,GIT}, //  + {".gitignore_global" ,GIT}, //  + {".gitlab-ci.yml" ,"\uf296"}, //  + {".gitmodules" ,GIT}, //  + {".htaccess" ,CONFIG}, //  + {".htpasswd" ,CONFIG}, //  + {".idea" ,INTELLIJ}, //  + {".ideavimrc" ,VIM}, //  + {".inputrc" ,CONFIG}, //  + {".kshrc" ,SHELL}, // 󱆃 + {".login" ,SHELL}, // 󱆃 + {".logout" ,SHELL}, // 󱆃 + {".mailmap" ,GIT}, //  + {".node_repl_history" ,NODEJS}, //  + {".npmignore" ,NPM}, //  + {".npmrc" ,NPM}, //  + {".profile" ,SHELL}, // 󱆃 + {".python_history" ,LANG_PYTHON}, //  + {".rustfmt.toml" ,LANG_RUST}, //  + {".rvm" ,LANG_RUBY}, //  + {".rvmrc" ,LANG_RUBY}, //  + {".tcshrc" ,SHELL}, // 󱆃 + {".viminfo" ,VIM}, //  + {".vimrc" ,VIM}, //  + {".Xauthority" ,CONFIG}, //  + {".xinitrc" ,CONFIG}, //  + {".Xresources" ,CONFIG}, //  + {".yarnrc" ,YARN}, //  + {".zlogin" ,SHELL}, // 󱆃 + {".zlogout" ,SHELL}, // 󱆃 + {".zprofile" ,SHELL}, // 󱆃 + {".zshenv" ,SHELL}, // 󱆃 + {".zshrc" ,SHELL}, // 󱆃 + {".zsh_history" ,SHELL}, // 󱆃 + {".zsh_sessions" ,SHELL}, // 󱆃 + {"._DS_Store" ,OS_APPLE}, //  + {"a.out" ,SHELL_CMD}, //  + {"authorized_keys" ,"\udb82\udcc0"}, // 󰣀 + {"bashrc" ,SHELL}, // 󱆃 + {"bspwmrc" ,CONFIG}, //  + {"build.gradle.kts" ,GRADLE}, //  + {"Cargo.lock" ,LANG_RUST}, //  + {"Cargo.toml" ,LANG_RUST}, //  + {"CMakeLists.txt" ,MAKE}, //  + {"composer.json" ,LANG_PHP}, //  + {"composer.lock" ,LANG_PHP}, //  + {"config" ,CONFIG}, //  + {"config.status" ,CONFIG}, //  + {"configure" ,WRENCH}, //  + {"configure.ac" ,CONFIG}, //  + {"configure.in" ,CONFIG}, //  + {"constraints.txt" ,LANG_PYTHON}, //  + {"COPYING" ,LICENSE}, //  + {"COPYRIGHT" ,LICENSE}, //  + {"crontab" ,CONFIG}, //  + {"crypttab" ,CONFIG}, //  + {"csh.cshrc" ,SHELL}, // 󱆃 + {"csh.login" ,SHELL}, // 󱆃 + {"csh.logout" ,SHELL}, // 󱆃 + {"docker-compose.yml" ,DOCKER}, //  + {"Dockerfile" ,DOCKER}, //  + {"compose.yaml" ,DOCKER}, //  + {"compose.yml" ,DOCKER}, //  + {"docker-compose.yaml" ,DOCKER}, //  + {"dune" ,LANG_OCAML}, //  + {"dune-project" ,WRENCH}, //  + {"Earthfile" ,"\uf0ac"}, //  + {"environment" ,CONFIG}, //  + {"GNUmakefile" ,MAKE}, //  + {"go.mod" ,LANG_GO}, //  + {"go.sum" ,LANG_GO}, //  + {"go.work" ,LANG_GO}, //  + {"gradle" ,GRADLE}, //  + {"gradle.properties" ,GRADLE}, //  + {"gradlew" ,GRADLE}, //  + {"gradlew.bat" ,GRADLE}, //  + {"group" ,LOCK}, //  + {"gruntfile.coffee" ,GRUNT}, //  + {"gruntfile.js" ,GRUNT}, //  + {"gruntfile.ls" ,GRUNT}, //  + {"gshadow" ,LOCK}, //  + {"gulpfile.coffee" ,GULP}, //  + {"gulpfile.js" ,GULP}, //  + {"gulpfile.ls" ,GULP}, //  + {"heroku.yml" ,"\ue77b"}, //  + {"hostname" ,CONFIG}, //  + {"id_dsa" ,PRIVATE_KEY}, // 󰌆 + {"id_ecdsa" ,PRIVATE_KEY}, // 󰌆 + {"id_ecdsa_sk" ,PRIVATE_KEY}, // 󰌆 + {"id_ed25519" ,PRIVATE_KEY}, // 󰌆 + {"id_ed25519_sk" ,PRIVATE_KEY}, // 󰌆 + {"id_rsa" ,PRIVATE_KEY}, // 󰌆 + {"inputrc" ,CONFIG}, //  + {"Jenkinsfile" ,"\ue66e"}, //  + {"jsconfig.json" ,LANG_JAVASCRIPT},//  + {"Justfile" ,WRENCH}, //  + {"known_hosts" ,"\udb82\udcc0"}, // 󰣀 + {"LICENCE" ,LICENSE}, //  + {"LICENCE.md" ,LICENSE}, //  + {"LICENCE.txt" ,LICENSE}, //  + {"LICENSE" ,LICENSE}, //  + {"LICENSE-APACHE" ,LICENSE}, //  + {"LICENSE-MIT" ,LICENSE}, //  + {"LICENSE.md" ,LICENSE}, //  + {"LICENSE.txt" ,LICENSE}, //  + {"localized" ,OS_APPLE}, //  + {"localtime" ,CLOCK}, //  + {"Makefile" ,MAKE}, //  + {"makefile" ,MAKE}, //  + {"Makefile.ac" ,MAKE}, //  + {"Makefile.am" ,MAKE}, //  + {"Makefile.in" ,MAKE}, //  + {"MANIFEST" ,LANG_PYTHON}, //  + {"MANIFEST.in" ,LANG_PYTHON}, //  + {"npm-shrinkwrap.json" ,NPM}, //  + {"npmrc" ,NPM}, //  + {"package-lock.json" ,NPM}, //  + {"package.json" ,NPM}, //  + {"passwd" ,LOCK}, //  + {"php.ini" ,LANG_PHP}, //  + {"PKGBUILD" ,"\uf303"}, //  + {"platformio.ini" ,"\ue682"}, //  + {"pom.xml" ,"\ue674"}, //  + {"Procfile" ,"\ue77b"}, //  + {"profile" ,SHELL}, // 󱆃 + {"pyproject.toml" ,LANG_PYTHON}, //  + {"Rakefile" ,LANG_RUBY}, //  + {"README" ,README}, // 󰂺 + {"release.toml" ,LANG_RUST}, //  + {"requirements.txt" ,LANG_PYTHON}, //  + {"robots.txt" ,"\udb81\udea9"}, // 󰚩 + {"rubydoc" ,LANG_RUBYRAILS}, //  + {"rvmrc" ,LANG_RUBY}, //  + {"settings.gradle.kts" ,GRADLE}, //  + {"shadow" ,LOCK}, //  + {"shells" ,CONFIG}, //  + {"sudoers" ,LOCK}, //  + {"timezone" ,CLOCK}, //  + {"tsconfig.json" ,LANG_TYPESCRIPT},//  + {"Vagrantfile" ,"\u2371"}, // ⍱ + {"webpack.config.js" ,"\udb81\udf2b"}, // 󰜫 + {"yarn.lock" ,YARN}, //  + {"zlogin" ,SHELL}, // 󱆃 + {"zlogout" ,SHELL}, // 󱆃 + {"zprofile" ,SHELL}, // 󱆃 + {"zshenv" ,SHELL}, // 󱆃 + {"zshrc" ,SHELL}, // 󱆃 + }; + + private Dictionary _fileExtensionIcons = new() + { + {"3mf" ,FILE_3D}, // 󰆧 + {"7z" ,COMPRESSED}, //  + {"a" ,OS_LINUX}, //  + {"acc" ,AUDIO}, //  + {"acf" ,"\uf1b6"}, //  + {"age" ,SHIELD_LOCK}, // 󰦝 + {"ai" ,"\ue7b4"}, //  + {"aif" ,AUDIO}, //  + {"aifc" ,AUDIO}, //  + {"aiff" ,AUDIO}, //  + {"alac" ,AUDIO}, //  + {"android" ,OS_ANDROID}, //  + {"ape" ,AUDIO}, //  + {"apk" ,OS_ANDROID}, //  + {"apple" ,OS_APPLE}, //  + {"ar" ,COMPRESSED}, //  + {"arj" ,COMPRESSED}, //  + {"arw" ,IMAGE}, //  + {"asc" ,SHIELD_LOCK}, // 󰦝 + {"asm" ,LANG_ASSEMBLY}, //  + {"asp" ,"\uf121"}, //  + {"avi" ,VIDEO}, //  + {"avif" ,IMAGE}, //  + {"avro" ,JSON}, //  + {"awk" ,SHELL_CMD}, //  + {"bash" ,SHELL_CMD}, //  + {"bat" ,OS_WINDOWS_CMD}, //  + {"bats" ,SHELL_CMD}, //  + {"bdf" ,FONT}, //  + {"bib" ,LANG_TEX}, //  + {"bin" ,BINARY}, //  + {"blend" ,"\udb80\udcab"}, // 󰂫 + {"bmp" ,IMAGE}, //  + {"br" ,COMPRESSED}, //  + {"bst" ,LANG_TEX}, //  + {"bundle" ,OS_APPLE}, //  + {"bz" ,COMPRESSED}, //  + {"bz2" ,COMPRESSED}, //  + {"bz3" ,COMPRESSED}, //  + {"c" ,LANG_C}, //  + {"c++" ,LANG_CPP}, //  + {"cab" ,OS_WINDOWS}, //  + {"cbr" ,IMAGE}, //  + {"cbz" ,IMAGE}, //  + {"cc" ,LANG_CPP}, //  + {"cert" ,GIST_SECRET}, //  + {"cfg" ,CONFIG}, //  + {"cjs" ,LANG_JAVASCRIPT}, //  + {"class" ,LANG_JAVA}, //  + {"clj" ,"\ue768"}, //  + {"cljs" ,"\ue76a"}, //  + {"cls" ,LANG_TEX}, //  + {"cmake" ,MAKE}, //  + {"cmd" ,OS_WINDOWS}, //  + {"coffee" ,"\uf0f4"}, //  + {"com" ,OS_WINDOWS_CMD}, //  + {"conf" ,CONFIG}, //  + {"config" ,CONFIG}, //  + {"cp" ,LANG_CPP}, //  + {"cpio" ,COMPRESSED}, //  + {"cpp" ,LANG_CPP}, //  + {"cr" ,"\ue62f"}, //  + {"cr2" ,IMAGE}, //  + {"crdownload" ,DOWNLOAD}, // 󰇚 + {"crt" ,GIST_SECRET}, //  + {"cs" ,LANG_CSHARP}, // 󰌛 + {"csh" ,SHELL_CMD}, //  + {"cshtml" ,RAZOR}, //  + {"csproj" ,LANG_CSHARP}, // 󰌛 + {"css" ,CSS3}, //  + {"csv" ,SHEET}, //  + {"csx" ,LANG_CSHARP}, // 󰌛 + {"cts" ,LANG_TYPESCRIPT}, //  + {"cu" ,"\ue64b"}, //  + {"cue" ,PLAYLIST}, // 󰲹 + {"cxx" ,LANG_CPP}, //  + {"d" ,LANG_D}, //  + {"dart" ,"\ue798"}, //  + {"db" ,DATABASE}, //  + {"deb" ,"\ue77d"}, //  + {"desktop" ,"\uebd1"}, //  + {"di" ,LANG_D}, //  + {"diff" ,DIFF}, //  + {"djv" ,DOCUMENT}, //  + {"djvu" ,DOCUMENT}, //  + {"dll" ,LIBRARY}, //  + {"dmg" ,DISK_IMAGE}, //  + {"doc" ,DOCUMENT}, //  + {"docx" ,DOCUMENT}, //  + {"dot" ,"\udb84\udc49"}, // 󱁉 + {"download" ,DOWNLOAD}, // 󰇚 + {"dockerfile" ,DOCKER}, //  + {"dockerignore" ,DOCKER}, //  + {"drawio" ,"\uebba"}, //  + {"dump" ,DATABASE}, //  + {"dvi" ,IMAGE}, //  + {"dylib" ,OS_APPLE}, //  + {"ebook" ,BOOK}, //  + {"ebuild" ,"\uf30d"}, //  + {"editorconfig" ,CONFIG}, //  + {"ejs" ,"\ue618"}, //  + {"el" ,EMACS}, //  + {"elc" ,EMACS}, //  + {"elf" ,BINARY}, //  + {"elm" ,"\ue62c"}, //  + {"eml" ,"\uf003"}, //  + {"env" ,"\uf462"}, //  + {"eot" ,FONT}, //  + {"eps" ,VECTOR}, // 󰕙 + {"epub" ,BOOK}, //  + {"erb" ,LANG_RUBYRAILS}, //  + {"erl" ,"\ue7b1"}, //  + {"ex" ,LANG_ELIXIR}, //  + {"exe" ,OS_WINDOWS_CMD}, //  + {"exs" ,LANG_ELIXIR}, //  + {"f" ,LANG_FORTRAN}, // 󱈚 + {"f90" ,LANG_FORTRAN}, // 󱈚 + {"fbx" ,FILE_3D}, // 󰆧 + {"fdmdownload" ,DOWNLOAD}, // 󰇚 + {"fish" ,SHELL_CMD}, //  + {"flac" ,AUDIO}, //  + {"flv" ,VIDEO}, //  + {"fnt" ,FONT}, //  + {"fodg" ,VECTOR}, // 󰕙 + {"fodp" ,SLIDE}, //  + {"fods" ,SHEET}, //  + {"fodt" ,DOCUMENT}, //  + {"fon" ,FONT}, //  + {"font" ,FONT}, //  + {"for" ,LANG_FORTRAN}, // 󱈚 + {"fs" ,LANG_FSHARP}, //  + {"fsi" ,LANG_FSHARP}, //  + {"fsproj" ,LANG_FSHARP}, //  + {"fsx" ,LANG_FSHARP}, //  + {"gcode" ,"\udb82\udef4"}, // 󰫴 + {"gd" ,GODOT}, //  + {"gdoc" ,DOCUMENT}, //  + {"gem" ,LANG_RUBY}, //  + {"gemfile" ,LANG_RUBY}, //  + {"gemspec" ,LANG_RUBY}, //  + {"gform" ,"\uf298"}, //  + {"gif" ,IMAGE}, //  + {"git" ,GIT}, //  + {"go" ,LANG_GO}, //  + {"godot" ,GODOT}, //  + {"gpg" ,SHIELD_LOCK}, // 󰦝 + {"gql" ,GRAPHQL}, //  + {"gradle" ,GRADLE}, //  + {"graphql" ,GRAPHQL}, //  + {"groovy" ,LANG_GROOVY}, //  + {"gsheet" ,SHEET}, //  + {"gslides" ,SLIDE}, //  + {"guardfile" ,LANG_RUBY}, //  + {"gv" ,"\udb84\udc49"}, // 󱁉 + {"gvy" ,LANG_GROOVY}, //  + {"gz" ,COMPRESSED}, //  + {"h" ,LANG_C}, //  + {"h++" ,LANG_CPP}, //  + {"h264" ,VIDEO}, //  + {"haml" ,"\ue664"}, //  + {"hbs" ,MUSTACHE}, //  + {"heic" ,IMAGE}, //  + {"heics" ,VIDEO}, //  + {"heif" ,IMAGE}, //  + {"hex" ,"\udb84\udea7"}, // 󱊧 + {"hh" ,LANG_CPP}, //  + {"hpp" ,LANG_CPP}, //  + {"hs" ,LANG_HASKELL}, //  + {"htm" ,HTML5}, //  + {"html" ,HTML5}, //  + {"hxx" ,LANG_CPP}, //  + {"ical" ,CALENDAR}, //  + {"icalendar" ,CALENDAR}, //  + {"ico" ,IMAGE}, //  + {"ics" ,CALENDAR}, //  + {"ifb" ,CALENDAR}, //  + {"image" ,DISK_IMAGE}, //  + {"img" ,DISK_IMAGE}, //  + {"iml" ,INTELLIJ}, //  + {"ini" ,CONFIG}, //  + {"inl" ,LANG_C}, //  + {"ipynb" ,"\ue678"}, //  + {"iso" ,DISK_IMAGE}, //  + {"j2c" ,IMAGE}, //  + {"j2k" ,IMAGE}, //  + {"jad" ,LANG_JAVA}, //  + {"jar" ,LANG_JAVA}, //  + {"java" ,LANG_JAVA}, //  + {"jfi" ,IMAGE}, //  + {"jfif" ,IMAGE}, //  + {"jif" ,IMAGE}, //  + {"jl" ,"\ue624"}, //  + {"jmd" ,MARKDOWN}, //  + {"jp2" ,IMAGE}, //  + {"jpe" ,IMAGE}, //  + {"jpeg" ,IMAGE}, //  + {"jpf" ,IMAGE}, //  + {"jpg" ,IMAGE}, //  + {"jpx" ,IMAGE}, //  + {"js" ,LANG_JAVASCRIPT}, //  + {"json" ,JSON}, //  + {"jsx" ,REACT}, //  + {"jxl" ,IMAGE}, //  + {"kbx" ,SHIELD_KEY}, // 󰯄 + {"kdb" ,KEYPASS}, //  + {"kdbx" ,KEYPASS}, //  + {"key" ,KEY}, //  + {"ko" ,OS_LINUX}, //  + {"ksh" ,SHELL_CMD}, //  + {"kt" ,LANG_KOTLIN}, //  + {"kts" ,LANG_KOTLIN}, //  + {"latex" ,LANG_TEX}, //  + {"ldb" ,DATABASE}, //  + {"less" ,"\ue758"}, //  + {"lhs" ,LANG_HASKELL}, //  + {"lib" ,LIBRARY}, //  + {"license" ,LICENSE}, //  + {"lisp" ,"\udb80\udd72"}, // 󰅲 + {"localized" ,OS_APPLE}, //  + {"lock" ,LOCK}, //  + {"log" ,"\uf18d"}, //  + {"ltx" ,LANG_TEX}, //  + {"lua" ,"\ue620"}, //  + {"lz" ,COMPRESSED}, //  + {"lz4" ,COMPRESSED}, //  + {"lzh" ,COMPRESSED}, //  + {"lzma" ,COMPRESSED}, //  + {"lzo" ,COMPRESSED}, //  + {"m" ,LANG_C}, //  + {"m2ts" ,VIDEO}, //  + {"m2v" ,VIDEO}, //  + {"m3u" ,PLAYLIST}, // 󰲹 + {"m3u8" ,PLAYLIST}, // 󰲹 + {"m4a" ,AUDIO}, //  + {"m4v" ,VIDEO}, //  + {"magnet" ,"\uf076"}, //  + {"markdown" ,MARKDOWN}, //  + {"md" ,MARKDOWN}, //  + {"md5" ,SHIELD_CHECK}, // 󰕥 + {"mdb" ,DATABASE}, //  + {"mid" ,"\udb82\udcf2"}, // 󰣲 + {"mjs" ,LANG_JAVASCRIPT}, //  + {"mk" ,MAKE}, //  + {"mka" ,AUDIO}, //  + {"mkd" ,MARKDOWN}, //  + {"mkv" ,VIDEO}, //  + {"ml" ,LANG_OCAML}, //  + {"mli" ,LANG_OCAML}, //  + {"mll" ,LANG_OCAML}, //  + {"mly" ,LANG_OCAML}, //  + {"mm" ,LANG_CPP}, //  + {"mobi" ,BOOK}, //  + {"mov" ,VIDEO}, //  + {"mp2" ,AUDIO}, //  + {"mp3" ,AUDIO}, //  + {"mp4" ,VIDEO}, //  + {"mpeg" ,VIDEO}, //  + {"mpg" ,VIDEO}, //  + {"msi" ,OS_WINDOWS}, //  + {"mts" ,LANG_TYPESCRIPT}, //  + {"mustache" ,MUSTACHE}, //  + {"nef" ,IMAGE}, //  + {"nim" ,LANG_NIM}, //  + {"nimble" ,LANG_NIM}, //  + {"nims" ,LANG_NIM}, //  + {"ninja" ,"\udb81\udf74"}, // 󰝴 + {"nix" ,"\uf313"}, //  + {"node" ,NODEJS}, //  + {"o" ,BINARY}, //  + {"obj" ,FILE_3D}, // 󰆧 + {"odf" ,"\udb81\udf84"}, // 󰞄 + {"odg" ,VECTOR}, // 󰕙 + {"odp" ,SLIDE}, //  + {"ods" ,SHEET}, //  + {"odt" ,DOCUMENT}, //  + {"ogg" ,AUDIO}, //  + {"ogm" ,VIDEO}, //  + {"ogv" ,VIDEO}, //  + {"opus" ,AUDIO}, //  + {"orf" ,IMAGE}, //  + {"org" ,"\ue633"}, //  + {"otf" ,FONT}, //  + {"out" ,"\ueb2c"}, //  + {"p12" ,KEY}, //  + {"par" ,COMPRESSED}, //  + {"part" ,DOWNLOAD}, // 󰇚 + {"patch" ,DIFF}, //  + {"pbm" ,IMAGE}, //  + {"pcm" ,AUDIO}, //  + {"pdf" ,"\uf1c1"}, //  + {"pem" ,KEY}, //  + {"pfx" ,KEY}, //  + {"pgm" ,IMAGE}, //  + {"phar" ,LANG_PHP}, //  + {"php" ,LANG_PHP}, //  + {"pkg" ,"\ueb29"}, //  + {"pl" ,LANG_PERL}, //  + {"plist" ,OS_APPLE}, //  + {"plx" ,LANG_PERL}, //  + {"ply" ,FILE_3D}, // 󰆧 + {"pm" ,LANG_PERL}, //  + {"png" ,IMAGE}, //  + {"pnm" ,IMAGE}, //  + {"pod" ,LANG_PERL}, //  + {"pp" ,"\ue631"}, //  + {"ppm" ,IMAGE}, //  + {"pps" ,SLIDE}, //  + {"ppsx" ,SLIDE}, //  + {"ppt" ,SLIDE}, //  + {"pptx" ,SLIDE}, //  + {"properties" ,JSON}, //  + {"prql" ,DATABASE}, //  + {"ps" ,VECTOR}, // 󰕙 + {"ps1" ,POWERSHELL}, //  + {"psd" ,"\ue7b8"}, //  + {"psd1" ,POWERSHELL}, //  + {"psf" ,FONT}, //  + {"psm1" ,POWERSHELL}, //  + {"pub" ,PUBLIC_KEY}, // 󰷖 + {"purs" ,"\ue630"}, //  + {"pxm" ,IMAGE}, //  + {"py" ,LANG_PYTHON}, //  + {"pyc" ,LANG_PYTHON}, //  + {"pyd" ,LANG_PYTHON}, //  + {"pyi" ,LANG_PYTHON}, //  + {"pyo" ,LANG_PYTHON}, //  + {"qcow" ,DISK_IMAGE}, //  + {"qcow2" ,DISK_IMAGE}, //  + {"r" ,LANG_R}, //  + {"rar" ,COMPRESSED}, //  + {"raw" ,IMAGE}, //  + {"razor" ,RAZOR}, //  + {"rb" ,LANG_RUBY}, //  + {"rdata" ,LANG_R}, //  + {"rdb" ,"\ue76d"}, //  + {"rdoc" ,MARKDOWN}, //  + {"rds" ,LANG_R}, //  + {"readme" ,README}, // 󰂺 + {"rlib" ,LANG_RUST}, //  + {"rmd" ,MARKDOWN}, //  + {"rmeta" ,LANG_RUST}, //  + {"rpm" ,"\ue7bb"}, //  + {"rs" ,LANG_RUST}, //  + {"rspec" ,LANG_RUBY}, //  + {"rspec_parallel" ,LANG_RUBY}, //  + {"rspec_status" ,LANG_RUBY}, //  + {"rss" ,"\uf09e"}, //  + {"rst" ,TEXT}, //  + {"rtf" ,TEXT}, //  + {"ru" ,LANG_RUBY}, //  + {"rubydoc" ,LANG_RUBYRAILS}, //  + {"s" ,LANG_ASSEMBLY}, //  + {"sal" ,"\udb85\udc7b"}, // 󱑻 + {"sass" ,LANG_SASS}, //  + {"sbt" ,SUBTITLE}, // 󰨖 + {"scala" ,"\ue737"}, //  + {"scss" ,LANG_SASS}, //  + {"service" ,"\ueba2"}, //  + {"sh" ,SHELL_CMD}, //  + {"sha1" ,SHIELD_CHECK}, // 󰕥 + {"sha224" ,SHIELD_CHECK}, // 󰕥 + {"sha256" ,SHIELD_CHECK}, // 󰕥 + {"sha384" ,SHIELD_CHECK}, // 󰕥 + {"sha512" ,SHIELD_CHECK}, // 󰕥 + {"shell" ,SHELL_CMD}, //  + {"shtml" ,HTML5}, //  + {"sig" ,SIGNED_FILE}, // 󱧃 + {"signature" ,SIGNED_FILE}, // 󱧃 + {"slim" ,LANG_RUBYRAILS}, //  + {"sln" ,"\ue70c"}, //  + {"so" ,OS_LINUX}, //  + {"sql" ,DATABASE}, //  + {"sqlite3" ,"\ue7c4"}, //  + {"sr" ,"\udb85\udc7b"}, // 󱑻 + {"srt" ,SUBTITLE}, // 󰨖 + {"ssa" ,SUBTITLE}, // 󰨖 + {"stl" ,FILE_3D}, // 󰆧 + {"sty" ,LANG_TEX}, //  + {"styl" ,LANG_STYLUS}, //  + {"stylus" ,LANG_STYLUS}, //  + {"sub" ,SUBTITLE}, // 󰨖 + {"sublime-build" ,SUBLIME}, //  + {"sublime-keymap" ,SUBLIME}, //  + {"sublime-menu" ,SUBLIME}, //  + {"sublime-options",SUBLIME}, //  + {"sublime-package",SUBLIME}, //  + {"sublime-project",SUBLIME}, //  + {"sublime-session",SUBLIME}, //  + {"sublime-settings",SUBLIME}, //  + {"sublime-snippet",SUBLIME}, //  + {"sublime-theme" ,SUBLIME}, //  + {"svelte" ,"\ue697"}, //  + {"svg" ,VECTOR}, // 󰕙 + {"swift" ,"\ue755"}, //  + {"t" ,LANG_PERL}, //  + {"tar" ,COMPRESSED}, //  + {"taz" ,COMPRESSED}, //  + {"tbz" ,COMPRESSED}, //  + {"tbz2" ,COMPRESSED}, //  + {"tc" ,DISK_IMAGE}, //  + {"tex" ,LANG_TEX}, //  + {"tf" ,TERRAFORM}, // 󱁢 + {"tfstate" ,TERRAFORM}, // 󱁢 + {"tfvars" ,TERRAFORM}, // 󱁢 + {"tgz" ,COMPRESSED}, //  + {"tif" ,IMAGE}, //  + {"tiff" ,IMAGE}, //  + {"tlz" ,COMPRESSED}, //  + {"tml" ,CONFIG}, //  + {"toml" ,CONFIG}, //  + {"torrent" ,"\ue275"}, //  + {"tres" ,GODOT}, //  + {"ts" ,LANG_TYPESCRIPT}, //  + {"tscn" ,GODOT}, //  + {"tsv" ,SHEET}, //  + {"tsx" ,REACT}, //  + {"ttc" ,FONT}, //  + {"ttf" ,FONT}, //  + {"twig" ,"\ue61c"}, //  + {"txt" ,TEXT}, //  + //{"typ" ,TYPST}, // 𝐭 + {"txz" ,COMPRESSED}, //  + {"tz" ,COMPRESSED}, //  + {"tzo" ,COMPRESSED}, //  + {"unity" ,UNITY}, //  + {"unity3d" ,UNITY}, //  + {"v" ,LANG_V}, //  + {"vdi" ,DISK_IMAGE}, //  + {"vhd" ,DISK_IMAGE}, //  + {"video" ,VIDEO}, //  + {"vim" ,VIM}, //  + {"vmdk" ,DISK_IMAGE}, //  + {"vob" ,VIDEO}, //  + {"vue" ,"\udb82\udc44"}, // 󰡄 + {"war" ,LANG_JAVA}, //  + {"wav" ,AUDIO}, //  + {"webm" ,VIDEO}, //  + {"webmanifest" ,JSON}, //  + {"webp" ,IMAGE}, //  + {"whl" ,LANG_PYTHON}, //  + {"windows" ,OS_WINDOWS}, //  + {"wma" ,AUDIO}, //  + {"wmv" ,VIDEO}, //  + {"woff" ,FONT}, //  + {"woff2" ,FONT}, //  + {"wv" ,AUDIO}, //  + {"xcf" ,IMAGE}, //  + {"xhtml" ,HTML5}, //  + {"xlr" ,SHEET}, //  + {"xls" ,SHEET}, //  + {"xlsm" ,SHEET}, //  + {"xlsx" ,SHEET}, //  + {"xml" ,XML}, // 󰗀 + {"xpm" ,IMAGE}, //  + {"xul" ,XML}, // 󰗀 + {"xz" ,COMPRESSED}, //  + {"yaml" ,YAML}, //  + {"yml" ,YAML}, //  + {"z" ,COMPRESSED}, //  + {"zig" ,"\ue6a9"}, //  + {"zip" ,COMPRESSED}, //  + {"zsh" ,SHELL_CMD}, //  + {"zsh-theme" ,SHELL}, // 󱆃 + {"zst" ,COMPRESSED}, //  + }; +} diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/Startup.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/Startup.cs index 40374a9..0815178 100644 --- a/src/ConsoleApp/FileTime.ConsoleUI.App/Startup.cs +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/Startup.cs @@ -42,6 +42,7 @@ public static class Startup services.TryAddSingleton(sp => sp.GetRequiredService()); services.AddSingleton(); services.AddSingleton(); + services.TryAddSingleton(); services.TryAddSingleton(); services.Configure(configuration); diff --git a/src/GuiApp/Avalonia/FileTime.GuiApp.App/IconProviders/MaterialIconProvider.cs b/src/GuiApp/Avalonia/FileTime.GuiApp.App/IconProviders/MaterialIconProvider.cs index deaa869..23a2b4c 100644 --- a/src/GuiApp/Avalonia/FileTime.GuiApp.App/IconProviders/MaterialIconProvider.cs +++ b/src/GuiApp/Avalonia/FileTime.GuiApp.App/IconProviders/MaterialIconProvider.cs @@ -1,7 +1,6 @@ using FileTime.Core.Models; using FileTime.GuiApp.App.Models; using FileTime.GuiApp.App.Places; -using FileTime.GuiApp.App.Services; using FileTime.Providers.Local; namespace FileTime.GuiApp.App.IconProviders;