Skip to content

docs: migrate wiki references to amule-org.github.io/docs - #801

Merged
mrjimenez merged 4 commits into
amule-project:masterfrom
got3nks:urls-cleanup-issue-53
Jun 2, 2026
Merged

docs: migrate wiki references to amule-org.github.io/docs#801
mrjimenez merged 4 commits into
amule-project:masterfrom
got3nks:urls-cleanup-issue-53

Conversation

@got3nks

@got3nks got3nks commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Resolves amule-org/amule-org.github.io#53 by migrating user-facing references from the deprecated github.com/amule-org/amule/wiki/* over to the new docs site (amule-org.github.io/docs/*). The wiki is being shut down in favor of the published docs site.

User-displayed URLs in src/, the AppStream metainfo, the Windows installer's URLInfoAbout, and docs/ are all flipped. The .manifest assembly-identity names were also flipped from amule-project.* to amule-org.* to match the new repo namespace.

URL mapping

Old wiki path New docs URL
/wiki /docs
/wiki/AMuleWeb /docs/manual/interfaces/amuleweb
/wiki/Amulecmd /docs/manual/interfaces/amulecmd
/wiki/Amuled /docs/manual/interfaces/amuled
/wiki/Backtraces /docs/contributing/bug-reports
/wiki/Firewall /docs/manual/configuration/firewall
/wiki/Get-HighID /docs/manual/configuration/get-high-id
/wiki/FAQ-aMule /docs/manual/faq
/wiki/FAQ_eD2k‐Kademlia#what-is-lowid-and-highid /docs/p2p-networks/high-id-low-id
/wiki/Amulesig.dat-file /docs/developer/file-formats#amulesigdat
/wiki/Onlinesig.dat-file /docs/developer/file-formats#onlinesigdat
/wiki/Translations /docs/contributing/translations
/wiki/Translating-Wiki, /wiki/Translating-Docs /docs/contributing/documentation#translations

Every target URL was HTTP-verified 200 against amule-org.github.io.

.po handling

