diff --git a/CHANGELOG.md b/CHANGELOG.md index 59f5fd79..61fa8798 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,12 +7,95 @@ Add a `## ` section before tagging a release. Write what someone using find it, what it does and doesn't do. Start the section with an `` block (hidden on GitHub). The app's update notice shows its level and its -one-line summaries in the user's language (`ko`, `en`, `zh`; a line per change, a language may repeat): +one-line summaries in the user's language (`ko`, `en`, `zh`, `pl`; a line per change, a language may repeat; a language +without lines shows the English ones): - `required`: wrong or lost results, security, Filee not starting. The card shows every time Filee starts. - `recommended`: bug fixes. The card shows once per version. - `optional`: new features only. No card, the sidebar button only. +## 1.12.0 + + + +### New + +- **PDF → PowerPoint** (issue #96). "PPTX (slides)" puts a picture of each PDF page on its own slide, at the page's + size, with the page's text in the speaker notes. The slides look exactly like the PDF but aren't editable; PDF → DOCX + is the editable route. It takes TIFF's place on the PDF donut when you never changed that donut. +- **Compress PDF** (issue #103). The new "Compress PDF" preset, and a *Compress* option on every PDF → PDF preset, make + a PDF smaller while it stays a PDF: pictures shown larger than needed are scaled down (Smallest 72 dpi, Balanced + 150 dpi, High quality 300 dpi), photos are saved again as JPEG, and everything else is compressed losslessly. Text, + fonts, links, bookmarks and forms stay. A PDF that can't be made smaller is left as it was, and the toast says so. + With Ghostscript installed, *Also try Ghostscript* keeps the smaller of the two results. +- **Every frame of a video** (issue #63, by @pleguen). "Extract frames (PNG)" and "Extract frames (JPG)", or *Save + every frame of a video* in a PNG or JPG preset, write each frame (or every Nth) into a folder next to the video. A + video that would give more than 100,000 pictures or fill the disk is refused before it starts. Add the presets to a + donut in Settings → Toolbar. +- **Hardware video encoding** (issue #100). *Use hardware acceleration (graphics chip)* in a video preset encodes + H.264 and HEVC with NVENC, Quick Sync, AMF, VideoToolbox or VA-API: much faster and lighter on power, slightly larger + at the same quality. Without a usable chip, the video is encoded as before. Off by default. +- **Closing the window** (issue #111). The first time you close the main window, Filee asks whether to keep running in + the tray or quit, with "Don't ask again". Settings → General → "When I close the window" changes it later. +- **Request a format** (issue #117). When you bring files Filee can't read to the donut, or a conversion fails for + that reason, *Request this format* opens a GitHub form with the extension filled in (only the extension, never a + file name). Encrypted or copy-protected (DRM) files can't be converted, whatever their format. +- **Ubuntu 22.04** (issue #102). The Linux packages run on Ubuntu 22.04 and newer again, global gestures included. +- **Polish** (by @rafek1241). Filee speaks Polish, and picks it when Windows, macOS or Linux does. +- **Other file managers** (issue #124). Gestures set to "File managers and desktop" also start over Files, Directory + Opus, Total Commander, XYplorer, OneCommander, Q-Dir and FreeCommander, not only Explorer. +- **calibre for e-book PDFs** (issue #127). With calibre installed and moved above the HWPX writer in Settings → + Engines, EPUB, MOBI, AZW3 and other e-books become PDFs through calibre, much faster for long books. + +### Improved + +- **Memory** (issue #119). Half a minute after the last conversion Filee gives the memory back: Task Manager shows it + at a few tens of MB in the tray instead of several hundred. Closing the main window releases it; it opens again where + and on the page you left it. +- **Running as administrator** (issue #99). Explorer can't drop files on a Filee that runs as administrator or use its + menu. Filee now notices it, says so on Home, and offers *Restart without administrator rights*. A second launch that + can't reach the running Filee says why instead of quitting silently. + +### Fixed + +- SVGs with an unescaped "&" or HTML entities such as ` ` in their text (often from AI tools) failed with "An + error occurred while parsing EntityName" (issue #120). +- Pressing Ctrl+Space twice in a dropdown, or Ctrl+clicking the selected item, showed an error (issue #107). +- Long e-books to PDF stopped at 95 % after two minutes (issue #127): the time limit now grows with the text, up to + an hour. +- "Retry gestures" could leave gestures dead while Filee said they were running (by @leishifu666). +- calibre couldn't be downloaded on macOS and Linux: it now comes from calibre's own server. + ## 1.11.0 $(NoWarn);CS1591;CS1573 - 1.11.0 + 1.12.0 Filee Filee contributors Copyright (c) Filee contributors diff --git a/src/Filee.App/Services/ReleaseNotes.cs b/src/Filee.App/Services/ReleaseNotes.cs index edeb0c43..61cd1ff1 100644 --- a/src/Filee.App/Services/ReleaseNotes.cs +++ b/src/Filee.App/Services/ReleaseNotes.cs @@ -65,9 +65,8 @@ public static ReleaseNote Parse(string version, string? body) "optional" => UpdateLevel.Optional, _ => UpdateLevel.Recommended, }; - else if (key is "ko" or "en" or "zh" or "zh-cn") + else if (LanguageOf(key) is { } language) { - var language = key.StartsWith("zh", StringComparison.Ordinal) ? "zh-CN" : key; if (!summary.TryGetValue(language, out var lines)) summary[language] = lines = []; lines.Add(value); @@ -77,6 +76,14 @@ public static ReleaseNote Parse(string version, string? body) return new ReleaseNote(version, level, summary.ToDictionary(p => p.Key, p => (IReadOnlyList)p.Value)); } + /// + /// The UI language a summary line is for: any language Filee ships ("pl"), with "zh" for Chinese. Null for other + /// keys, which a newer Filee may know. + /// + private static string? LanguageOf(string key) => + key is "zh" ? "zh-CN" + : LocalizationService.Languages.FirstOrDefault(l => l.Code.Equals(key, StringComparison.OrdinalIgnoreCase)).Code; + /// The notes of the releases newer than up to , newest first. public static IReadOnlyList Between(IEnumerable<(string Tag, string? Body)> releases, string current, string latest) { diff --git a/tests/Filee.App.Tests/ReleaseNotesTests.cs b/tests/Filee.App.Tests/ReleaseNotesTests.cs index 8c202834..f13bc97a 100644 --- a/tests/Filee.App.Tests/ReleaseNotesTests.cs +++ b/tests/Filee.App.Tests/ReleaseNotesTests.cs @@ -36,6 +36,21 @@ public void The_hidden_block_gives_the_level_and_a_line_per_change_by_language() Assert.Equal(["Excel page breaks carry over to PDF"], note.In("ja")); // no Japanese: English } + [Fact] + public void Every_language_filee_ships_has_its_lines_and_unknown_ones_are_skipped() + { + var note = ReleaseNotes.Parse("1.12.0", """ + + """); + + Assert.Equal(["Język polski"], note.In("pl")); + Assert.Equal(["Polish translation"], note.In("xx")); // not a Filee language: English + } + [Fact] public void Releases_without_the_block_are_recommended_and_say_nothing() {