media viewer top hover file info line
- added four checkboxes to
options->media viewer
to alter what shows in the media viewer top hover window's file info summary line. you can say whether archived status is mentioned; and if it is, if there should be a timestamp; and you can say whether individual file services should be enumerated; and if so, whether they should have timestamps - this same line is reflected in the main gui status bar when you have the new
options->thumbnails
checkbox set on--so if you missed seeing your current local file services on the status bar, it should be doable now, and in a more compact way
archived times
- there has been a bug for some time where if you import files with 'automatically archive' set in the file import options, an 'archive time' was not being recorded! this is now fixed going forward
- for the past instances of this happening, I have written a new
database->file maintenance->fix missing file archived times
job to fill these gaps with synthetic values. it can also fill in gaps from before archive times were recorded (v474, in 2022-02) - on the v602 update, your client will scan for this. if you have a large database, the update may take a couple minutes this week. if you have either problem, it will point you to the new job
- the job itself looks for both problems and gives you the choice of what to fix. for files imported since 2022-02, it assumes these were 'archive on import' files and inserts an archive time the same as the import time. for files imported before 2022-02, the synthetic values will be 20% between the import time and (any known deletion time or 2022-02), which is imperfect but I think it'll do
system predicates
- the system tags for
duration
,framerate
,frames
,width
,height
,notes
,urls
, andwords
are now writtensystem: has/no xxxxx
rather thansystem:xxxxx: has/no xxxxx
- the
system:file properties
UI panel is now a two-column grid. 'has xxxxx' on the left, 'no xxxxx' on the right system:has/no duration
added tosystem:file properties
(it is also still insystem:duration
, but let's see how it goes having it in both places. I am 50% sold on the idea)- the 'paste image!' button in the
system:similar files
edit panel now understands file paths when they are copied from something like Windows Explorer. previously it was only reading bitmaps or raw text, but when you hit ctrl+c on an actual file, it actually gets encoded as a URI, which is slightly different to raw text. should work now! - fixed the
system:duration
predicate's string presentation around 0ms, where it would sometimes unhelpfully insert '+/- no duration' and other such weirdness - fixed the
system:duration
edit predicate window initialising with sub-second values. previously, the ms amount on the main value or the +/- were being zeroed - the various
NumberTest
objects across the program that have a +/- in absolute or percentage terms now test that boundary in an inclusive manner. previously it was doingx < n < y
; now it doesx <= n <= y
, which satisfies 5 = 5 +/- 0, 6 = 4 +/- 50%, and 0 = 600 +/- 100% - the 'has/no' system pred shortcuts now all parse in the system predicate parser. the old format will still parse too. I added unit tests to check this, and more to fill in gaps for 'framerate' and 'num frames'
rating predicates specifically
- system:rating search predicates are now edited separately, which means that in the edit panel, each rating widget has its own 'ok' button. you edit one at a time with a clearer workflow
- the radio buttons involved here are now less confusing. no 'do not search' nonsense or 'is = NULL' to search for 'no rating'--you now just say 'has rating', 'no rating', or set the specific rating
- the inc/dec system pred box now has quick-select choices for 'has count' and 'no count'
- rating predicates have slightly simpler and nicer natural language labels. 'is like' and 'more than 2/3' rather than '= like' and '> 2/3'. 'count' instead of 'rating' for the inc/dec ratings. inc/dec rating predicates will also now swap in the new 'has count' and 'no count' too, rather than saying "> 0" explicitly
- the system predicate parser is updated to handle the new 'count' labels (but the old format will still work, so nothing should break™). new unit tests check this
- these panels now recover better from a predicate that refers to a service that no longer exists. in general, if you try to edit a bad pred (e.g. from an old session) it'll try to just ignore it and give you a popup letting you know
deleted similar files search
- the similar files system no longer de-lists files from the search tree when they are deleted. phashes being disassociated from deleted files was not intentionally enforced before, but it was legacy policy from an old optimisation when the search tech was far more limited than today; now the file filtering tech is better, and we can handle it CPU wise, and I now intentionally want to keep them. it should be possible to search similar deleted files in future. the similar files search code can get pretty wew mode though, so I wouldn't be surprised if there are some bugs in odd 'all known files' situations
- I do not think this functionality is too useful, but we might want to build a 'oh we have seen this file before and we deleted it then, so stop this import' auto-tech one day, maybe, if we combine it with multiple/better similar files hashes, so keeping deleted file data in our search trees will be the policy going forward. although I regret these perceptual hash disassociations, the good news is that pixel hashes were never removed, and this will be more useful for this objective
misc
- renamed 'human-readable embedded metadata' to 'embedded metadata' across the program, mostly just to stop it being so wide. I hate this system predicate, and with the jpeg stuff it is now a catch-all and basically useless as a discriminator. I have plans to replace it with a flexible all-in-one system that will integrate all the 'has icc profile' stuff together and bundle in fine search for 'jpeg:interlaced' or arbitrary EXIF data row search so you can search for what you actually want rather than the blanket 'uh some metadata I guess'
- the 'move files now' dialog in
database->move media files
has a new 'run for custom time' button so you don't have to do 10/30/60/indefinite. note I also hate this whole system and want to replace it in the middle-term future with a background migration job, so fingers crossed this whole mess will be gone before long - when you manually lock the database with the Client API, the bottom-right status bar cell now says 'db locked'. when it is reading or writing, it now also just says 'db reading/writing' rather than 'db read/write locked'
- the way the database updates the status bar with 'db reading' and stuff is now a little overhead efficient (it only updates the db cell, not the whole status bar)
- clarified the text in
options->importing
- moved the 'default export directory' option from 'files and trash' to the new 'exporting' panel
- if an SSLCertVerificationError occurs in a connection, the exception now has some extra info explaining the potential causes of the problem (issue #1642)
env stuff
- I added a DEBUG checkbox to
options->connection
that explicitly sets theREQUESTS_CA_BUNDLE
environment variable to yourcertifi
'scacert.pem
path, assuming that path exists and the env variable has not already been set. I'd like to test this a bit and see if it helps or breaks any situations, and maybe force it one day, or add some more options. also, I don't know much aboutCURL_CA_BUNDLE
, but if you want me to defer to that rather thancertifi
if it is already set, or you have other thoughts, let me know what you think - added
help->debug->data actions->show env
, which simply spams it to a popup and writes it to the log. it also splits up your various PATH vars for readability, but the list is usually giant so this is best actually read in the log rather than the popup atm. a couple other places where the env is spammed to screen also now uses this now format
Qt enum cleanup
- fixed up more Qt5 Enums to the new Qt6 locations, including those now under
Qt.ItemDataRole
,Qt.ItemFlag
,Qt.SortOrder
,Qt.ContextMenuPolicy
,Qt.Key
,Qt.KeyboardModifier
,Qt.MouseButton
,Qt.DropAction
,Qt.AlignmentFlag
,Qt.LayoutDirection
,Qt.Orientation
,Qt.CursorShape
,Qt.WidgetAttribute
,Qt.WindowState
,Qt.WindowType
,Qt.GlobalColor
,Qt.FocusReason
,Qt.FocusPolicy
,Qt.CheckState
,Qt.TextElideMode
,Qt.TextFormat
,Qt.TextFlag
,Qt.TextInteractionFlag
,Qt.ShortcutContext
,Qt.ScrollBarPolicy
,Qt.TimerType
,Qt.ToolButtonsTyle
,Qt.PenStyle
, andQt.BrushStyle
- and
QEvent.Type
- and
QItemSelectionModel.SelectionFlag
other code cleanup
- cleaned up the recent 'make width sort before height in most places' hacks into something nicer
- deleted the old 'Edit Multiple Predicates' panel py file, which was only handling the ratings stuff. was probably an interesting idea at some point, but it was too convoluted IRL, both for users and me to work with
- decoupled some rating-to-stars and stars-to-rating rating conversion code out of the rating services object
new macOS App
- sorry for no macOS App last week; github retired the old 'runner' that builds the App, and I missed the notifications. we are today updating from
macos-12
tomacos-13
, which appears to still work on intel machines macos-14
, whose migration will presumably come in a few years, will likely require Apple Silicon (ARM), at which point I'll have to tell older mac users to run from source, but that's a problem for the future