Repository navigation
Conversation
Images (CF_DIB, CF_DIBV5, PNG) are by far the largest items in the database. With a long retention time the database can grow to many GB, mostly from old screenshots. New advanced option "Delete images (CF_DIB, PNG) from clips not used in x days (0 = never)", default 0 (disabled). When set, RemoveOldEntries removes the image formats from clips whose lastPasteDate is older than the set number of days. Other formats of the clip (text, html, rtf) are kept; clips that only contained image data are deleted. Clips with shortcuts, in groups, sticky or set to never auto delete are skipped, the same rules as the existing expire option. Like the MainDeletes cleanup, this only runs when the computer has been idle and processes MainDeletesDeleteCount clips per run so deleting the large blobs doesn't lock the db. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds an advanced option to automatically delete image data (CF_DIB, CF_DIBV5, PNG) from clips that haven't been used in a set number of days, while keeping everything else.
Related: #897 (auto delete images), #875 (30 GB database).
Motivation
Images are by far the largest thing in the database. With a long retention time, old screenshots end up taking almost all of the space. On my machine (keep 365 days / 10,000 copies), removing old image data shrank the database from 9 GB to 300 MB. I still wanted to keep a long history of text clips. Today the only options are to shorten retention for every clip, or to delete images by hand in Delete Clip Data.
What it does
New option in Options → Advanced:
When set,
RemoveOldEntriesnow also calls a newRemoveExpiredImages:lastPasteDateis older than the setting and that have aCF_DIB,CF_DIBV5orPNGformat.Data. A clip that had other formats (e.g. Excel/Word copies with text + HTML + image) keeps them.CRCis set to 0, so copying the same content again creates a new clip with the image instead of moving the image-less clip to the top.UPDATE_CLIP_DESCRIPTION) so the cached thumbnail goes away.CClipIDs::DeleteIDs, same as the other expire paths.To avoid locking the db while deleting large blobs, it uses the same throttling as the
MainDeletescleanup:IdleSecondsBeforeDelete.MainDeletesDeleteCountclips per run.checkIdleTime = false) skips the idle check.New databases use
auto_vacuum, so the space is returned to the file system automatically. Older databases may need Compact and Repair once to shrink the file.Files
Options.h/.cpp:Get/SetExpiredImageDays(ExpiredImageDays, default 0)AdvGeneral.cpp: new property in the advanced gridDatabaseUtilities.cpp:RemoveExpiredImages, called fromRemoveOldEntriesTesting
Data_ParentId_Formatindex.IdleSecondsBeforeDelete=0so the timer didn't wait for idle.MainDeletesDeleteCount.auto_vacuum.🤖 Generated with Claude Code