Most wiki URLs in po/*.po were split across "..." continuation lines (e.g. "...https://github.com/amule-org/" + "amule/wiki..."), so a naive git grep misses them. The sweep uses a URL-centric regex that allows "\n" between any two characters of the target URL, and is escape-aware for msgstrs containing \"ECPassword\". Result: zero make update-po churn — only the lines actually containing the URL are touched.

po/sl.po had 11 stale *.amule.org URLs in fuzzy translations — hand-updated so the eventual Slovenian translator sees the current canonical URL set. po/gl.po had one active msgstr where the URL no longer matched its msgid (releases/latest in English but stale wiki in Galician) — hand-fixed to match.

Per-file URL audit confirms uniformity: every po/*.po + amule.pot has identical 15 msgid URL occurrences / 9 distinct URLs; every docs/man/po/* has identical 2 / 2.

Out of scope (intentionally not flipped)

  • README.md badges still reference amule-project/amule — these will flip with the 3.0.0 release.
  • Copyright headers in ~120 source files (Copyright (c) ... aMule Team ( [email protected] / http://www.amule.org )) — historical attribution, not user-displayed.
  • Sourceforge tracker URLs in old src/ comments — historical references.
  • wxCas decorative /// Pixmaps from aMule http://www.amule.org comments — source attribution only.
  • docs/CHANGELOG.md historical entries — historical record.
  • PACKAGE_BUGREPORT in CMakeLists.txt — email convention.
  • CHANGELOG entry — will be added in a separate housekeeping pass.

Test plan

  • macOS local build green (cmake -B build -DBUILD_MONOLITHIC=YES -DBUILD_REMOTEGUI=YES, exit 0)
  • All 18 new docs URLs verified 200 OK
  • msgcat --no-wrap final audit: zero remaining /wiki/ or legacy *.amule.org URLs in any active or fuzzy non-obsolete .po entry
  • No msgid/msgstr URL mismatches after hand-fix
  • CI green
  • Manual: About-dialog FAQ button click lands on amule-org.github.io/docs
  • Manual: amuled --full-daemon crash-handler banner shows new bug-reports URL

Replaces github.com/amule-org/amule/wiki/* references with the
corresponding pages on the new docs site at amule-org.github.io/docs.
The wiki is being shut down in favor of the published docs site
(amule-org/amule-org.github.io#53).

Migration mapping:
  /wiki                            -> /docs
  /wiki/AMuleWeb                    -> /docs/manual/interfaces/amuleweb
  /wiki/Amulecmd                    -> /docs/manual/interfaces/amulecmd
  /wiki/Amuled                      -> /docs/manual/interfaces/amuled
  /wiki/Backtraces                  -> /docs/contributing/bug-reports
  /wiki/Firewall                    -> /docs/manual/configuration/firewall
  /wiki/Get-HighID                  -> /docs/manual/configuration/get-high-id
  /wiki/FAQ-aMule                   -> /docs/manual/faq
  /wiki/FAQ_eD2k-Kademlia#what...   -> /docs/p2p-networks/high-id-low-id
  /wiki/Amulesig.dat-file           -> /docs/developer/file-formats#amulesigdat
  /wiki/Onlinesig.dat-file          -> /docs/developer/file-formats#onlinesigdat
  /wiki/Translations                -> /docs/contributing/translations
  /wiki/Translating-Wiki|Docs       -> /docs/contributing/documentation#translations

Also:
- packaging/windows/installer.nsi URLInfoAbout: www.amule.org ->
  amule-org.github.io
- amule.manifest / alc.manifest / wxcas.manifest assemblyIdentity:
  amule-project.* -> amule-org.*
- po/sl.po: hand-update 11 fuzzy/stale URL fragments so translators
  see the current canonical URL set (no msgid changes)
- po/gl.po: fix one active msgstr where the URL no longer matched
  its msgid

.po files use wrap-collapsed substring substitution to keep the diff
minimal (zero msgmerge churn). README badges still point at
amule-project/amule until the 3.0.0 tag.

Build verified on macOS (aMule.app + aMuleGUI.app green).
Comment thread src/amuleDlg.cpp Outdated
_("Website: https://amule-org.github.io \n") <<
_("Forum: https://github.com/amule-org/amule/discussions \n") <<
_("FAQ: https://github.com/amule-org/amule/wiki \n\n") <<
_("FAQ: https://amule-org.github.io/docs \n\n") <<

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Docs instead of FAQ ?

@ngosang

ngosang commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

@got3nks In the docs/ folder and in the Readme you have links to specific parts of the docs and I still moving pages. Could you split this PR in 2 or wait a couple of days until I finish?

Addresses @ngosang review feedback on amule-project#801: the About dialog had
"FAQ: https://amule-org.github.io/docs", but the dedicated FAQ page
already lives at /docs/manual/faq (which the README's [FAQ] reference
was migrated to in the same PR). Switch the About dialog string to
match.

The F1 keyboard shortcut keeps pointing at /docs (the docs landing).
sl.po's stale Slovenian "PZS: " translation is hand-updated to match
the new msgid, same approach used for the original URL migration.
@got3nks

got3nks commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

Marking the PR as draft until your reorg lands — I'll re-verify every deep link against the final docs structure and re-request review then. FAQ label bumped to /docs/manual/faq in 0ddd257 in the meantime (good catch on that).

@got3nks
got3nks marked this pull request as draft June 1, 2026 15:09
@ngosang

ngosang commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

FAQ label bumped to /docs/manual/faq

I think we should change the message to Documentation: https://amule-org.github.io/docs. The current FAQ is not very useful.

Also take a look at the year 2019 in the About dialog. Maybe you can open a new PR changing the license year before the release.

Per ngosang's review on amule-project#801:

- "FAQ:" -> "Documentation:" pointing at the docs landing page
  (https://amule-org.github.io/docs) rather than the FAQ subpage.
- "Contact: [email protected] (administrative issues)" replaced with
  "Issues: https://github.com/amule-org/amule/issues" -- the admin@
  mailbox is currently unreachable; the GitHub issue tracker is the
  live channel for both administrative and bug reports.
- Copyright year bumped 2003-2019 -> 2003-2026 for the 3.0.0 release.
@got3nks

got3nks commented Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

Pushed f2e869d0 addressing both:

The PR is still in Draft because you mentioned some URLs in the documentation site may still change. Let me know when the docs URLs are settled and I'll flip it to Ready for review — happy to absorb any last URL tweaks in a follow-up commit on this branch.

Comment thread README.md Outdated
@@ -7,8 +7,8 @@
[Forum] | [Wiki] | [FAQ]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Forum] | [Documentation] | [FAQ]

Comment thread README.md Outdated
[Forum]: https://github.com/amule-org/amule/discussions "aMule Forum"
[Wiki]: https://github.com/amule-org/amule/wiki "aMule Wiki"
[FAQ]: https://github.com/amule-org/amule/wiki/FAQ-aMule "FAQ on aMule"
[Wiki]: https://amule-org.github.io/docs "aMule Wiki"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No description provided.

Comment thread README.md
[2]: https://amule-org.github.io/docs/manual/configuration/get-high-id "How to get HighID"
[3]: https://amule-org.github.io/docs/manual/configuration/firewall "How to set up firewall rules for aMule"

## Reporting Bugs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread README.md
Comment on lines 95 to 104
## Reporting Bugs

If you find a bug or miss a feature, please open an issue on
[GitHub][5] (preferred) or report it on the [forum]. A good bug report
includes the exact aMule version (`amuled --version`), the platform you're
on, and steps to reproduce.

[5]: https://github.com/amule-org/amule/issues "aMule Issues"

## Contributing

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread src/ExternalConnector.cpp Outdated
fprintf(stderr, " https://github.com/amule-org/amule/issues\n");
fprintf(stderr, "If possible, please try to generate a real backtrace of this crash:\n");
fprintf(stderr, " https://github.com/amule-org/amule/wiki/Backtraces\n\n");
fprintf(stderr, " https://amule-org.github.io/docs/contributing/bug-reports\n\n");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread src/amuleDlg.cpp
_("FAQ: https://github.com/amule-org/amule/wiki \n\n") <<
_("Contact: admin@amule.org (administrative issues) \n") <<
_("Copyright (c) 2003-2019 aMule Team \n\n") <<
_("Documentation: https://amule-org.github.io/docs \n") <<

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You have to recreate *.po files.

Comment thread src/amule.cpp Outdated
<< " https://github.com/amule-org/amule/issues\n"
<< "If possible, please try to generate a real backtrace of this crash:\n"
<< " https://github.com/amule-org/amule/wiki/Backtraces\n\n"
<< " https://amule-org.github.io/docs/contributing/bug-reports\n\n"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread src/amule-remote-gui.cpp Outdated
<< " https://github.com/amule-org/amule/issues\n"
<< "If possible, please try to generate a real backtrace of this crash:\n"
<< " https://github.com/amule-org/amule/wiki/Backtraces\n\n"
<< " https://amule-org.github.io/docs/contributing/bug-reports\n\n"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread docs/README.md Outdated
@@ -95,9 +95,9 @@ Connect to it from another machine with `amulegui`, `amuleweb`, or
`amulecmd` using the same EC password.

The wiki has detailed walkthroughs for

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Replace the word Wiki with Documentation across the all the files.

Comment thread docs/README.md Outdated

[highid]: https://github.com/amule-org/amule/wiki/Get-HighID
[firewall]: https://github.com/amule-org/amule/wiki/Firewall
[highid]: https://amule-org.github.io/docs/manual/configuration/get-high-id

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ngosang

ngosang commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

@got3nks I'll keep working on the documentation, but the URLs won't change anymore. I've left you a few comments.

…tation, refresh URLs

Inline review on PR amule-project#801 + a fresh round of docs site updates land
the following:

- Header link block: `[Wiki]` -> `[Documentation]` (label + reference
  definition) in README.md.

- HighID / firewall walkthroughs: `get-high-id` and `high-id-low-id`
  on the docs site were consolidated. README.md's `[HighID]` now
  points at `/p2p-networks/ed2k/high-id` and the network-setup link
  collapses to a single `/manual/configuration/network-connectivity`
  reference. Same swap in `docs/README.md`.

- Bug-report URL: 3 source files (`src/ExternalConnector.cpp`,
  `src/amule.cpp`, `src/amule-remote-gui.cpp`) had the crash-handler
  message point at `/docs/contributing/bug-reports` (plural), which is
  404. The docs site now ships `/docs/contributing/bug-report`
  (singular); swapped on all 3 sites.

- "Reporting Bugs" section in README.md now also links to
  `/contributing/bug-report` so users finding the section organically
  get the same guidance the crash handler prints.

- "Contributing" section in README.md simplified to point at the new
  `/contributing` landing page; dropped the per-topic
  `/contributing/translations` and `/contributing/documentation`
  reference-style targets (still 404 at the time of this commit) and
  the obsolete "Wiki" line item.

- `docs/README.md`: remaining "wiki" mentions in prose renamed to
  "documentation"; the help block at the bottom now reads
  `Documentation: <url>` instead of `Wiki: <url>`.

Verified every URL in the PR's full master..HEAD diff returns 200.

`.po` regeneration after the About-dialog string changes is deferred
to keep the commit reviewable — it produces a much larger,
mechanical diff that translators would re-fuzz anyway on their next
po4a-update.

Refs amule-project#801
@got3nks

got3nks commented Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

@ngosang Pushed 79b4f2dd addressing the review. Summary:

  • [Wiki][Documentation] in the README header (label + reference definition).
  • HighID / firewall walkthroughs consolidated — [HighID] now points at /p2p-networks/ed2k/high-id and the network setup link collapses to /manual/configuration/network-connectivity. Same swap in docs/README.md.
  • /docs/contributing/bug-reports (404, plural) → /docs/contributing/bug-report (200, singular) in the 3 crash-handler sites + the README "Reporting Bugs" section.
  • "Contributing" section in README points at the new /contributing landing page; dropped the per-topic translations/documentation reference targets (still 404) and the obsolete "Wiki" line item.
  • Remaining "wiki" prose mentions in docs/README.md renamed to "documentation".

Re-verified every URL in the full PR diff against the live docs site — all 17 return 200 now. PR is ready to flip out of Draft when you're happy.

For the .po regeneration after the About-dialog string changes: deferring that to release time alongside the CHANGELOG refresh for 3.0.0, so translators see the new msgids in the same pass and don't get fuzz-flagged twice.

@ngosang

ngosang commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Change draft to open

@got3nks
got3nks marked this pull request as ready for review June 2, 2026 19:49
@got3nks

got3nks commented Jun 2, 2026

Copy link
Copy Markdown
Contributor Author

Done @mrjimenez PR ready for merge.

@mrjimenez
mrjimenez merged commit 2d46a86 into amule-project:master Jun 2, 2026
7 checks passed
mrjimenez pushed a commit that referenced this pull request Jun 2, 2026
Addresses @ngosang review feedback on #801: the About dialog had
"FAQ: https://amule-org.github.io/docs", but the dedicated FAQ page
already lives at /docs/manual/faq (which the README's [FAQ] reference
was migrated to in the same PR). Switch the About dialog string to
match.

The F1 keyboard shortcut keeps pointing at /docs (the docs landing).
sl.po's stale Slovenian "PZS: " translation is hand-updated to match
the new msgid, same approach used for the original URL migration.
mrjimenez pushed a commit that referenced this pull request Jun 2, 2026
Per ngosang's review on #801:

- "FAQ:" -> "Documentation:" pointing at the docs landing page
  (https://amule-org.github.io/docs) rather than the FAQ subpage.
- "Contact: [email protected] (administrative issues)" replaced with
  "Issues: https://github.com/amule-org/amule/issues" -- the admin@
  mailbox is currently unreachable; the GitHub issue tracker is the
  live channel for both administrative and bug reports.
- Copyright year bumped 2003-2019 -> 2003-2026 for the 3.0.0 release.
@got3nks
got3nks deleted the urls-cleanup-issue-53 branch June 3, 2026 14:16
got3nks added a commit to got3nks/amule that referenced this pull request Jun 4, 2026
Captures translatable strings introduced after the previous po
refresh (post-amule-project#747 wave). Notable new entries:

  - "Connection failed. Please check the host, port, and password."
    (amule-project#841 — amulegui retry-on-connect-failure)
  - "Force ZLIB compression" (amule-project#840 — EC client-tag locality override)
  - "Follow symbolic links in shared folders" (amule-project#809)
  - "Connection Type:" (amule-project#824 — ED2K Info readability)
  - "Documentation: https://amule-org.github.io/docs " (amule-project#801 — wiki
    URL migration)

Generated with `scripts/update-po.sh` from a working tree that has
PR amule-project#841 applied locally, so the new amulegui retry-loop strings
are included even though amule-project#841 itself is not in this branch — when
amule-project#841 lands on master, the .po files will already reflect its
strings without needing a second regeneration pass.

The remaining churn is line-number realignment across the ~38
language files from a month of source-code drift.
got3nks added a commit to got3nks/amule that referenced this pull request Jun 4, 2026
Captures translatable strings introduced after the previous po
refresh (post-amule-project#747 wave). Notable new entries:

  - "Connection failed. Please check the host, port, and password."
    (amule-project#841 — amulegui retry-on-connect-failure)
  - "Force ZLIB compression" (amule-project#840 — EC client-tag locality override)
  - "Follow symbolic links in shared folders" (amule-project#809)
  - "Connection Type:" (amule-project#824 — ED2K Info readability)
  - "Documentation: https://amule-org.github.io/docs " (amule-project#801 — wiki
    URL migration)

Generated with `scripts/update-po.sh` from a working tree that has
PR amule-project#841 applied locally, so the new amulegui retry-loop strings
are included even though amule-project#841 itself is not in this branch — when
amule-project#841 lands on master, the .po files will already reflect its
strings without needing a second regeneration pass.

The remaining churn is line-number realignment across the ~38
language files from a month of source-code drift.
mrjimenez pushed a commit that referenced this pull request Jun 4, 2026
Captures translatable strings introduced after the previous po
refresh (post-#747 wave). Notable new entries:

  - "Connection failed. Please check the host, port, and password."
    (#841 — amulegui retry-on-connect-failure)
  - "Force ZLIB compression" (#840 — EC client-tag locality override)
  - "Follow symbolic links in shared folders" (#809)
  - "Connection Type:" (#824 — ED2K Info readability)
  - "Documentation: https://amule-org.github.io/docs " (#801 — wiki
    URL migration)

Generated with `scripts/update-po.sh` from a working tree that has
PR #841 applied locally, so the new amulegui retry-loop strings
are included even though #841 itself is not in this branch — when
#841 lands on master, the .po files will already reflect its
strings without needing a second regeneration pass.

The remaining churn is line-number realignment across the ~38
language files from a month of source-code drift.
got3nks added a commit to got3nks/amule that referenced this pull request Aug 7, 2026
…e-project#180, amule-project#801) (amule-project#839)

* feat(gui): port CFileDetailListCtrl to CMuleVirtualDataViewCtrl (amule-project#180, amule-project#801)

Continues the wxListCtrl -> wxDataViewCtrl migration (amule-project#180/amule-project#801) onto
the shared base from amule-project#811, after Search (amule-project#796), Servers (amule-project#807/amule-project#811)
and Friends (amule-project#830). CFileDetailListCtrl was next because it has no
CBarShader rendering (unlike Downloads/SharedFiles/Sources-Peers,
which additionally need a still-nonexistent wxDataViewCustomRenderer).

Its caller, CFileDetailDialog::FillSourcenameList(), drove the old
list with raw position-indexed CRUD (FindItem by name, SetItemPtrData,
SetItem by column index, DeleteItem) rather than the pointer-identity
style CServerListCtrl/CFriendListCtrl already use, so porting the
control cleanly meant refactoring the caller too:

- CFileDetailDialog gained a std::map<wxString, SourcenameItem *>
  m_sourcenames member, replacing "search the list widget by name"
  with a map lookup. FillSourcenameList()'s reset/update/prune shape
  is otherwise unchanged, just re-keyed to the map and driven through
  the control's new AddSource/RefreshSource/RemoveSource API.
- OnBnClickedTakeOver()/OnListClickedTakeOver() resolve the selected
  row through GetSelectedItemData() (inherited from
  CMuleVirtualDataViewCtrl) instead of GetNextItem+GetItemText.
- The dialog's EVT_LIST_ITEM_ACTIVATED binding on IDC_LISTCTRLFILENAMES
  becomes EVT_DATAVIEW_ITEM_ACTIVATED; wxDataViewEvent is a
  wxNotifyEvent/wxCommandEvent descendant so it still propagates from
  the child control to the dialog-level handler the same way.
- Fixed a latent leak: nothing in ~CFileDetailDialog() freed the
  SourcenameItem objects still referenced by open rows -- only the
  "not a partfile" and "pruned to zero" paths in FillSourcenameList()
  ever deleted them. Now freed in the destructor via m_sourcenames.

CMuleDataViewCtrl always ORs in wxDV_MULTIPLE (no single-selection
mode exists on the shared base), but this list's "take over filename"
actions assume exactly one selection, same as the old list did (it
never actually requested wxLC_SINGLE_SEL either -- checked
muuli_wdr.cpp -- it enforced single-selection itself via OnSelect()
deselecting every other row). CFileDetailListCtrl::OnSelectionChanged()
does the equivalent: collapses to the just-clicked row whenever more
than one ends up selected.

Also deleted a vestigial nested SourcenameItem struct in
FileDetailListCtrl.h that duplicated (by accident of matching layout)
the real one in PartFile.h, and dropped a per-row background-colour
set that reproduced the default and carried its own "do we still need
this?" comment.

Verified: builds clean; clang-format v18 (pinned Docker image) applied;
clang-tidy Tier-1 (whole-tree) and Tier-2 (changed-lines,
.clang-tidy-new-code) both clean via the ~/aMuleTest/ci-local replica.
Grepped for other CFileDetailListCtrl/IDC_LISTCTRLFILENAMES references
to confirm muuli_wdr.cpp's construction call needed no changes.
Interactive verification (source list populate/re-tally, take-over via
button and double-click, single-selection enforcement, sort, VoiceOver)
left for manual testing per project convention.

* fix(gui): keep the source-name list sorted, and drop rows before freeing them

Review follow-up to the port.

FillSourcenameList() zeroes every count and then rewrites them in place, so
while it runs the list is not ordered by the column it is sorted on -- and
AddSource() places a new row with a binary search, which needs that ordering
to hold. An insertion therefore leaves rows in arbitrary positions, and the
repair has to happen here, exactly as the pre-port code did.

Only on insertion, though. A count that merely changed is what the live-sort
preference governs: RefreshSource() re-sorts when it is on, and when it is
off the row is meant to stay put rather than move under the user. Sorting
unconditionally would quietly override that setting for this list.

The destructor and the not-a-partfile path also freed the SourcenameItem
objects while the list control still held pointers to them. Nothing can
paint or sort in either window today -- both dialog call sites are stack
temporaries, so destruction is synchronous -- but that rests on wx's teardown
order rather than on anything guaranteed, and the base states the rule
plainly: it has to be told before the caller frees the item data. Both now
clear the rows first, as the prune loop already did.

* fix(gui): decide the source list's live re-sort per column

IsLiveSortColumn() answered true for every column, so a refresh tick
scheduled a re-sort even when the list was sorted by File Name -- a value
that never changes, since the name is the key each row was created under.

Answer per column instead, the shape CServerListCtrl already uses, so only a
sources-sorted list re-sorts on its own. The header comment already
described it this way; only the implementation did not.

* chore: drop a duplicated paragraph from the file header

FileDetailDialog.cpp carried the "Any parts of this program derived from
the xMule, lMule or eMule project" paragraph twice. It is the only file in
src/ that does, and the file is already being touched here.

---------

Co-authored-by: got3nks <[email protected]>
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
amule-project#796 ported the search list to wxDataViewCtrl and amule-project#805 fixed what that
port left behind. amule-project#801 asked whether the remaining lists should each be
ported independently or share a base, and deferred the answer until the
shape was clear from more than one list. It now is.

CMuleDataViewCtrl is the wxDataViewCtrl counterpart of CMuleListCtrl:
column widths and their persistence, the header show/hide menu, hidden
state, the multi-column sort chain, type-to-select, Cmd/Ctrl+A, the
macOS shifted page/home/end keys, the trailing-column spacer, and
drag-resize detection. It owns no data; a list supplies its rows through
GetDisplayOrder(), their label through GetRowLabel(), and how two of
them compare through CompareByColumn().

CMuleVirtualDataViewCtrl is the counterpart of CMuleVirtualListCtrl,
and virtual in the same sense: rows are addressed by index through a
wxDataViewIndexListModel and nothing is materialised per row. It carries
the item-identity bookkeeping an identity-addressed port avoids -- a
wxDataViewItem from a row-addressed model encodes the row number, so a
deletion silently retargets any item held across it, which is why
everything here speaks in wxUIntPtr and re-resolves selection after each
mutation. Also the legacy filter API, live re-sort coalesced through one
CallAfter and deferred while the user is interacting, bulk append and
batch removal, and icon columns.

CSearchListCtrl moves onto the plain base, losing 499 lines.
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
…mule-project#801)

The first list onto CMuleVirtualDataViewCtrl, and what makes it more
than dead code. Supersedes the port in amule-project#807, whose approach and column
handling informed this one.

The list keeps its public API, so ServerWnd, GuiEvents and the remote
GUI are unchanged, and AddServer/RemoveServer/RefreshServer/
HighlightServer work as they did because the base offers the same
AddItemData/RemoveItemData/RefreshItemData vocabulary CMuleVirtualList-
Ctrl did. What is left here is the list's own business: cell text,
country flags, the bold connected server, the comparator, the context
menu and column auto-fit.

Removals notify the control before the core frees the server, rather
than deferring to idle: the row's identity is the object, so anything
touching the list in between -- a repaint, a resort, a menu handler
reading the selection -- would be reading freed memory.

Ping, Users and Files still drive the live re-sort, gated by
thePrefs::LiveListSort() as before; the TCP/UDP flag columns are still
hidden by default in release builds, now through the header menu's
hidden state rather than a zero width.
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
feat(gui): shared wxDataViewCtrl base, and port CServerListCtrl onto it (amule-project#180, amule-project#801)
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
…oject#180, amule-project#801) (amule-project#830)

* feat(gui): port CFriendListCtrl to CMuleVirtualDataViewCtrl (amule-project#180, amule-project#801)

Continues the wxListCtrl -> wxDataViewCtrl migration (amule-project#180/amule-project#801) onto
the shared base PR amule-project#811 extracted after the Servers port (amule-project#807, now
absorbed into amule-project#811). CFriendListCtrl was picked next after reading all
the remaining candidates directly rather than going by line count
alone: it has no CBarShader rendering (unlike Downloads/SharedFiles/
Sources-Peers, which additionally need a still-nonexistent
wxDataViewCustomRenderer), it's already pointer-identity addressed
(UpdateFriend(CFriend*)/RemoveFriend(CFriend*) map directly onto
AddItemData/RefreshItemData/RemoveItemData), and its blast radius is
tiny (ChatWnd.cpp, muuli_wdr.cpp construction only).

CFileDetailListCtrl looked smaller by line count but its caller
(FileDetailDialog.cpp) drives it with raw position-indexed CRUD
(FindItem by name, SetItem by column index, DeleteItem) plus a
pre-existing duplicate-type quirk (two unrelated SourcenameItem
structs relying on compatible layout) -- porting it cleanly means
refactoring the caller too, which is a separate, more invasive piece
of work than this one.

CServerListCtrl (current, post-amule-project#811) is the template mirrored here:
same AppendTextColumn/AppendSpacerColumn/AssociateVirtualModel/
LoadColumnSettings/InitColumnState ctor sequence, same GetItemColumnText/
GetItemAttr/CompareItemData/OnListKey hook shape. Public API
(UpdateFriend, RemoveFriend) and the constructor signature are
unchanged, so ChatWnd.cpp and muuli_wdr.cpp needed no edits.

Notable deltas from the pre-port behaviour: added a real CompareItemData
so header-click sort now works (the old list never called SetSortFunc
at all); GetItemAttr replaces the old SetItemTextColour call with the
same visible result (blue for linked friends, default text colour
otherwise).

Verified: builds clean; clang-format v18 (pinned Docker image) applied;
clang-tidy Tier-1 (whole-tree) and Tier-2 (changed-lines,
.clang-tidy-new-code) both clean via the ~/aMuleTest/ci-local replica
-- Tier-2 caught one real modernize-use-nullptr hit, fixed. Grepped
ChatWnd.cpp/.h and muuli_wdr.cpp to confirm no other call sites exist.
Interactive verification (sort, right-click menu states, Delete-key
removal, chat-session activation, VoiceOver) left for manual testing
per project convention, same as PR amule-project#796/amule-project#807.

* fix(gui): resolve activated friend through selection, not row-as-pointer

got3nks's review on amule-project#830 found a real crash: OnItemActivated() cast
event.GetItem()'s ID directly to CFriend* on the assumption it was the
item's data pointer, but CMuleVirtualDataViewCtrl's row-addressed
model returns the row index (+1) as that ID -- the "item identity is
not row identity" case MuleVirtualDataViewCtrl.h itself documents.
Every double-click/Enter on a friend dereferenced a bogus pointer.
Fixed by selecting the activated row and resolving it through
GetSelectedItemData(), matching CServerListCtrl::OnItemActivated.

Also from the same review: IsLiveSortColumn() now returns true, since
the name (the only sortable column) can change after a friend is
already listed and the UpdateFriend() comment claimed a re-sort that
the base's default-false hook never actually triggered; and dropped a
no-op static_cast<int>() around a call that already returns int.

Verified: builds clean, clang-format v18 applied, clang-tidy Tier-2
(changed lines, .clang-tidy-new-code) clean via the local CI replica.

* chore: retrigger CI

The previous run hit a GitHub Actions infrastructure outage (job not
acquired by any runner, "Failed to resolve action download info" /
"Service Unavailable" on clang-format, Translation checks, mingw-w64
Debug and clang-tidy Tier-1) unrelated to this branch's code -- every
job that did run passed. No admin rights to rerun the failed jobs
directly, so retriggering with an empty commit instead.
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
…xDataViewCtrl (amule-project#842)

Adds CMuleBarRenderer, a wxDataViewCustomRenderer that draws a CBarShader chunk bar, and ports CSharedFilesCtrl from the owner-drawn wxListCtrl to wxDataViewCtrl (amule-project#180, amule-project#801).

Follow-up work on top of the port:

- the bar renderer now sizes to its column: GetSize() returned a constant width, which the generic backend ignores but the native macOS backend takes as the cell size
- the four dataview-ported lists no longer pass wxLC_REPORT|wxSUNKEN_BORDER, left over from their wxListCtrl days; wxLC_REPORT shares its bit with wxDV_VARIABLE_LINE_HEIGHT, so it had been silently enabling that
- the rating/comment smiley moves to its own sortable Rating column, so File Name no longer needs an icon renderer that indents every row without a smiley; default widths revised alongside
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
Continues the wxListCtrl -> wxDataViewCtrl migration (amule-project#180, amule-project#801), porting CDownloadListCtrl onto the CMuleBarRenderer bridge from amule-project#842.

The Progress cell is composite rather than a plain chunk bar, so CDownloadBarRenderer draws the base bar and adds the completed-progress strip and percentage on top; CBarFillSpec carries the row's item-data pointer so a renderer subclass can reach its own domain type. The per-row cached wxBitmap is not carried forward: CBarShader::Draw() costs microseconds at this cell size, and a cache keyed by a raw CPartFile* would collide with a freed-and-reused address.

FileCtrlItem_Struct is gone -- item data is CPartFile* directly, matching CSharedFilesCtrl -- and m_ListItems becomes a plain std::set, having never backed a real hierarchy. muuli_wdr.cpp drops wxLC_REPORT|wxSUNKEN_BORDER for Downloads, matching 71bdb1a for the lists ported earlier.
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
…ct#850)

Last remaining piece of amule-project#801's wxListCtrl -> wxDataViewCtrl migration: the shared base behind CSourceListCtrl and CSharedFilePeersListCtrl.

ClientCtrlItem_Struct survives rather than being deleted, unlike the previous ports: one client can be a source or peer of more than one file at a time, so row identity is the (client, owner, type) tuple. Its cached wxBitmap fields are dropped, matching the no-cache precedent from the Shared Files and Downloads ports.

Two bar columns, two renderers: CSourceBarRenderer draws the 5-state chunk bar and substitutes a bordered A4AF text badge for those rows, while the peers' availability column needs only the base renderer and ships without SORTABLE, since no comparison exists for it and none did pre-port. The User Name column is a composite icon cluster plus optional country flag plus text, so it goes through CClientNameRenderer, reaching the row via the identity-carrying CBarFillSpec extension point; GetItemColumnText() still answers plain text there, so type-ahead and the accessible row label work off real text rather than the pre-port empty string.

CompareItemData() keeps the original SortProc's type precedence, sorting A4AF sources last regardless of direction, before dispatching per column. muuli_wdr.cpp drops the legacy wxLC_REPORT|wxSUNKEN_BORDER flags for both lists.
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
…endored wxGenericListCtrl (amule-project#855)

Follow-up to amule-project#801/amule-project#180: with the client-list port done in amule-project#850, CCommentDialogLst was the only remaining instantiator of CMuleListCtrl and CMuleVirtualListCtrl had no derivers left.

CCommentDialogLst drops to a plain wxListCtrl -- a small read-only modal list that does not warrant the CMuleDataViewCtrl treatment -- with click-to-sort reimplemented by hand. amuleDlg's exit-time SaveListControlSettings() widget walk goes too: it existed because CMuleListCtrl only saved lazily from its destructor, which the tray-Exit path could skip, whereas CMuleDataViewCtrl writes column widths and sort orders eagerly on every resize, sort and show/hide, and SaveGUIPrefs() still flushes on every close path.

That leaves CMuleVirtualListCtrl, CMuleListCtrl and the vendored wxGenericListCtrl with no consumers, so all four files are deleted. IsListBackgroundDark() moves to MuleColour.h. CListColumnStore's legacy config-migration path is untouched -- it still reads pre-dataview TableWidths* entries.

One known simplification: the comments dialog loses its header sort-arrow glyph, which plain wxListCtrl does not draw. A follow-up restores it via ShowSortIndicator().
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Close the GitHub Wiki and change URLs in aMule repository

3 participants