Tyrrrz
5cec162b4e
More consistent message box
2026-03-12 18:54:44 +02:00
Tyrrrz
6647f90ced
Update default branch ref
2026-03-04 20:23:55 +02:00
Copilot
b9a3001c11
Add DISCORDCHATEXPORTER_SETTINGS_PATH env var override for settings file path ( #1500 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-03-02 20:06:20 +02:00
Copilot
dadfe5b8ef
Guard App.Dispose() against double-invocation and late shutdown ( #1499 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-03-02 18:42:35 +02:00
dependabot[bot]
4f29fa63d0
Bump the actions group with 2 updates ( #1495 )
...
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-01 15:53:28 +02:00
dependabot[bot]
54b0174bde
Bump the nuget group with 15 updates ( #1496 )
...
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-01 15:53:11 +02:00
Tyrrrz
3be5bc6a21
Remove dashes from OutputPathTooltip
2.47
2026-02-27 19:14:30 +02:00
Tyrrrz
c9f152773a
Clean up last PR
2026-02-27 19:12:27 +02:00
Copilot
5e39611395
Double-clicking a channel auto-opens export setup ( #1493 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-02-27 19:10:19 +02:00
Tyrrrz
40491bdc0f
Fix text misalignment on export setup
2026-02-27 19:05:16 +02:00
Tyrrrz
03dd272eaf
Fix tests harder this time
2026-02-27 18:59:52 +02:00
Tyrrrz
98e294f7e4
Fix tests, clean up
2026-02-27 18:36:16 +02:00
Tyrrrz
b22e786449
Fix the shrug emoji not rendering correctly
2026-02-27 18:35:53 +02:00
Tyrrrz
951c1e4613
Make Run's BaselineAlignment set globally
2026-02-27 18:31:40 +02:00
Tyrrrz
675d910ea3
Formatting
2026-02-27 17:56:29 +02:00
Tyrrrz
28f26e45fb
Add tests for forwarded messages
2026-02-27 17:52:26 +02:00
Tyrrrz
4674c517e3
Refactor
2026-02-27 17:39:36 +02:00
Tyrrrz
b660edfe78
Clean up after last PR
2026-02-27 17:30:06 +02:00
Tyrrrz
532470e3db
Fix format
2026-02-27 15:42:47 +02:00
farley128
b533e08d74
Implement exporting for forwarded messages ( #1451 )
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
Co-authored-by: Oleksii Holub <1935960+Tyrrrz@users.noreply.github.com >
2026-02-27 15:41:31 +02:00
Tyrrrz
d490fd0a38
Improve, clean up encryption
2026-02-27 14:57:15 +02:00
Copilot
21c2398e2a
Cleanup: fix filename typo, replace AsyncNonKeyedLocker, drop WithIndex(), use ProcessStartInfo ctor arg ( #1492 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-02-27 14:42:07 +02:00
Tyrrrz
7ff2347df1
Clean up
2026-02-27 14:32:27 +02:00
Tyrrrz
3391e755fc
Fix markdown not parsing for Persist Token tooltip
2026-02-27 14:19:03 +02:00
Tyrrrz
f0e9d3be1b
Reorganize files
2026-02-27 14:14:43 +02:00
Copilot
eef0fc742d
Encrypt Discord token at rest in settings file (machine-bound) ( #1491 )
...
* Initial plan
* Add token encryption when saving/loading settings
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Apply suggestion from @Tyrrrz
* Apply suggestion from @Tyrrrz
* Bind token encryption key to machine identity
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Switch to AES-GCM, hex encoding, and GetBytes/Fill improvements
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Address all review feedback: salt injection, code style, localization formatting
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Address latest review: ThisAssembly.Project, EnvironmentExtensions, inline Lazy, renames, localization wording
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Address latest review: layout comment, cipherSource, else block, MachineName fallback, csproj ordering
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Apply suggestion from @Tyrrrz
* Rename GetMachineId→TryGetMachineId, refactor Write to use single array with FillBytes
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Rename cipherSource→cipher in Read(), tokenBytes→tokenData in Write(), update layout comments
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Add cipherSource variable in Write(), update layout comment with size annotation
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Fix CSharpier formatting: inline multiline string assignments and reformat exception filter
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Quote EncryptionSalt argument to handle single quotes in secret value
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Revert double-quote fix on EncryptionSalt argument
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Apply suggestion from @Tyrrrz
* Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2026-02-27 14:01:25 +02:00
Tyrrrz
2e47c73388
Use range operator for substring extraction in StringSegment.ToString()
2026-02-27 11:30:09 +02:00
Tyrrrz
2d49146c74
Rename transformFallback parameter to fallbackTransform for clarity
2026-02-27 10:24:39 +02:00
Copilot
c59374598a
Migrate to Centralized NuGet Package Management (CPM) ( #1489 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-02-26 21:29:46 +02:00
Tyrrrz
01d0203445
Clean up
2026-02-26 21:24:20 +02:00
Copilot
c4bfb3424e
Add option to reverse message order in exports ( #1487 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-02-26 21:14:57 +02:00
Copilot
522caba420
Fix standard emoji not rendering as Discord-style images ( #1488 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-02-26 17:20:04 +02:00
Copilot
ad1170b42e
Fix duplicate threads causing a crash when exporting in parallel ( #1486 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-02-26 17:19:07 +02:00
Copilot
d2c0e2169b
Increase media asset URL hash length to eliminate collision risk with --reuse-media ( #1485 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-02-26 16:35:18 +02:00
Tyrrrz
e6562de1f5
Reformat XAML
2026-02-24 21:07:48 +02:00
Tyrrrz
5f8054e2f0
Fix alingment issues when dealing with inlines
2026-02-24 21:05:03 +02:00
Copilot
12d98e9ab0
Add localization ( #1482 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-02-24 20:49:32 +02:00
Copilot
18086aa209
Fix second dialog not appearing when dialogs are shown sequentially ( #1481 )
...
* Initial plan
* Add Task.Yield() to DialogManager to fix sequential dialog display
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
2026-02-23 07:32:56 +02:00
Copilot
dd7196b6a5
Resolve thread mentions on demand ( #1480 )
...
* Initial plan
* Fix unresolved thread mentions in HTML export (#1261 )
- Add TryGetChannelAsync to DiscordClient for on-demand channel/thread lookup
- Add PopulateChannelAsync to ExportContext with negative caching
- Update HtmlMarkdownVisitor to resolve thread mentions on demand
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Refactor GetChannelAsync to use TryGetChannelAsync for parent resolution
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Add test for thread mention resolution in HTML export
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Apply PopulateChannelAsync to PlainTextMarkdownVisitor; add JSON thread mention test
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
2026-02-21 23:21:47 +02:00
Copilot
72f9e981de
Replace YouTube iframe embeds with clickable thumbnails ( #1474 )
...
* Initial plan
* Replace YouTube iframe with clickable thumbnail
- Changed YouTube embed URL from embed format to watch format
- Added ThumbnailUrl property to YouTubeVideoEmbedProjection using YouTube's standard thumbnail URL
- Updated MessageGroupTemplate to render thumbnail image with link instead of iframe
- Updated CSS to style thumbnail appropriately
- Updated test to check for anchor link and thumbnail image instead of iframe
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Address code review feedback
- Use hqdefault.jpg instead of maxresdefault.jpg (guaranteed to exist for all videos)
- Extract thumbnail URL logic to GetThumbnailUrl method for better testability
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Simplify YouTube embed test to focus on data not structure
- Remove checks for HTML structure (class names, nested elements)
- Focus on verifying YouTube URL with correct video ID exists
- Follow same pattern as other embed tests (Spotify, Twitch)
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Fix data-canonical-url and improve test specificity
- Use canonical (non-proxy) URL for data-canonical-url attribute
- Extract thumbnailUrl to local variable to avoid duplicate calls
- Update test to check for img with video ID in src, avoiding false positives
- Test now verifies the actual thumbnail data rather than any link
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Inline thumbnail URL logic directly into attributes
- Remove GetThumbnailUrl method from YouTubeVideoEmbedProjection
- Remove local variables from template
- Put coalescing logic directly in src and data-canonical-url attributes
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
2.46.1
2026-02-12 19:04:17 +02:00
Copilot
81e286751f
Add file:// protocol to absolute asset paths in HTML exports ( #1475 )
...
* Initial plan
* Add file:// protocol prefix to absolute paths in HTML exports
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Improve absolute path detection for cross-platform compatibility
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Remove unused System.IO import
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
* Use Path.IsPathFullyQualified for absolute path detection (fixes #1473 )
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
2026-02-12 13:19:12 +02:00
dependabot[bot]
225230a20f
Bump the actions group with 2 updates ( #1467 )
...
Bumps the actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout ) and [actions/setup-dotnet](https://github.com/actions/setup-dotnet ).
Updates `actions/checkout` from 6.0.1 to 6.0.2
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](8e8c483db8...de0fac2e45 )
Updates `actions/setup-dotnet` from 5.0.1 to 5.1.0
- [Release notes](https://github.com/actions/setup-dotnet/releases )
- [Commits](2016bd2012...baa11fbfe1 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: 6.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: actions
- dependency-name: actions/setup-dotnet
dependency-version: 5.1.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: actions
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 17:28:59 +02:00
dependabot[bot]
dea412ff25
Bump the nuget group with 9 updates ( #1468 )
...
Bumps AsyncKeyedLock from 7.1.8 to 8.0.1
Bumps Avalonia from 11.3.10 to 11.3.11
Bumps Avalonia.Desktop from 11.3.10 to 11.3.11
Bumps Avalonia.Diagnostics from 11.3.10 to 11.3.11
Bumps DialogHost.Avalonia from 0.10.3 to 0.10.4
Bumps Microsoft.Extensions.Configuration from 10.0.1 to 10.0.2
Bumps Microsoft.Extensions.Configuration.EnvironmentVariables from 10.0.1 to 10.0.2
Bumps Microsoft.Extensions.Configuration.UserSecrets from 10.0.1 to 10.0.2
Bumps Microsoft.Extensions.DependencyInjection from 10.0.1 to 10.0.2
---
updated-dependencies:
- dependency-name: AsyncKeyedLock
dependency-version: 8.0.1
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: nuget
- dependency-name: Avalonia
dependency-version: 11.3.11
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: nuget
- dependency-name: Avalonia.Desktop
dependency-version: 11.3.11
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: nuget
- dependency-name: Avalonia.Diagnostics
dependency-version: 11.3.11
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: nuget
- dependency-name: DialogHost.Avalonia
dependency-version: 0.10.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: nuget
- dependency-name: Microsoft.Extensions.Configuration
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: nuget
- dependency-name: Microsoft.Extensions.Configuration.EnvironmentVariables
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: nuget
- dependency-name: Microsoft.Extensions.Configuration.UserSecrets
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: nuget
- dependency-name: Microsoft.Extensions.DependencyInjection
dependency-version: 10.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: nuget
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 17:28:47 +02:00
Tyrrrz
95953f8cf0
Refactor
2026-01-01 23:56:12 +02:00
Tyrrrz
6191855e33
Fix invalid issue link in comment
2026-01-01 23:53:57 +02:00
Copilot
33a975b907
Fix case-insensitive lookup for data package index file ( #1460 )
...
Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
2026-01-01 21:19:59 +02:00
Tyrrrz
3d353bc1e6
Format
2026-01-01 20:40:37 +02:00
dependabot[bot]
f555ab3f00
Bump the actions group with 5 updates ( #1457 )
...
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-01 20:37:11 +02:00
dependabot[bot]
a14a17db83
Bump the nuget group with 11 updates ( #1458 )
...
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-01 20:36:41 +02:00
Tyrrrz
1f63d4fa26
Line breaks
2025-12-31 18:57:08 +02:00