From 896b58f542cfcd72e895b0b4b11a4a0497dbce8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= Date: Mon, 24 Jan 2022 10:32:09 +0100 Subject: [PATCH] Linux GUI preparations --- .vscode/launch.json | 84 +++++--- .vscode/tasks.json | 186 +++++++++++------- .../Models/RootDriveInfo.cs | 4 + .../ViewModels/MainPageViewModel.cs | 18 +- .../FileTime.Uno.Skia.Gtk.csproj | 6 + ...FileTime.Uno.Skia.Linux.FrameBuffer.csproj | 6 + .../LocalContentProvider.cs | 6 +- 7 files changed, 209 insertions(+), 101 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 549e521..4c66257 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,24 +1,62 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": ".NET Core Launch (console)", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build", - "program": "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/bin/Debug/net6.0/FileTime.ConsoleUI.dll", - "args": [], - "cwd": "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": ".NET Core Attach", - "type": "coreclr", - "request": "attach" - } - ] -} \ No newline at end of file + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/bin/Debug/net6.0/FileTime.ConsoleUI.dll", + "args": [], + "cwd": "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI", + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + }, + { + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "name": "Skia.GTK (Debug)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build-skia-gtk", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Gtk/bin/Debug/net6.0/FileTime.Uno.Skia.Gtk.dll", + "args": [], + "env": { + "DOTNET_MODIFIABLE_ASSEMBLIES": "debug" + }, + "cwd": "${workspaceFolder}/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Gtk", + // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console + "console": "internalConsole", + "stopAtEntry": false + }, + { + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "name": "Skia.Linux.FrameBuffer (Debug)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build-skia-gtk", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Linux.FrameBuffer/bin/Debug/net6.0/FileTime.Uno.Skia.Linux.FrameBuffer.dll", + "args": [], + "env": { + "DOTNET_MODIFIABLE_ASSEMBLIES": "debug" + }, + "cwd": "${workspaceFolder}/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Linux.FrameBuffer", + // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console + "console": "internalConsole", + "stopAtEntry": false + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json index cf3e964..af93506 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,76 +1,112 @@ { - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish singlefile linux", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", - "-p:PublishSingleFile=true", - "-c", - "Release", - "-r", - "linux-x64", - "--self-contained", - "true" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish singlefile windows", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", - "-p:PublishSingleFile=true", - "-c", - "Release", - "-r", - "win-x64", - "--self-contained", - "true" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - } - ] -} \ No newline at end of file + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish singlefile linux", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", + "-p:PublishSingleFile=true", + "-c", + "Release", + "-r", + "linux-x64", + "--self-contained", + "true" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish singlefile windows", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", + "-p:PublishSingleFile=true", + "-c", + "Release", + "-r", + "win-x64", + "--self-contained", + "true" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "${workspaceFolder}/src/ConsoleApp/FileTime.ConsoleUI/FileTime.ConsoleUI.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "build-skia-gtk", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Gtk/FileTime.Uno.Skia.Gtk.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish-skia-gtk", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/src//GuiApp/FileTime.Uno/FileTime.Uno.Skia.Gtk/FileTime.Uno.Skia.Gtk.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "build-skia-framebuffer", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Linux.FrameBuffer/FileTime.Uno.Skia.Linux.FrameBuffer.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + ] +} diff --git a/src/GuiApp/FileTime.Uno/FileTime.Uno.Shared/Models/RootDriveInfo.cs b/src/GuiApp/FileTime.Uno/FileTime.Uno.Shared/Models/RootDriveInfo.cs index d68622d..db9d525 100644 --- a/src/GuiApp/FileTime.Uno/FileTime.Uno.Shared/Models/RootDriveInfo.cs +++ b/src/GuiApp/FileTime.Uno/FileTime.Uno.Shared/Models/RootDriveInfo.cs @@ -16,6 +16,9 @@ namespace FileTime.Uno.Models [Property] private string _name; + [Property] + private string _fullName; + [Property] private long _size; @@ -35,6 +38,7 @@ namespace FileTime.Uno.Models _container = container; Name = container.Name; + FullName = container.FullName; Size = driveInfo.TotalSize; Free = driveInfo.AvailableFreeSpace; Used = driveInfo.TotalSize - driveInfo.AvailableFreeSpace; diff --git a/src/GuiApp/FileTime.Uno/FileTime.Uno.Shared/ViewModels/MainPageViewModel.cs b/src/GuiApp/FileTime.Uno/FileTime.Uno.Shared/ViewModels/MainPageViewModel.cs index 4d2018d..14f2f52 100644 --- a/src/GuiApp/FileTime.Uno/FileTime.Uno.Shared/ViewModels/MainPageViewModel.cs +++ b/src/GuiApp/FileTime.Uno/FileTime.Uno.Shared/ViewModels/MainPageViewModel.cs @@ -15,6 +15,7 @@ using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; +using System.Runtime.InteropServices; using System.Threading.Tasks; using Windows.System; @@ -81,9 +82,11 @@ namespace FileTime.Uno.ViewModels _tabs.Add(new TabControlViewModel(1, tabContainer)); var driveInfos = new List(); - foreach (var drive in DriveInfo.GetDrives()) + foreach (var drive in DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Fixed)) { - var container = (await LocalContentProvider.GetRootContainers()).FirstOrDefault(d => d.Name == drive.Name.TrimEnd(Path.DirectorySeparatorChar)); + var container = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) + ? await GetContainerForWindowsDrive(drive) + : await GetContainerForLinuxDrive(drive); if (container != null) { var driveInfo = new RootDriveInfo(drive, container); @@ -91,9 +94,20 @@ namespace FileTime.Uno.ViewModels } } + //TODO: order by RootDriveInfos = driveInfos; } + private async Task GetContainerForWindowsDrive(DriveInfo drive) + { + return (await LocalContentProvider.GetRootContainers()).FirstOrDefault(d => d.Name == drive.Name.TrimEnd(Path.DirectorySeparatorChar)); + } + + private async Task GetContainerForLinuxDrive(DriveInfo drive) + { + return await LocalContentProvider.GetByPath(drive.Name) as IContainer; + } + public async Task OpenContainer() { AppState.RapidTravelText = ""; diff --git a/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Gtk/FileTime.Uno.Skia.Gtk.csproj b/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Gtk/FileTime.Uno.Skia.Gtk.csproj index 08019da..dd11c7a 100644 --- a/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Gtk/FileTime.Uno.Skia.Gtk.csproj +++ b/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Gtk/FileTime.Uno.Skia.Gtk.csproj @@ -15,9 +15,15 @@ + + + + + + \ No newline at end of file diff --git a/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Linux.FrameBuffer/FileTime.Uno.Skia.Linux.FrameBuffer.csproj b/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Linux.FrameBuffer/FileTime.Uno.Skia.Linux.FrameBuffer.csproj index ed882a8..e9252cd 100644 --- a/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Linux.FrameBuffer/FileTime.Uno.Skia.Linux.FrameBuffer.csproj +++ b/src/GuiApp/FileTime.Uno/FileTime.Uno.Skia.Linux.FrameBuffer/FileTime.Uno.Skia.Linux.FrameBuffer.csproj @@ -15,9 +15,15 @@ + + + + + + \ No newline at end of file diff --git a/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs b/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs index f18d0d8..af61dcf 100644 --- a/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs +++ b/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs @@ -45,6 +45,9 @@ namespace FileTime.Providers.Local public async Task GetByPath(string path) { var pathParts = (IsCaseInsensitive ? path.ToLower() : path).TrimStart(Constants.SeparatorChar).Split(Constants.SeparatorChar); + + if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && pathParts.Length == 1 && pathParts[0] == "") return this; + var rootContainer = _rootContainers.FirstOrDefault(c => NormalizePath(c.Name) == NormalizePath(pathParts[0])); if (rootContainer == null) @@ -53,7 +56,8 @@ namespace FileTime.Providers.Local return null; } - return await rootContainer.GetByPath(string.Join(Constants.SeparatorChar, pathParts.Skip(1))); + var remainingPath = string.Join(Constants.SeparatorChar, pathParts.Skip(1)); + return remainingPath.Length == 0 ? rootContainer : await rootContainer.GetByPath(remainingPath); } public async Task Refresh() => await Refreshed.InvokeAsync(this, AsyncEventArgs.Empty);