Compare commits

...

30 Commits

Author SHA1 Message Date
ema
2721df459d Update changelog for 4.3.0 release
Some checks failed
build / build (push) Has been cancelled
build / publish (push) Has been cancelled
2025-12-10 00:24:26 +08:00
ema
85b1e9b024 Update NuGet package versions in plugin projects 2025-12-09 23:57:57 +08:00
ema
291ab79822 Remove AppVeyor badge and references from README
Eliminated the AppVeyor build badge and related nightly build reference from the README, reflecting a shift to GitHub Actions for CI and nightly builds.
2025-12-09 23:32:10 +08:00
ema
11961088f1 Update CI workflow and README badges
Renamed the MSBuild workflow to 'build' and updated actions/checkout to v4 in the workflow file. Added GitHub Actions badge to README and reordered platform badge for improved visibility.
2025-12-09 23:29:14 +08:00
ema
c5b4014fad Add Windows platform badge to README
A badge indicating Windows as the supported platform has been added to the README for clearer platform identification.
2025-12-09 23:23:23 +08:00
ema
7211c2ebdd Update PowerShell syntax colors in dark theme
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Changed the color values for Keywords2 and Keywords3 in the PowerShell.xshd dark theme file to use specific hex codes instead of named colors for improved consistency and appearance.
2025-12-05 13:40:57 +08:00
ema
76dfa34928 Update NuGet package versions in project files
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Upgraded several NuGet dependencies across multiple csproj files, including Microsoft.Web.WebView2, Google.Protobuf, MsgReader, bblanchon.PDFiumV8.Win32, and Lib.Harmony. This ensures compatibility with the latest features and bug fixes from upstream packages.
2025-11-26 01:07:28 +08:00
Copilot
bf7de3bd8e Add ShowInTaskbar setting to display window in taskbar (#1818) 2025-11-26 00:52:12 +08:00
Copilot
1adb7ce980 Add option to disable automatic update check at startup (#1819) 2025-11-26 00:45:15 +08:00
copilot-swe-agent[bot]
d7edd92204 Fix DOpus crash when QuickLook runs with different privilege level 2025-11-25 23:49:22 +08:00
Copilot
cbf3e566d9 Fix volume control exceeding limits during mouse wheel scroll (#1814)
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
* Fix mouse scroll volume adjustment by clamping value to valid range [0.0, 1.0]
2025-11-25 00:18:36 +08:00
ema
f41fb0a68e Fix warning ColorProfile reference in ImageMagickProvider
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
QuickLook\QuickLook.Plugin\QuickLook.Plugin.ImageViewer\AnimatedImage\Providers\ImageMagickProvider.cs(112,35,112,52): warning CS0618: 'ColorProfile.SRGB' is obsolete: 'This property will be removed in the next major release. Use ColorProfiles.SRGB instead.'

Revert "Fix wwarning ColorProfile reference in ImageMagickProvider"

This reverts commit 649fd3a892.

Reapply "Fix wwarning ColorProfile reference in ImageMagickProvider"

This reverts commit 5e9dea6af313ec03c40b1f4dcaa461643a02d4f2.
2025-11-21 00:38:01 +08:00
Copilot
1f96cf5745 Add Svelte syntax highlighting support (#1809) 2025-11-20 00:01:34 +08:00
ema
2e742461f2 Add 'file type blocked' translation to all languages
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Introduced the MW_FileBlocked key with appropriate translations for all supported languages in Translations.config. This enables consistent messaging when a blocked file type is encountered.
2025-11-17 05:33:03 +08:00
ema
dc3da38c34 Add blocked file type handling to viewer
Updates the InsvBlocker plugin to mark files as blocked and sets a blocked message in the viewer window. The viewer now displays a message for blocked file types instead of attempting to preview them.
2025-11-17 04:17:00 +08:00
Copilot
f24cbab72a Add plugin to block .insv files for Insta360Studio compatibility (#1803) 2025-11-17 03:46:41 +08:00
ema
17b374b2e9 Keep TextViewer compatible with VS2022 2025-11-17 03:00:29 +08:00
ema
9ebc030f8b Improve TextViewerPanel UI and usability
Enabled touch gesture support, disabled automatic hyperlink detection, and visually hid the line number separator. Added context menu items for copy and select all, installed a custom element generator for long lines, and integrated the search panel for enhanced text navigation.
2025-11-17 02:55:24 +08:00
ema
9bcf9905d5 Update NuGet package versions in project files
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Several .csproj files were updated to use newer versions of dependencies, including Newtonsoft.Json, Microsoft.Web.WebView2, Magick.NET-Q8-AnyCPU, Google.Protobuf, MsgReader, and bblanchon.PDFiumV8.Win32. This ensures compatibility with the latest features and bug fixes from these packages.
2025-10-30 02:42:30 +08:00
dependabot[bot]
65c832e430 Bump Magick.NET-Q8-AnyCPU from 14.8.2 to 14.9.0 (#1794)
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
---
updated-dependencies:
- dependency-name: Magick.NET-Q8-AnyCPU
  dependency-version: 14.9.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-29 21:26:05 +08:00
ema
5caaf749f7 Set _currentPath before file type check in View
Moved assignment of _currentPath to the start of the View method to ensure it is set before any file type-specific logic is executed. This improves consistency and prevents potential issues with path-dependent operations.
2025-10-29 21:25:30 +08:00
ema
d5655376f6 Add link to plugin installation instructions
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Added a reference to the wiki section on how to install or upgrade plugins to improve user guidance in the README.
2025-10-25 14:45:27 +08:00
ema
19af34ae51 Revert "Fix Desktop file selection by using consistent IsCursorActivated check"
This reverts commit 4bff62f4d8.
2025-10-25 14:28:25 +08:00
copilot-swe-agent[bot]
4bff62f4d8 Fix Desktop file selection by using consistent IsCursorActivated check
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
Co-authored-by: emako <24737061+emako@users.noreply.github.com>
2025-10-22 01:45:23 +08:00
ema
e0eb87bcc3 Add .slnx solution file
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-10-20 01:11:47 +08:00
ema
7146a2a220 Update changelog for 4.2.2 release
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-10-15 23:09:49 +08:00
ema
491f55b6a8 Update changelog for 4.2.1 release
Some checks failed
MSBuild / build (push) Has been cancelled
MSBuild / publish (push) Has been cancelled
2025-10-15 01:18:57 +08:00
ema
d25b7b32de Fix theme error in some theme-changable plugin #1507 2025-10-15 00:03:56 +08:00
ema
a887ca3014 Refactor SvgImagePanel.MimeTypes to use base class methods 2025-10-14 23:52:11 +08:00
ema
5d3fd85238 Fix theme error in MediaInfoViewer plugin #1775 2025-10-14 23:28:08 +08:00
33 changed files with 628 additions and 50 deletions

View File

@@ -1,6 +1,6 @@
# run a build for the latest version and upload the artifacts to a "latest" pre-release
name: MSBuild
name: build
on:
push:
@@ -26,7 +26,7 @@ jobs:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0

View File

@@ -1,3 +1,23 @@
## 4.3.0
- Add Svelte syntax highlighting support
- Add ShowInTaskbar setting to display window in taskbar [#1789](https://github.com/QL-Win/QuickLook/issues/1789)
- Add option to disable automatic update check at startup [#1801](https://github.com/QL-Win/QuickLook/issues/1801)
- Update PowerShell syntax colors in dark theme
- Improve TextViewerPanel UI and usability
- Fix DOpus crash when QuickLook runs with different privilege level [#1781](https://github.com/QL-Win/QuickLook/issues/1781)
- Fix volume control exceeding limits during mouse wheel scroll [#1813](https://github.com/QL-Win/QuickLook/issues/1813)
- Fix error in RTF file originating from version 4.2.1 [#1826](https://github.com/QL-Win/QuickLook/issues/1826)
## 4.2.2
- Fix version display issue [#1776](https://github.com/QL-Win/QuickLook/issues/1776)
## 4.2.1
- Fix theme error in MediaInfoViewer plugin [#1775](https://github.com/QL-Win/QuickLook/issues/1775)
- Fix theme error in any theme-changable plugin [#1507](https://github.com/QL-Win/QuickLook/issues/1507)
## 4.2.0
- Add built-in MediaInfoViewer plugin and support it in more menu

View File

@@ -30,7 +30,7 @@
HWND hMsgWnd;
HANDLE hGetResultEvent;
PCHAR pXmlBuffer;
PCHAR pXmlBuffer = nullptr;
void DOpus::GetSelected(PWCHAR buffer)
{
@@ -72,9 +72,12 @@ void DOpus::GetSelected(PWCHAR buffer)
WaitForSingleObject(hGetResultEvent, 2000);
ParseXmlBuffer(buffer);
delete[] pXmlBuffer;
if (pXmlBuffer != nullptr)
{
ParseXmlBuffer(buffer);
delete[] pXmlBuffer;
pXmlBuffer = nullptr;
}
}
void DOpus::ParseXmlBuffer(PWCHAR buffer)
@@ -88,6 +91,9 @@ void DOpus::ParseXmlBuffer(PWCHAR buffer)
* ...
*/
if (pXmlBuffer == nullptr)
return;
using namespace rapidxml;
xml_document<> doc;

View File

@@ -74,7 +74,7 @@
<Reference Include="Microsoft.CSharp" />
<PackageReference Include="WixToolset.Dtf.WindowsInstaller" Version="6.0.2" />
<PackageReference Include="SharpZipLib" Version="1.4.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="PureSharpCompress" Version="0.40.0" />
<PackageReference Include="QuickLook.ApkReader" Version="2.1.0" />
<PackageReference Include="QuickLook.DiscUtils" Version="1.0.0" />

View File

@@ -73,7 +73,7 @@
<ItemGroup>
<PackageReference Include="FreeTypeSharp" Version="3.0.1" />
<PackageReference Include="QuickLook.Typography.OpenFont" Version="1.0.1" />
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3405.78">
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3650.58">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@@ -61,7 +61,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3405.78">
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3650.58">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@@ -109,7 +109,7 @@ internal class ImageMagickProvider : AnimationProvider
{
if (mi.ColorSpace == ColorSpace.RGB || mi.ColorSpace == ColorSpace.sRGB || mi.ColorSpace == ColorSpace.scRGB)
{
mi.SetProfile(ColorProfile.SRGB);
mi.SetProfile(ColorProfiles.SRGB);
if (ContextObject.ColorProfileName != null)
mi.SetProfile(new ColorProfile(ContextObject.ColorProfileName)); // map to monitor color
}

View File

@@ -59,13 +59,13 @@
<PackageReference Include="QuickLook.ImageGlass.WebP" Version="1.4.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Magick.NET-Q8-AnyCPU" Version="14.8.2">
<PackageReference Include="Magick.NET-Q8-AnyCPU" Version="14.9.1">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3405.78">
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3650.58">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Google.Protobuf" Version="3.32.0">
<PackageReference Include="Google.Protobuf" Version="3.33.2">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="System.Memory" Version="4.6.3">

View File

@@ -186,24 +186,13 @@ public class SvgImagePanel : WebpagePanel, IWebImagePanel
return reader.ReadToEnd();
}
public static class MimeTypes
public new static class MimeTypes
{
public const string Html = "text/html";
public const string JavaScript = "application/javascript";
public const string Json = "application/json";
public const string Css = "text/css";
public const string Binary = "application/octet-stream";
public static string GetContentTypeHeader(string extension = null)
=> $"Content-Type: {WebpagePanel.MimeTypes.GetMimeType(extension)}";
public static string GetContentTypeHeader(string extension = null) => $"Content-Type: {GetMimeType(extension)}";
public static string GetMimeType(string extension = null) => extension?.ToLowerInvariant() switch
{
".js" => JavaScript, // Only handle known extensions from resources
".json" => Json,
".css" => Css,
".html" => Html,
_ => Binary,
};
public static string GetMimeType(string extension = null)
=> WebpagePanel.MimeTypes.GetMimeType(extension);
}
}

View File

@@ -0,0 +1,63 @@
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using QuickLook.Common.Plugin;
using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
namespace QuickLook.Plugin.InsvBlocker;
public class Plugin : IViewer
{
// Very high priority to ensure this plugin is checked before any other plugins
// This prevents QuickLook from handling .insv files, allowing Insta360Studio's QuickLook to handle them instead
public int Priority => int.MaxValue;
public void Init()
{
}
public bool CanHandle(string path)
{
// Match .insv files (Insta360 panoramic video files)
if (Directory.Exists(path))
return false;
return path.EndsWith(".insv", StringComparison.OrdinalIgnoreCase);
}
public void Prepare(string path, ContextObject context)
{
// Set Ignore to true to display "blocked" in the preview window
context.IsBlocked = true;
context.Title = $"[BLOCKED] {Path.GetFileName(path)}";
context.PreferredSize = new Size(400, 200);
}
public void View(string path, ContextObject context)
{
// This should not be called since Ignore is set to true in Prepare
// But if called, do nothing
}
public void Cleanup()
{
}
}

View File

@@ -0,0 +1,80 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>net462</TargetFramework>
<RootNamespace>QuickLook.Plugin.InsvBlocker</RootNamespace>
<AssemblyName>QuickLook.Plugin.InsvBlocker</AssemblyName>
<FileAlignment>512</FileAlignment>
<SignAssembly>false</SignAssembly>
<UseWPF>true</UseWPF>
<LangVersion>latest</LangVersion>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<ProjectGuid>{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}</ProjectGuid>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Build\Debug\QuickLook.Plugin\QuickLook.Plugin.InsvBlocker\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Build\Release\QuickLook.Plugin\QuickLook.Plugin.InsvBlocker\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Build\Debug\QuickLook.Plugin\QuickLook.Plugin.InsvBlocker\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Build\Release\QuickLook.Plugin\QuickLook.Plugin.InsvBlocker\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="WindowsBase" />
<Reference Include="System.ComponentModel.Composition" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\QuickLook.Common\QuickLook.Common.csproj">
<Project>{85FDD6BA-871D-46C8-BD64-F6BB0CB5EA95}</Project>
<Name>QuickLook.Common</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\GitVersion.cs">
<Link>Properties\GitVersion.cs</Link>
</Compile>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,26 @@
# QuickLook.Plugin.InsvBlocker
This plugin prevents QuickLook from handling `.insv` files (Insta360 panoramic video files).
## Purpose
Insta360Studio has its own QuickLook application with the same name and activation method (pressing spacebar). When both applications are installed, pressing space on `.insv` files would cause both QuickLook windows to appear, creating a conflict.
This plugin solves that issue by having QuickLook claim the file (via high priority) but immediately close without displaying anything, allowing Insta360Studio's QuickLook to handle the file instead.
## Implementation
- **Priority**: `int.MaxValue` (highest priority, checked before all other plugins)
- **Behavior**:
- Returns `true` for `CanHandle()` on files with `.insv` extension
- Sets minimal window size (1x1 pixels) in `Prepare()`
- Closes the window immediately in `View()` using `DispatcherPriority.Send`
## Technical Details
The plugin prevents the QuickLook window from becoming visible by:
1. Matching `.insv` files with highest priority
2. Setting a minimal window size to reduce visual impact if window briefly appears
3. Closing the window immediately after content is set, before it becomes visible to the user
This approach ensures that Insta360Studio's QuickLook can handle the file without interference.

View File

@@ -55,7 +55,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MsgReader" Version="6.0.4" />
<PackageReference Include="MsgReader" Version="6.0.6" />
</ItemGroup>
<ItemGroup>

View File

@@ -61,7 +61,7 @@
<ItemGroup>
<PackageReference Include="UTF.Unknown" Version="2.6.0" />
<Reference Include="WindowsBase" />
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3405.78">
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3650.58">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@@ -24,6 +24,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace QuickLook.Plugin.MediaInfoViewer;
@@ -100,14 +101,15 @@ public partial class Plugin : IViewer, IMoreMenuExtended
if (isDark)
{
context.Theme = Themes.Dark;
tvp.Foreground = new BrushConverter().ConvertFromString("#FFEFEFEF") as SolidColorBrush;
tvp.Background = Brushes.Transparent;
tvp.SetResourceReference(TextBlock.ForegroundProperty, "WindowTextForeground");
}
else
{
context.Theme = Themes.Light;
tvp.Foreground = new BrushConverter().ConvertFromString("#BBFAFAFA") as SolidColorBrush;
tvp.Background = Brushes.Transparent;
tvp.Background = OSThemeHelper.AppsUseDarkTheme()
? new SolidColorBrush(Color.FromArgb(175, 255, 255, 255))
: Brushes.Transparent;
}
}
}

View File

@@ -64,7 +64,7 @@
<ItemGroup>
<PackageReference Include="PdfiumViewer.Updated" Version="2.14.5" />
<PackageReference Include="bblanchon.PDFiumV8.Win32" Version="141.0.7388" />
<PackageReference Include="bblanchon.PDFiumV8.Win32" Version="145.0.7568" />
<Reference Include="WindowsBase" />
</ItemGroup>

View File

@@ -70,6 +70,8 @@ public partial class Plugin : IViewer, IMoreMenu
public void View(string path, ContextObject context)
{
_currentPath = path;
if (path.EndsWith(".rtf", StringComparison.OrdinalIgnoreCase))
{
var rtfBox = new RichTextBox();
@@ -86,7 +88,6 @@ public partial class Plugin : IViewer, IMoreMenu
else
{
_tvp = new TextViewerPanel();
_currentPath = path;
_tvp.LoadFileAsync(path, context);
context.ViewerContent = _tvp;
}

View File

@@ -8,7 +8,7 @@
<FileAlignment>512</FileAlignment>
<SignAssembly>false</SignAssembly>
<UseWPF>true</UseWPF>
<LangVersion>latest</LangVersion>
<LangVersion>preview</LangVersion>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute>

View File

@@ -93,7 +93,7 @@
<Key word="workflow"/>
</KeyWords>
<KeyWords name="Keywords2" color="Purple" bold="false" italic="false">
<KeyWords name="Keywords2" color="#D8A0DF" bold="false" italic="false">
<Key word="Add-Computer"/>
<Key word="Add-Content"/>
<Key word="Add-History"/>
@@ -439,7 +439,7 @@
<Key word="Write-Zip"/>
</KeyWords>
<KeyWords name="Keywords3" color="Teal" bold="false" italic="false">
<KeyWords name="Keywords3" color="#80CBC4" bold="false" italic="false">
<Key word="ac"/>
<Key word="asnp"/>
<Key word="cat"/>

View File

@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<SyntaxDefinition name="Svelte" extensions=".svelte" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color name="Comment" foreground="#6A9955" />
<Color name="Tag" foreground="#569CD6" exampleText="div" />
<Color name="Attribute" foreground="#9CDCFE" exampleText="on:click" />
<Color name="String" foreground="#CE9178" exampleText="&quot;text&quot;" />
<Color name="Directive" foreground="#DCDCAA" exampleText="bind:" />
<Color name="Keyword" foreground="#C586C0" exampleText="import" />
<Color name="Script" foreground="#D4D4D4" />
<Color name="Style" foreground="#4EC9B0" />
<RuleSet name="Html">
<Span color="Comment" begin="&lt;!--" end="--&gt;" />
<Span color="String" begin="&quot;" end="&quot;" />
<Span color="String" begin="&apos;" end="&apos;" />
<!-- Tags -->
<Span color="Tag" begin="&lt;" end="&gt;">
<RuleSet>
<Keywords color="Tag">
<Word>script</Word>
<Word>style</Word>
<Word>div</Word>
<Word>span</Word>
<Word>input</Word>
<Word>button</Word>
<Word>section</Word>
<Word>article</Word>
<Word>header</Word>
<Word>footer</Word>
<Word>main</Word>
<Word>nav</Word>
<Word>aside</Word>
<Word>p</Word>
<Word>h1</Word>
<Word>h2</Word>
<Word>h3</Word>
<Word>ul</Word>
<Word>li</Word>
<Word>a</Word>
<Word>img</Word>
</Keywords>
<Keywords color="Directive">
<Word>bind:</Word>
<Word>on:</Word>
<Word>use:</Word>
<Word>transition:</Word>
<Word>in:</Word>
<Word>out:</Word>
<Word>animate:</Word>
<Word>class:</Word>
<Word>style:</Word>
</Keywords>
<Keywords color="Attribute">
<Word>export</Word>
<Word>let</Word>
<Word>const</Word>
</Keywords>
</RuleSet>
</Span>
</RuleSet>
<RuleSet name="JavaScript">
<Span color="Comment" begin="//" end="\n" />
<Span color="Comment" begin="/\*" end="\*/" />
<Span color="String" begin="&quot;" end="&quot;" />
<Span color="String" begin="&apos;" end="&apos;" />
<Keywords color="Keyword">
<Word>import</Word>
<Word>export</Word>
<Word>default</Word>
<Word>return</Word>
<Word>const</Word>
<Word>let</Word>
<Word>var</Word>
<Word>if</Word>
<Word>else</Word>
<Word>for</Word>
<Word>while</Word>
<Word>function</Word>
<Word>async</Word>
<Word>await</Word>
<Word>new</Word>
<Word>this</Word>
<Word>true</Word>
<Word>false</Word>
<Word>null</Word>
<Word>undefined</Word>
<Word>each</Word>
<Word>if</Word>
<Word>else</Word>
<Word>await</Word>
<Word>then</Word>
<Word>catch</Word>
</Keywords>
</RuleSet>
<RuleSet name="CSS">
<Span color="Comment" begin="/\*" end="\*/" />
<Span color="String" begin="&quot;" end="&quot;" />
<Span color="String" begin="&apos;" end="&apos;" />
</RuleSet>
<RuleSet name="MainRuleSet">
<Import ruleSet="Html" />
<Import ruleSet="JavaScript" />
<Import ruleSet="CSS" />
</RuleSet>
<RuleSet>
<Import ruleSet="MainRuleSet" />
</RuleSet>
</SyntaxDefinition>

View File

@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<SyntaxDefinition name="Svelte" extensions=".svelte" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color name="Comment" foreground="#008000" />
<Color name="Tag" foreground="#800000" exampleText="div" />
<Color name="Attribute" foreground="#0000FF" exampleText="on:click" />
<Color name="String" foreground="#A31515" exampleText="&quot;text&quot;" />
<Color name="Directive" foreground="#B000B0" exampleText="bind:" />
<Color name="Keyword" foreground="#000080" exampleText="import" />
<Color name="Script" foreground="#333333" />
<Color name="Style" foreground="#0055A5" />
<RuleSet name="Html">
<Span color="Comment" begin="&lt;!--" end="--&gt;" />
<Span color="String" begin="&quot;" end="&quot;" />
<Span color="String" begin="&apos;" end="&apos;" />
<!-- Tags -->
<Span color="Tag" begin="&lt;" end="&gt;">
<RuleSet>
<Keywords color="Tag">
<Word>script</Word>
<Word>style</Word>
<Word>div</Word>
<Word>span</Word>
<Word>input</Word>
<Word>button</Word>
<Word>section</Word>
<Word>article</Word>
<Word>header</Word>
<Word>footer</Word>
<Word>main</Word>
<Word>nav</Word>
<Word>aside</Word>
<Word>p</Word>
<Word>h1</Word>
<Word>h2</Word>
<Word>h3</Word>
<Word>ul</Word>
<Word>li</Word>
<Word>a</Word>
<Word>img</Word>
</Keywords>
<Keywords color="Directive">
<Word>bind:</Word>
<Word>on:</Word>
<Word>use:</Word>
<Word>transition:</Word>
<Word>in:</Word>
<Word>out:</Word>
<Word>animate:</Word>
<Word>class:</Word>
<Word>style:</Word>
</Keywords>
<Keywords color="Attribute">
<Word>export</Word>
<Word>let</Word>
<Word>const</Word>
</Keywords>
</RuleSet>
</Span>
</RuleSet>
<RuleSet name="JavaScript">
<Span color="Comment" begin="//" end="\n" />
<Span color="Comment" begin="/\*" end="\*/" />
<Span color="String" begin="&quot;" end="&quot;" />
<Span color="String" begin="&apos;" end="&apos;" />
<Keywords color="Keyword">
<Word>import</Word>
<Word>export</Word>
<Word>default</Word>
<Word>return</Word>
<Word>const</Word>
<Word>let</Word>
<Word>var</Word>
<Word>if</Word>
<Word>else</Word>
<Word>for</Word>
<Word>while</Word>
<Word>function</Word>
<Word>async</Word>
<Word>await</Word>
<Word>new</Word>
<Word>this</Word>
<Word>true</Word>
<Word>false</Word>
<Word>null</Word>
<Word>undefined</Word>
<Word>each</Word>
<Word>if</Word>
<Word>else</Word>
<Word>await</Word>
<Word>then</Word>
<Word>catch</Word>
</Keywords>
</RuleSet>
<RuleSet name="CSS">
<Span color="Comment" begin="/\*" end="\*/" />
<Span color="String" begin="&quot;" end="&quot;" />
<Span color="String" begin="&apos;" end="&apos;" />
</RuleSet>
<RuleSet name="MainRuleSet">
<Import ruleSet="Html" />
<Import ruleSet="JavaScript" />
<Import ruleSet="CSS" />
</RuleSet>
<RuleSet>
<Import ruleSet="MainRuleSet" />
</RuleSet>
</SyntaxDefinition>

View File

@@ -17,6 +17,7 @@
using ICSharpCode.AvalonEdit;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Editing;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.AvalonEdit.Search;
using QuickLook.Common.Helpers;
@@ -27,6 +28,7 @@ using QuickLook.Plugin.TextViewer.Themes.HighlightingDefinitions;
using System;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows;
@@ -68,16 +70,33 @@ public partial class TextViewerPanel : TextEditor, IDisposable
ShowLineNumbers = true;
WordWrap = true;
IsReadOnly = true;
// Enable manipulation events (touch gestures like pan/scroll).
IsManipulationEnabled = true;
// Disable automatic hyperlink detection for email addresses.
Options.EnableEmailHyperlinks = false;
// Disable automatic hyperlink detection for general URLs.
Options.EnableHyperlinks = false;
// Search for the separator line inside the left margins of the TextArea.
// The default LineNumberMargin in AvalonEdit often contains a thin Line element
// used as a visual separator between line numbers and the text.
// If found, set its Stroke to Transparent to hide the separator visually.
TextArea.LeftMargins
.OfType<System.Windows.Shapes.Line>()
.FirstOrDefault()
?.Stroke = Brushes.Transparent;
ContextMenu = new ContextMenu();
// Add "Copy" menu item.
ContextMenu.Items.Add(new MenuItem
{
Header = TranslationHelper.Get("Editor_Copy", domain: Assembly.GetExecutingAssembly().GetName().Name),
Command = ApplicationCommands.Copy
});
// Add "Select All" menu item.
ContextMenu.Items.Add(new MenuItem
{
Header = TranslationHelper.Get("Editor_SelectAll",
@@ -95,8 +114,10 @@ public partial class TextViewerPanel : TextEditor, IDisposable
FontFamily = new FontFamily(TranslationHelper.Get("Editor_FontFamily",
domain: Assembly.GetExecutingAssembly().GetName().Name));
// Add a custom element generator (e.g., to truncate extremely long lines).
TextArea.TextView.ElementGenerators.Add(new TruncateLongLines());
// Install the search panel (Ctrl+F style search UI).
SearchPanel.Install(this);
}

View File

@@ -351,7 +351,7 @@ public partial class ViewerPanel : UserControl, IDisposable, INotifyPropertyChan
private void ChangeVolume(double delta)
{
LinearVolume += delta;
LinearVolume = Math.Max(0d, Math.Min(1d, LinearVolume + delta));
}
private void TogglePlayPause(object sender, EventArgs e)
@@ -385,16 +385,16 @@ public partial class ViewerPanel : UserControl, IDisposable, INotifyPropertyChan
UpdateMeta(path, info);
// detect rotation
double.TryParse(info?.Get(StreamKind.Video, 0, "Rotation"), out var rotation);
_ = double.TryParse(info?.Get(StreamKind.Video, 0, "Rotation"), out var rotation);
// Correct rotation: on some machine the value "90" becomes "90000" by some reason
if (rotation > 360)
if (rotation > 360d)
rotation /= 1e3;
if (Math.Abs(rotation) > 0.1)
mediaElement.LayoutTransform = new RotateTransform(rotation, 0.5, 0.5);
if (Math.Abs(rotation) > 0.1d)
mediaElement.LayoutTransform = new RotateTransform(rotation, 0.5d, 0.5d);
mediaElement.Source = new Uri(path);
// old plugin use an int-typed "Volume" config key ranged from 0 to 100. Let's use a new one here.
LinearVolume = SettingHelper.Get("VolumeDouble", 1d, "QuickLook.Plugin.VideoViewer");
LinearVolume = Math.Max(0d, Math.Min(1d, SettingHelper.Get("VolumeDouble", 1d, "QuickLook.Plugin.VideoViewer")));
mediaElement.Play();
}

View File

@@ -89,6 +89,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickLook.Plugin.HelixViewe
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickLook.Plugin.MediaInfoViewer", "QuickLook.Plugin\QuickLook.Plugin.MediaInfoViewer\QuickLook.Plugin.MediaInfoViewer.csproj", "{B0054A16-472E-44AC-BA40-349303E524FF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickLook.Plugin.InsvBlocker", "QuickLook.Plugin\QuickLook.Plugin.InsvBlocker\QuickLook.Plugin.InsvBlocker.csproj", "{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -289,6 +291,14 @@ Global
{B0054A16-472E-44AC-BA40-349303E524FF}.Release|Any CPU.Build.0 = Release|Any CPU
{B0054A16-472E-44AC-BA40-349303E524FF}.Release|x64.ActiveCfg = Release|Any CPU
{B0054A16-472E-44AC-BA40-349303E524FF}.Release|x64.Build.0 = Release|Any CPU
{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}.Debug|x64.ActiveCfg = Debug|Any CPU
{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}.Debug|x64.Build.0 = Debug|Any CPU
{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}.Release|Any CPU.Build.0 = Release|Any CPU
{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}.Release|x64.ActiveCfg = Release|Any CPU
{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -315,6 +325,7 @@ Global
{B4F7C88D-C79D-49E7-A1FB-FB69CF72585F} = {06EFDBE0-6408-4B37-BCF2-0CF9EBEA2E93}
{311E6E78-3A5B-4E51-802A-5755BD5F9F97} = {06EFDBE0-6408-4B37-BCF2-0CF9EBEA2E93}
{B0054A16-472E-44AC-BA40-349303E524FF} = {06EFDBE0-6408-4B37-BCF2-0CF9EBEA2E93}
{A1B2C3D4-E5F6-4A5B-9C8D-7E6F5A4B3C2D} = {06EFDBE0-6408-4B37-BCF2-0CF9EBEA2E93}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D3761C32-8C5F-498A-892B-3B0882994B62}

71
QuickLook.slnx Normal file
View File

@@ -0,0 +1,71 @@
<Solution>
<Configurations>
<Platform Name="Any CPU" />
<Platform Name="x64" />
</Configurations>
<Folder Name="/QuickLook.Native/">
<Project Path="QuickLook.Native/QuickLook.Native32/QuickLook.Native32.vcxproj" Id="d31ee321-c2b0-4984-b749-736f7de509f1">
<Platform Project="Win32" />
</Project>
<Project Path="QuickLook.Native/QuickLook.Native64/QuickLook.Native64.vcxproj" Id="794e4dcf-f715-4836-9d30-abd296586d23" />
</Folder>
<Folder Name="/QuickLook.Plugin/">
<Project Path="QuickLook.Plugin/QuickLook.Plugin.AppViewer/QuickLook.Plugin.AppViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.ArchiveViewer/QuickLook.Plugin.ArchiveViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/QuickLook.Plugin.CLSIDViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.CsvViewer/QuickLook.Plugin.CsvViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.ELFViewer/QuickLook.Plugin.ELFViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.FontViewer/QuickLook.Plugin.FontViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.HelixViewer/QuickLook.Plugin.HelixViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/QuickLook.Plugin.HtmlViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.ImageViewer/QuickLook.Plugin.ImageViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.MailViewer/QuickLook.Plugin.MailViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/QuickLook.Plugin.MarkdownViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.MediaInfoViewer/QuickLook.Plugin.MediaInfoViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.OfficeViewer/QuickLook.Plugin.OfficeViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.PDFViewer/QuickLook.Plugin.PdfViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.PEViewer/QuickLook.Plugin.PEViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.PluginInstaller/QuickLook.Plugin.PluginInstaller.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.TextViewer/QuickLook.Plugin.TextViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/QuickLook.Plugin.ThumbnailViewer.csproj" />
<Project Path="QuickLook.Plugin/QuickLook.Plugin.VideoViewer/QuickLook.Plugin.VideoViewer.csproj" />
</Folder>
<Folder Name="/Solution Items/">
<File Path="GitVersion.cs" />
</Folder>
<Project Path="QuickLook.Common/QuickLook.Common.csproj">
<Platform Solution="*|x64" Project="x64" />
</Project>
<Project Path="QuickLook.Installer/QuickLook.Installer.wixproj" Id="f0214fc2-efbe-426c-842d-b42bc37d9525">
<BuildDependency Project="QuickLook.Common/QuickLook.Common.csproj" />
<BuildDependency Project="QuickLook.Native/QuickLook.Native32/QuickLook.Native32.vcxproj" />
<BuildDependency Project="QuickLook.Native/QuickLook.Native64/QuickLook.Native64.vcxproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.AppViewer/QuickLook.Plugin.AppViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.ArchiveViewer/QuickLook.Plugin.ArchiveViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.CLSIDViewer/QuickLook.Plugin.CLSIDViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.CsvViewer/QuickLook.Plugin.CsvViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.ELFViewer/QuickLook.Plugin.ELFViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.FontViewer/QuickLook.Plugin.FontViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.HelixViewer/QuickLook.Plugin.HelixViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/QuickLook.Plugin.HtmlViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.ImageViewer/QuickLook.Plugin.ImageViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.MailViewer/QuickLook.Plugin.MailViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/QuickLook.Plugin.MarkdownViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.MediaInfoViewer/QuickLook.Plugin.MediaInfoViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.OfficeViewer/QuickLook.Plugin.OfficeViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.PDFViewer/QuickLook.Plugin.PdfViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.PEViewer/QuickLook.Plugin.PEViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.PluginInstaller/QuickLook.Plugin.PluginInstaller.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.TextViewer/QuickLook.Plugin.TextViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/QuickLook.Plugin.ThumbnailViewer.csproj" />
<BuildDependency Project="QuickLook.Plugin/QuickLook.Plugin.VideoViewer/QuickLook.Plugin.VideoViewer.csproj" />
<BuildDependency Project="QuickLook/QuickLook.csproj" />
<Platform Project="x86" />
<Build />
</Project>
<Project Path="QuickLook/QuickLook.csproj">
<BuildDependency Project="QuickLook.Native/QuickLook.Native32/QuickLook.Native32.vcxproj" />
<BuildDependency Project="QuickLook.Native/QuickLook.Native64/QuickLook.Native64.vcxproj" />
<Platform Solution="*|x64" Project="x64" />
</Project>
</Solution>

View File

@@ -259,6 +259,9 @@ public partial class App : Application
private void CheckUpdate()
{
if (SettingHelper.Get("DisableAutoUpdateCheck", false))
return;
if (DateTime.Now.Ticks - SettingHelper.Get<long>("LastUpdateTicks") < TimeSpan.FromDays(30).Ticks)
return;

View File

@@ -93,7 +93,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>compile; runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3">
<PackageReference Include="Newtonsoft.Json" Version="13.0.4">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="System.Runtime.WindowsRuntime" Version="4.7.0">
@@ -105,7 +105,7 @@
<PackageReference Include="WPF-UI.Violeta" Version="4.0.3.6">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Lib.Harmony" Version="2.4.1">
<PackageReference Include="Lib.Harmony" Version="2.4.2">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="UnblockZoneIdentifier" Version="1.0.0">

View File

@@ -11,6 +11,7 @@
<MW_Open>افتح الملف {0} باستخدام البرنامج الافتراضي</MW_Open>
<MW_OpenWith>افتح الملف {0} باستخدام برنامج محدد</MW_OpenWith>
<MW_Run>شغل الملف {0} المحدد</MW_Run>
<MW_FileBlocked>هذا النوع من الملفات محظور.</MW_FileBlocked>
<Icon_RunAtStartup>شغل البرنامج أوتوماتيكيًا عند تشغيل النظام</Icon_RunAtStartup>
<Icon_ToolTip>النسخة {0} من كويك لووك</Icon_ToolTip>
<Icon_CheckUpdate>تأكد من وجود أي تحديث للبرنامج</Icon_CheckUpdate>
@@ -40,6 +41,7 @@
<MW_Open>Megnyitás {0}</MW_Open>
<MW_OpenWith>Megnyitás ezzel {0}</MW_OpenWith>
<MW_Run>Futtatás {0}</MW_Run>
<MW_FileBlocked>Ez a fájltípus blokkolva van.</MW_FileBlocked>
<Icon_RunAtStartup>Futattás &amp;Indításkor</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Keressen új &amp;Frissítést...</Icon_CheckUpdate>
@@ -69,6 +71,7 @@
<MW_Open>Otvoriť {0}</MW_Open>
<MW_OpenWith>Otvoriť v programe {0}</MW_OpenWith>
<MW_Run>Spustiť {0}</MW_Run>
<MW_FileBlocked>Tento typ súboru je blokovaný.</MW_FileBlocked>
<Icon_RunAtStartup>Spustiť pri &amp;štarte</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Skontrolovať &amp;aktualizácie...</Icon_CheckUpdate>
@@ -97,6 +100,7 @@
<MW_Open>Buka {0}</MW_Open>
<MW_OpenWith>Buka dengan {0}</MW_OpenWith>
<MW_Run>Jalankan {0}</MW_Run>
<MW_FileBlocked>Jenis file ini diblokir.</MW_FileBlocked>
<Icon_RunAtStartup>Jalankan saat &amp;Memulai</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v. {0}</Icon_ToolTip>
<Icon_CheckUpdate>Memeriksa &amp;Pembaharuan...</Icon_CheckUpdate>
@@ -130,6 +134,7 @@
<MW_Open>{0} 열기</MW_Open>
<MW_OpenWith>{0}(으)로 열기</MW_OpenWith>
<MW_Run>{0} 실행</MW_Run>
<MW_FileBlocked>이 파일 유형은 차단되었습니다.</MW_FileBlocked>
<MW_Share>공유</MW_Share>
<Icon_RunAtStartup>시작 시 실행(&amp;S)</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
@@ -160,6 +165,7 @@
<MW_Open>Obre {0}</MW_Open>
<MW_OpenWith>Obre'l amb {0}</MW_OpenWith>
<MW_Run>Executa'l {0}</MW_Run>
<MW_FileBlocked>Aquest tipus de fitxer està bloquejat.</MW_FileBlocked>
<Icon_RunAtStartup>Executa'l a l'&amp;inici</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Cerca &amp;actualitzacions...</Icon_CheckUpdate>
@@ -192,6 +198,7 @@
<MW_OpenWith>Öffnen mit {0}</MW_OpenWith>
<MW_OpenWithMenu>Öffnen mit ...</MW_OpenWithMenu>
<MW_Run>{0} ausführen</MW_Run>
<MW_FileBlocked>Dieser Dateityp ist blockiert.</MW_FileBlocked>
<MW_Share>Freigeben</MW_Share>
<MW_Reload>Neu laden</MW_Reload>
<MW_More>Mehr</MW_More>
@@ -229,6 +236,7 @@
<MW_OpenWith>Open with {0}</MW_OpenWith>
<MW_OpenWithMenu>Open With Menu</MW_OpenWithMenu>
<MW_Run>Run {0}</MW_Run>
<MW_FileBlocked>This file type is blocked.</MW_FileBlocked>
<MW_Share>Share</MW_Share>
<MW_Reload>Reload</MW_Reload>
<MW_More>More</MW_More>
@@ -266,6 +274,7 @@
<MW_OpenWith>Abrir con {0}</MW_OpenWith>
<MW_OpenWithMenu>Abrir Con Menu</MW_OpenWithMenu>
<MW_Run>Iniciar {0}</MW_Run>
<MW_FileBlocked>Este tipo de archivo está bloqueado.</MW_FileBlocked>
<MW_Share>Compartir</MW_Share>
<MW_Reload>Recargar</MW_Reload>
<MW_More>Más</MW_More>
@@ -299,6 +308,7 @@
<MW_Open>Ouvrir {0}</MW_Open>
<MW_OpenWith>Ouvrir avec {0}</MW_OpenWith>
<MW_Run>Exécuter {0}</MW_Run>
<MW_FileBlocked>Ce type de fichier est bloqué.</MW_FileBlocked>
<MW_Reload>Recharger</MW_Reload>
<MW_More>Plus</MW_More>
<Icon_RunAtStartup>Exécuter au &amp;démarrage</Icon_RunAtStartup>
@@ -331,6 +341,7 @@
<MW_Open>Apri {0}</MW_Open>
<MW_OpenWith>Apri con {0}</MW_OpenWith>
<MW_Run>Esegui {0}</MW_Run>
<MW_FileBlocked>Questo tipo di file è bloccato.</MW_FileBlocked>
<MW_Reload>Ricarica</MW_Reload>
<MW_More>Altro</MW_More>
<Icon_RunAtStartup>Esegui all'&amp;Avvio</Icon_RunAtStartup>
@@ -365,6 +376,7 @@
<MW_OpenWith>{0} で開く</MW_OpenWith>
<MW_OpenWithMenu>メニューから選択して開く</MW_OpenWithMenu>
<MW_Run>{0} を起動</MW_Run>
<MW_FileBlocked>このファイルタイプはブロックされています.</MW_FileBlocked>
<MW_Share>シェア</MW_Share>
<MW_Reload>再読み込み</MW_Reload>
<MW_More>その他</MW_More>
@@ -397,6 +409,7 @@
<MW_Open>Åpne {0}</MW_Open>
<MW_OpenWith>Åpne med {0}</MW_OpenWith>
<MW_Run>Kjør {0}</MW_Run>
<MW_FileBlocked>Denne filtypen er blokkert.</MW_FileBlocked>
<Icon_RunAtStartup>Kjør ved &amp;oppstart</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Se etter &amp;oppdateringer...</Icon_CheckUpdate>
@@ -424,6 +437,7 @@
<MW_Open>Open {0}</MW_Open>
<MW_OpenWith>Openen met {0}</MW_OpenWith>
<MW_Run>Uitvoeren {0}</MW_Run>
<MW_FileBlocked>Dit bestandstype is geblokkeerd.</MW_FileBlocked>
<Icon_RunAtStartup>Uitvoeren bij &amp;Opstarten</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Controleren op &amp;Updates...</Icon_CheckUpdate>
@@ -456,6 +470,7 @@
<MW_OpenWith>Otwórz w {0}</MW_OpenWith>
<MW_OpenWithMenu>Otwórz za pomocą...</MW_OpenWithMenu>
<MW_Run>Uruchom {0}</MW_Run>
<MW_FileBlocked>Ten typ pliku jest zablokowany.</MW_FileBlocked>
<MW_Share>Udostępnij</MW_Share>
<MW_Reload>Przeładuj</MW_Reload>
<MW_More>Więcej</MW_More>
@@ -493,6 +508,7 @@
<MW_OpenWith>Abrir com {0}</MW_OpenWith>
<MW_OpenWithMenu>Menu abrir com</MW_OpenWithMenu>
<MW_Run>Executar {0}</MW_Run>
<MW_FileBlocked>Este tipo de arquivo está bloqueado.</MW_FileBlocked>
<MW_Share>Compartilhar</MW_Share>
<MW_Reload>Recarregar</MW_Reload>
<MW_More>Mais</MW_More>
@@ -525,6 +541,7 @@
<MW_Open>Abrir {0}</MW_Open>
<MW_OpenWith>Abrir com {0}</MW_OpenWith>
<MW_Run>Executar {0}</MW_Run>
<MW_FileBlocked>Este tipo de ficheiro está bloqueado.</MW_FileBlocked>
<Icon_RunAtStartup>Executar no &amp;Arranque</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Procurar por &amp;Atualizações...</Icon_CheckUpdate>
@@ -553,6 +570,7 @@
<MW_Open>Открыть {0}</MW_Open>
<MW_OpenWith>Открыть с помощью {0}</MW_OpenWith>
<MW_Run>Запустить {0}</MW_Run>
<MW_FileBlocked>Этот тип файла заблокирован.</MW_FileBlocked>
<MW_StayTop>Поверх всех окон</MW_StayTop>
<MW_PreventClosing>Закрепить</MW_PreventClosing>
<MW_Share>Поделиться</MW_Share>
@@ -587,6 +605,7 @@
<MW_Open>Aç: {0}</MW_Open>
<MW_OpenWith>Birlikte aç: {0}</MW_OpenWith>
<MW_Run>Çalıştır: {0}</MW_Run>
<MW_FileBlocked>Bu dosya türü engellenmiştir.</MW_FileBlocked>
<Icon_RunAtStartup>B&amp;aşlangıçta çalıştır</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>&amp;Güncellemeleri denetle...</Icon_CheckUpdate>
@@ -620,6 +639,7 @@
<MW_OpenWith>Відкрити за допомогою {0}</MW_OpenWith>
<MW_OpenWithMenu>Відкрити за допомогою меню</MW_OpenWithMenu>
<MW_Run>Запустити {0}</MW_Run>
<MW_FileBlocked>Цей тип файлу заблоковано.</MW_FileBlocked>
<MW_Share>Поширити</MW_Share>
<MW_Reload>Перезавантажити</MW_Reload>
<MW_More>Більше</MW_More>
@@ -652,6 +672,7 @@
<MW_Open>Mở {0}</MW_Open>
<MW_OpenWith>Mở bằng {0}</MW_OpenWith>
<MW_Run>Chạy {0}</MW_Run>
<MW_FileBlocked>Loại tệp này bị chặn.</MW_FileBlocked>
<Icon_RunAtStartup>&amp;Khởi động cùng hệ thống</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>&amp;Kiểm tra cập nhật...</Icon_CheckUpdate>
@@ -684,6 +705,7 @@
<MW_OpenWith>用 {0} 打开</MW_OpenWith>
<MW_OpenWithMenu>从菜单选择打开</MW_OpenWithMenu>
<MW_Run>运行 {0}</MW_Run>
<MW_FileBlocked>此文件类型已被阻止。</MW_FileBlocked>
<MW_Share>分享</MW_Share>
<MW_Reload>重新加载</MW_Reload>
<MW_More>更多</MW_More>
@@ -721,6 +743,7 @@
<MW_OpenWith>使用 {0} 開啟</MW_OpenWith>
<MW_OpenWithMenu>從選單選擇開啟</MW_OpenWithMenu>
<MW_Run>執行 {0}</MW_Run>
<MW_FileBlocked>此檔案類型已被阻止。</MW_FileBlocked>
<MW_Share>分享</MW_Share>
<MW_Reload>重新載入</MW_Reload>
<MW_More>更多</MW_More>
@@ -754,6 +777,7 @@
<MW_Open>{0} उघडा</MW_Open>
<MW_OpenWith>{0} च्या सह उघडा</MW_OpenWith>
<MW_Run>{0} चालवा</MW_Run>
<MW_FileBlocked>हा फाइल प्रकार ब्लॉक केला आहे.</MW_FileBlocked>
<Icon_RunAtStartup>&amp;सुरूवातीस चालवा</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook आवृत्ती v{0}</Icon_ToolTip>
<Icon_CheckUpdate>&amp;अद्यतनांसाठी तपासा...</Icon_CheckUpdate>
@@ -781,6 +805,7 @@
<MW_Open>{0} खोलें</MW_Open>
<MW_OpenWith>{0} के साथ खोलें</MW_OpenWith>
<MW_Run>{0} चलाएं</MW_Run>
<MW_FileBlocked>यह फ़ाइल प्रकार अवरुद्ध है.</MW_FileBlocked>
<Icon_RunAtStartup>&amp;शुरु होते समय चलाएं</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook आवृत्ती v{0}</Icon_ToolTip>
<Icon_CheckUpdate>&amp;अद्यतन के लिए जाँच करें...</Icon_CheckUpdate>
@@ -808,6 +833,8 @@
<MW_BrowseFolder>סייר ב{0}</MW_BrowseFolder>
<MW_Open>פתח את {0}</MW_Open>
<MW_OpenWith>פתח בעזרת {0}</MW_OpenWith>
<MW_Run>הפעל {0}</MW_Run>
<MW_FileBlocked>סוג קובץ זה חסום.</MW_FileBlocked>
<MW_Run>הרץ {0}</MW_Run>
<Icon_RunAtStartup>הרץ ב&amp;אתחול</Icon_RunAtStartup>
<Icon_ToolTip>'תצוגה מהירה' v{0}</Icon_ToolTip>
@@ -837,6 +864,7 @@
<MW_Open>Άνοιγμα {0}</MW_Open>
<MW_OpenWith>Άνοιγμα με {0}</MW_OpenWith>
<MW_Run>Εκτέλεση {0}</MW_Run>
<MW_FileBlocked>Αυτός ο τύπος αρχείου είναι αποκλεισμένος.</MW_FileBlocked>
<Icon_RunAtStartup>Εκτέλεση κατά &amp;την εκκίνηση</Icon_RunAtStartup>
<Icon_ToolTip>QuickLook v{0}</Icon_ToolTip>
<Icon_CheckUpdate>Ελεγχος για &amp;ενημερώσεις...</Icon_CheckUpdate>
@@ -868,6 +896,7 @@
<MW_OpenWith>Öppna med {0}</MW_OpenWith>
<MW_OpenWithMenu>Öppna med…</MW_OpenWithMenu>
<MW_Run>Kör {0}</MW_Run>
<MW_FileBlocked>Den här filtypen är blockerad.</MW_FileBlocked>
<MW_Share>Dela</MW_Share>
<MW_Reload>Ladda om</MW_Reload>
<Icon_RunAtStartup>Kör vid &amp;start</Icon_RunAtStartup>

View File

@@ -201,6 +201,19 @@ public partial class ViewerWindow
return;
}
if (ContextObject.IsBlocked)
{
ContextObject.ViewerContent = new System.Windows.Controls.TextBlock
{
Text = TranslationHelper.Get("MW_FileBlocked", failsafe: "This file type is blocked."),
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
FontSize = 14,
};
ContextObject.IsBusy = false;
return;
}
SetOpenWithButtonAndPath();
// Revert UI changes

View File

@@ -23,6 +23,8 @@ using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Input;
using Wpf.Ui.Appearance;
using Wpf.Ui.Violeta.Appearance;
namespace QuickLook;
@@ -105,14 +107,24 @@ public partial class ViewerWindow : INotifyPropertyChanged
if (isDark)
{
CurrentTheme = Themes.Dark;
// Update theme for QuickLook controls
if (!Resources.MergedDictionaries.Contains(_darkDict))
Resources.MergedDictionaries.Add(_darkDict);
// Update theme for WPF-UI controls
ThemeManager.Apply(ApplicationTheme.Dark);
}
else
{
CurrentTheme = Themes.Light;
// Update theme for QuickLook controls
if (Resources.MergedDictionaries.Contains(_darkDict))
Resources.MergedDictionaries.Remove(_darkDict);
// Update theme for WPF-UI controls
ThemeManager.Apply(ApplicationTheme.Light);
}
}
}

View File

@@ -64,6 +64,8 @@ public partial class ViewerWindow : Window
Topmost = SettingHelper.Get("Topmost", false);
buttonTop.Tag = Topmost ? "Top" : "Auto";
ShowInTaskbar = SettingHelper.Get("ShowInTaskbar", false);
buttonTop.Click += (_, _) =>
{
Topmost = !Topmost;

View File

@@ -5,7 +5,8 @@
<a href="https://trendshift.io/repositories/3258" target="_blank"><img src="https://trendshift.io/api/badge/repositories/3258" style="width: 250px; height: 55px;" width="250" height="55"/></a>
[![license](https://img.shields.io/github/license/QL-Win/QuickLook.svg)](https://www.gnu.org/licenses/gpl-3.0.en.html)
[![AppVeyor](https://img.shields.io/appveyor/ci/xupefei/QuickLook.svg)](https://ci.appveyor.com/project/xupefei/QuickLook)
[![Actions](https://github.com/QL-Win/QuickLook/actions/workflows/msbuild.yml/badge.svg)](https://github.com/QL-Win/QuickLook/actions/workflows/msbuild.yml)
[![Platform](https://img.shields.io/badge/platform-Windows-blue?logo=windowsxp&color=1E9BFA)](https://dotnet.microsoft.com/en-us/download/dotnet/latest/runtime)
[![Github All Releases](https://img.shields.io/github/downloads/QL-Win/QuickLook/total.svg)](https://github.com/QL-Win/QuickLook/releases)
[![GitHub release](https://img.shields.io/github/release/QL-Win/QuickLook.svg)](https://github.com/QL-Win/QuickLook/releases/latest)
@@ -36,7 +37,7 @@ Get it from one of the following sources:
* Microsoft Store (Windows 10 and later only). Not supported on Windows 10 S. Not support file preview in Open-File or Save-File dialogs. <a href="https://www.microsoft.com/store/apps/9nv4bs3l1h4s?ocid=badge" target="_blank"><img src="https://developer.microsoft.com/store/badges/images/English_get_L.png" height="22px" alt="Store Link" /></a>
* Installer or portable archive of the stable version from [GitHub Release](https://github.com/QL-Win/QuickLook/releases)
* Using [Scoop](https://scoop.sh/): `scoop bucket add extras && scoop install extras/quicklook`
* Nightly builds from [AppVeyor](https://ci.appveyor.com/project/xupefei/quicklook/build/artifacts) and [GitHub Action](https://github.com/QL-Win/QuickLook/releases/)
* Nightly builds from [GitHub Action](https://github.com/QL-Win/QuickLook/releases/)
[What are the differences between `.msi`, `.zip`, Nightly and Store versions?](https://github.com/QL-Win/QuickLook/wiki/Differences-Between-Distributions)
@@ -77,6 +78,8 @@ Get it from one of the following sources:
Here is the complete list of plugins from [Available-Plugins](https://github.com/QL-Win/QuickLook/wiki/Available-Plugins).
See [here](https://github.com/QL-Win/QuickLook/wiki/Available-Plugins#how-to-install-or-upgrade-a-plugin) for instructions on how to install plugins.
## Supported file formats
See the [Supported formats](SUPPORTED_FORMATS.md)