Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ Implemented per-channel time range filtering by adding support for dump-from and
### [@volker-fr](https://github.com/volker-fr) - Volker
Contributed numerous features and improvements: vacuum tool for database cleanup, file deduplication support, SQLite error handling improvements, channel user caching to reduce redundant API calls, thread optimization by skipping unnecessary user fetches, and dev experience improvements with Makefile documentation and additional tests.

### [@icgma](https://github.com/icgma)
Improved resume and backup workflows by adding resume-time entity deduplication, updating interactive login to prefer a system browser when Slack rejects bundled Chromium, and contributing the Replit + Google Drive backup recipe.

## Individual Contributors

### [@ChrisEdwards](https://github.com/ChrisEdwards) - Chris Edwards
Expand Down Expand Up @@ -87,9 +90,18 @@ Fixed the viewer showing the wrong user name for DMs with a single conversation.
### [@Fizmatik](https://github.com/Fizmatik) - Yuriy Tolpygo
Fixed multiple bugs: range copy bug, DM member assignment, and SQLite variable limit exceeded error.

### [@lzaldivarkt](https://github.com/lzaldivarkt) - Luis Zaldivar
Fixed Edge client initialisation so it only uses Slack Edge APIs with `xoxc-` client tokens.

### [@pR0Ps](https://github.com/pR0Ps) - Carey Metcalfe
Added `slack-to-discord` to the Discord migration documentation.

### [@chawlz7](https://github.com/chawlz7) - Charles Spellman
Added stale thread and channel filtering flags for faster resume runs on long-lived archives.

---

**Total Contributors**: 28
**Total Contributors**: 32

This list is sorted by number of contributions. Every contribution, no matter how small, helps make Slackdump better for everyone!

Expand Down
5 changes: 5 additions & 0 deletions cmd/slackdump/internal/convertcmd/assets/convert.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ Where format is one of the following:
- `export`: **Slack Export**: The native Slack export format. Output is a directory or a zip file.
- `html`: **Static HTML site**: A browsable archive rendered to HTML files. Output is a directory only.

The `html` format uses the built-in viewer renderer. The generated static site
contains channel pages, thread pages, file links, canvas content where
available, and user profile panels that work without a running Slackdump
server.

By default Slackdump converts to Slack Export format and writes to a ZIP file
output.

Expand Down
4 changes: 4 additions & 0 deletions cmd/slackdump/internal/diag/dedupe.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ and files created by resume look-back overlap. The latest copy of each
identical payload is kept. By default it only reports what would be removed.
Pass the archive directory, not the slackdump.sqlite file. Use -execute to
perform deduplication.

The same cleanup can be run automatically after a successful resume with:

slackdump resume -dedupe <archive_directory>
`,
}

Expand Down
52 changes: 52 additions & 0 deletions cmd/slackdump/internal/man/assets/changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,57 @@
# What's New?

## v4.4.0

### New Features

- **Faster, more selective resume**: `slackdump resume` now supports
`-skip-complete-threads`, `-skip-stale-threads <duration>`, and
`-skip-stale-channels <duration>` to avoid re-fetching thread or channel
entities that are already complete or have gone dormant. Stale filters run
before any Slack API calls and exit successfully as a no-op when everything is
filtered out.

- **Post-resume dedupe**: `slackdump resume -dedupe` runs duplicate cleanup
automatically after a successful resume, using the same cleanup logic as
`slackdump tools dedupe`.

- **Improved interactive login compatibility**: browser-based workspace login
now prefers an installed system browser for the interactive "Login in
Browser" flow, working around Slack rejecting the bundled Chromium revision.
Use `slackdump workspace new -bundled-browser` to force the previous bundled
browser behaviour.

- **Viewer static and interactive polish**: the archive viewer now has shared
viewer-side JavaScript for side-panel state, active-channel highlighting,
connection-status handling, and tab keyboard navigation. Static HTML output
also supports user profile panels via anchors, and viewer layout has improved
responsive behaviour.

- **Wizard help pager**: command wizards now expose a Help menu item backed by
a scrollable pager, with centralised key bindings and consistent help styling
across TUI components.

- **Replit + Google Drive backup recipe**: `contrib/replit_drive_backup`
contains a resumable uploader that mirrors a Slackdump archive directory to
Google Drive from a Replit workspace.

### Bug Fixes

- `thread_not_found` is now treated as a non-critical thread fetch result, so
stale or deleted threads no longer fail a run.
- `slackdump resume -threads -skip-complete-threads` now keeps direct thread
resume items and applies the complete-thread check after the first successful
`conversations.replies` page.
- Resume now distinguishes an invalid empty archive from a valid no-op caused
by stale filters, and filtering to no results no longer reports an error.
- File download deduplication during resume is now an explicit database
controller option instead of depending on the command name.
- Edge client setup is restricted to `xoxc-` client tokens, avoiding failures
with token types that cannot use Slack Edge APIs.
- Fixed several TUI regressions: shared Huh keymap state, config checker pane
sizing, boolean toggles, number-key navigation, date picker polish, and
scrollable wizard help sizing.

## v4.3.0

### New Features
Expand Down
16 changes: 16 additions & 0 deletions cmd/slackdump/internal/resume/assets/resume.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,22 @@ slackdump resume -dedupe slackdump_20241231_150405
Deduplication runs only after resume finishes successfully. To preview or run
the same cleanup manually later, use `slackdump tools dedupe`.

### Skipping complete threads.

When `-threads` is enabled, resume normally re-fetches every known thread in
the lookback window. Use `-skip-complete-threads` to skip a thread when the
database already contains the parent message plus the number of replies
reported by Slack:

```plaintext
slackdump resume -threads -skip-complete-threads <archive>
```

This is faster for append-only archives, but it will not detect edits or
deletions inside a thread that already appears complete. Direct thread resume
items are still kept; the complete-thread check runs after the first successful
`conversations.replies` page so Slack's current `reply_count` is available.

### Skipping stale entities.

Long-lived archives accumulate channels and threads that have not received any
Expand Down
4 changes: 4 additions & 0 deletions cmd/slackdump/internal/view/assets/view.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ specified directory or file.
Viewer supports displaying downloaded images, videos as well as remote
content.

The viewer uses a side panel for threads and user profiles, keeps the active
channel highlighted while navigating, and reports connection problems if the
local viewer server becomes unreachable.

## Usage

```bash
Expand Down
Loading