diff --git a/.editorconfig b/.editorconfig
index 26fc913..2c28162 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -13,6 +13,11 @@ space_around_operators = true
csharp_new_line_before_open_brace = none
csharp_indent_case_contents = true
csharp_language_version = latest
+csharp_preserve_single_line_statements = true
+csharp_preserve_single_line_blocks = true
+indent_style = space
+indent_size = 2
+
[*.{xml,xaml,axaml}]
xml.attribute.new_line = true
diff --git a/.github/workflows/dotnet_innosetup.yml b/.github/workflows/dotnet_innosetup.yml
index 4c59608..e73f79d 100644
--- a/.github/workflows/dotnet_innosetup.yml
+++ b/.github/workflows/dotnet_innosetup.yml
@@ -27,8 +27,8 @@ jobs:
- name: Update version in iss file
run: |
- sed -i 's/#define AppVersion ".*"/#define AppVersion "${{ github.event.inputs.version }}"/' .winbuild/urlhandler.iss
-
+ sed -i 's/#define AppVersion ".*"/#define AppVersion "${{ github.event.inputs.version }}"/' .winbuild/ChemLocalLink.iss
+
- name: Restore dependencies
run: dotnet restore
- name: Build
@@ -38,12 +38,12 @@ jobs:
- name: Publish project
run: |
dotnet publish -p:PublishSingleFile=true --self-contained false
- ren "bin\Release\net8.0-windows10.0.17763.0\win-x64\publish\urlhandler.exe" "ChemLocalLink.exe"
+ ren "bin\Release\net8.0-windows10.0.17763.0\win-x64\publish\ChemLocalLink.exe" "ChemLocalLink.exe"
- name: Build Installer
uses: Minionguyjpro/Inno-Setup-Action@v1.2.2
with:
- path: .winbuild/urlhandler.iss
+ path: .winbuild/ChemLocalLink.iss
- name: Create GitHub Release
id: create_release
diff --git a/.gitignore b/.gitignore
index 2cb152c..434da32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,5 @@
bin/
obj/
.testapi/
-.config/
.vs/
.idea/
\ No newline at end of file
diff --git a/.unixbuild/DEBREATE.dbp b/.unixbuild/DEBREATE.dbp
deleted file mode 100644
index 1d88e2f..0000000
--- a/.unixbuild/DEBREATE.dbp
+++ /dev/null
@@ -1,143 +0,0 @@
-[DEBREATE-0.8-dev9]
-<>
-Package: ChemLocalLink
-Version: 0.3
-Maintainer: mekkyz
-Section: utils
-Homepage: https://www.scc.kit.edu/
-Architecture: amd64
-Priority: optional
-Pre-Depends: dotnet8 (>=8.0.4)
-Description: ChemLocalLink
- ChemLocalLink is a cross-platform desktop application designed to manage and process URLs specifically tailored for Chemotion interfaces.
-<>
-<>
-1
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Base.dll -> Avalonia.Base.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Controls.dll -> Avalonia.Controls.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.DesignerSupport.dll -> Avalonia.DesignerSupport.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Desktop.dll -> Avalonia.Desktop.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Dialogs.dll -> Avalonia.Dialogs.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Fonts.Inter.dll -> Avalonia.Fonts.Inter.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.FreeDesktop.dll -> Avalonia.FreeDesktop.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Markup.Xaml.dll -> Avalonia.Markup.Xaml.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Markup.dll -> Avalonia.Markup.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Metal.dll -> Avalonia.Metal.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.MicroCom.dll -> Avalonia.MicroCom.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Native.dll -> Avalonia.Native.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.OpenGL.dll -> Avalonia.OpenGL.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Remote.Protocol.dll -> Avalonia.Remote.Protocol.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Skia.dll -> Avalonia.Skia.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Themes.Fluent.dll -> Avalonia.Themes.Fluent.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.Win32.dll -> Avalonia.Win32.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.X11.dll -> Avalonia.X11.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Avalonia.dll -> Avalonia.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/ColorTextBlock.Avalonia.dll -> ColorTextBlock.Avalonia.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/CommunityToolkit.Mvvm.dll -> CommunityToolkit.Mvvm.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/DesktopNotifications.Avalonia.dll -> DesktopNotifications.Avalonia.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/DesktopNotifications.FreeDesktop.dll -> DesktopNotifications.FreeDesktop.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/DesktopNotifications.Windows.dll -> DesktopNotifications.Windows.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/DesktopNotifications.dll -> DesktopNotifications.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/DialogHost.Avalonia.dll -> DialogHost.Avalonia.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/HarfBuzzSharp.dll -> HarfBuzzSharp.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Markdown.Avalonia.dll -> Markdown.Avalonia.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/MicroCom.Runtime.dll -> MicroCom.Runtime.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Microsoft.Toolkit.Uwp.Notifications.dll -> Microsoft.Toolkit.Uwp.Notifications.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Microsoft.Win32.SystemEvents.dll -> Microsoft.Win32.SystemEvents.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/MsBox.Avalonia.dll -> MsBox.Avalonia.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Projektanker.Icons.Avalonia.FontAwesome.dll -> Projektanker.Icons.Avalonia.FontAwesome.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Projektanker.Icons.Avalonia.dll -> Projektanker.Icons.Avalonia.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/RestSharp.dll -> RestSharp.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/SkiaSharp.dll -> SkiaSharp.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/System.Drawing.Common.dll -> System.Drawing.Common.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/System.IO.Pipelines.dll -> System.IO.Pipelines.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/System.Reactive.dll -> System.Reactive.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Tmds.DBus.Protocol.dll -> Tmds.DBus.Protocol.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/Tmds.DBus.dll -> Tmds.DBus.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/icon.ico -> icon.ico -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/libHarfBuzzSharp.so -> libHarfBuzzSharp.so -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/libSkiaSharp.so -> libSkiaSharp.so -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/logo.png -> logo.png -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/ChemLocalLink* -> ChemLocalLink -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/ChemLocalLink.deps.json -> ChemLocalLink.deps.json -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/ChemLocalLink.dll -> ChemLocalLink.dll -> /usr/lib
-/home/mostafa/Desktop/uh/ChemLocalLink/ChemLocalLink.runtimeconfig.json -> ChemLocalLink.runtimeconfig.json -> /usr/lib
-<>
-<>
-<>
-1
-
-<>
-<>
-1
-#!/bin/bash -e
-
-ln -fs "/usr/lib/ChemLocalLink" "/usr/bin/ChemLocalLink"
-
-PROTOCOL="chemotion"
-HANDLER_PATH="/usr/lib/ChemLocalLink"
-DESKTOP_FILE="/usr/share/applications/${PROTOCOL}-handler.desktop"
-
-sudo bash -c "cat << EOF > '$DESKTOP_FILE'
-[Desktop Entry]
-Type=Application
-Name=${PROTOCOL} Handler
-Exec=$HANDLER_PATH %u
-MimeType=x-scheme-handler/${PROTOCOL}
-NoDisplay=true
-EOF"
-
-sudo update-desktop-database "/usr/share/applications"
-
-echo "Protocol '${PROTOCOL}' has been associated with '${HANDLER_PATH}' system-wide."
-<>
-<>
-1
-#!/bin/bash -e
-
-rm -f "/usr/bin/ChemLocalLink"
-<>
-<>
-0
-<>
-<>
-<>
-<>DEFAULT<>
-
-<>
-<>
-MIT License
-
-Copyright (c) 2024 KIT Scientific Computing Center (SCC)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-<>
-<
>
\ No newline at end of file
diff --git a/.winbuild/urlhandler.iss b/.winbuild/ChemLocalLink.iss
similarity index 95%
rename from .winbuild/urlhandler.iss
rename to .winbuild/ChemLocalLink.iss
index 991b259..9fd3d3f 100644
--- a/.winbuild/urlhandler.iss
+++ b/.winbuild/ChemLocalLink.iss
@@ -2,7 +2,7 @@
#include "CodeDependencies.iss"
#define AppName "ChemLocalLink"
-#define AppVersion "1.0.2"
+#define AppVersion "2.0.0"
#define Protocol "chemotion"
[Setup]
@@ -13,7 +13,7 @@ AppPublisherURL=https://www.scc.kit.edu/
AppVersion={#AppVersion}
AppComments=ChemLocalLink
AppContact=SDM, SCC, KIT
-AppCopyright=Copyright (C) 2024 KIT Scientific Computing Center (SCC)
+AppCopyright=Copyright (C) 2025 KIT Scientific Computing Center (SCC)
DefaultDirName={commonpf64}\{#AppName}
DefaultGroupName={#AppName}
OutputDir=C:/app/build/.
diff --git a/.winbuild/urlhandler.reg b/.winbuild/ChemLocalLink.reg
similarity index 100%
rename from .winbuild/urlhandler.reg
rename to .winbuild/ChemLocalLink.reg
diff --git a/App.axaml b/App.axaml
index 5cdd37c..4ac9fa7 100644
--- a/App.axaml
+++ b/App.axaml
@@ -1,53 +1,90 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/App.axaml.cs b/App.axaml.cs
index 961eef6..bddf4fc 100644
--- a/App.axaml.cs
+++ b/App.axaml.cs
@@ -1,45 +1,70 @@
-using System;
+///
+/// Main application class
+///
+
+using System;
using System.Diagnostics;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
-using urlhandler.Helpers;
-using urlhandler.Views;
-using urlhandler.ViewModels;
+using ChemLocalLink.Services;
+using ChemLocalLink.Utilities;
+using ChemLocalLink.ViewModels;
+using ChemLocalLink.Views;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace ChemLocalLink;
-namespace urlhandler;
+public class App : Application
+{
+ private IServiceProvider? _serviceProvider;
-public class App : Application {
- public override void Initialize() {
+ public override void Initialize()
+ {
AvaloniaXamlLoader.Load(this);
}
- public override void OnFrameworkInitializationCompleted() {
- if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) {
- var mw = new MainWindow();
- WindowHelper.MainWindowViewModel = new MainWindowViewModel(mw, desktop.Args ?? []);
- mw.DataContext = WindowHelper.MainWindowViewModel;
+ public override void OnFrameworkInitializationCompleted()
+ {
+ if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+ {
+ // configure DI with the notification manager
+ var services = new ServiceCollection();
+ services.AddApplicationServices(Program.NotificationManager);
+ _serviceProvider = services.BuildServiceProvider();
+
+ var mw = new MainWindowView();
+ var viewModel = _serviceProvider.GetRequiredService();
+ var windowService = _serviceProvider.GetRequiredService();
+
+ viewModel.Initialize(mw, desktop.Args ?? []);
+
+ mw.DataContext = viewModel;
desktop.Startup += DesktopOnStartup;
desktop.MainWindow = mw;
desktop.MainWindow.DataContext = mw.DataContext;
- WindowHelper.MainWindow = mw;
}
base.OnFrameworkInitializationCompleted();
}
- private void DesktopOnStartup(object? sender, ControlledApplicationLifetimeStartupEventArgs e) {
+ private void DesktopOnStartup(object? sender, ControlledApplicationLifetimeStartupEventArgs e)
+ {
var currentProcess = Process.GetCurrentProcess();
- if (Process.GetProcessesByName("ChemLocalLink").Length > 0) {
+ if (Process.GetProcessesByName("ChemLocalLink").Length > 0)
+ {
var processes = Process.GetProcessesByName("ChemLocalLink");
- foreach (Process process in processes) {
- if (process.Id != currentProcess.Id) {
- try {
+ foreach (Process process in processes)
+ {
+ if (process.Id != currentProcess.Id)
+ {
+ try
+ {
process.Kill();
}
-
- catch (Exception) {
- // ignored
+ catch (Exception ex)
+ {
+ Debug.WriteLine($"Failed to kill process {process.Id}: {ex.Message}");
}
}
}
diff --git a/Assets/icon.ico b/Assets/icon.ico
index 6072984..ebdf17c 100644
Binary files a/Assets/icon.ico and b/Assets/icon.ico differ
diff --git a/Assets/icon.png b/Assets/icon.png
new file mode 100644
index 0000000..508c193
Binary files /dev/null and b/Assets/icon.png differ
diff --git a/Assets/logo.png b/Assets/logo.png
deleted file mode 100644
index 5474f61..0000000
Binary files a/Assets/logo.png and /dev/null differ
diff --git a/Behaviors/MenuItemBehavior.cs b/Behaviors/MenuItemBehavior.cs
deleted file mode 100644
index 63e4e8e..0000000
--- a/Behaviors/MenuItemBehavior.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using Avalonia;
-using Avalonia.Controls;
-using Avalonia.Xaml.Interactivity;
-using CommunityToolkit.Mvvm.Input;
-using urlhandler.ViewModels;
-
-namespace urlhandler.Behaviors;
-
-public class MenuItemBehavior : Behavior