As part of #1532 it was identified that long running file transfers
could get lost deep in the chatlog. This could result in unexpected use
of bandwidth over time if users lose track of old/large transfers. This
commit updates the files form to show in progress file transfers and
offer a way to control them.
* FilesForm now works on ToxFiles instead of finished file paths
* FilesForm widgets have been replaced with an MV tree view with depth
1. The existing QListWidget did not provide us the controls to render
more complex items. The use of delegates allows us to efficiently draw
progress bars and controls
* getHumanReadableSize has been extracted from FileTransferWidget into a
more general utils file
* Refactor/test ToxFileProgress to ensure that when it's moved it
behaves well
* Notice problems with speed averaging. We were average speeds without
keeping track of the times they were over. Adding samples of different
lengths would result in incorrect speeds. Refactor whole class to correct
* Move ToxFileProgress to be a member of ToxFile
* Remove duplicated members between ToxFile and ToxFileProgress
* Move sample addition into CoreFile
By profiling qTox using perf I discovered, that
NotificationIcon::updateGradient takes significant amount of CPU time
even though qTox is idle and no one is typing.
This commit fixes:
1) correctly determine visibility of NotificationIcon
2) only invalidate boundingRect in fixed intervals
3) apply the same fixes to Spinner since it has the same problem
Anthony Bilinski (20):
revert(chatlog): "fix stick to bottom behavior"
revert(chatlog): partially revert "prevent invalid history access"
revert(chatlog): "add comments for functions that load history"
revert(chatlog): "scroll bar stuck to bottom (fix#5755)"
revert(chatlog): "update workerStb"
revert(chatlog): "optimize load messages during the search"
revert(chatlog): "feat: save selected search text after scrolling up"
revert(chatlog): "feat: check chat status before start a search"
revert(chatlog): "fix: data validation during the search"
revert(chatlog): "fix a crash when there are no messages to load"
revert(chatlog): "prohibition to remove messages in group chat"
revert(chatlog): "edit load history when scrolling"
revert(chatlog): "simple edit code"
revert(chatlog): "remove part messages from chat"
revert(chatlog): "edit position chat after load history"
revert(chatlog): "add action "Go to current date""
revert(chatlog): "edit load history in search"
revert(chatlog): "edit function "Load chat history""
revert(chatlog): "load messages from the database after date"
chore(review): Copyright notice cleanup
Mick Sayson (8):
fix(history): Fix qt deprecation warning
revert(chatlog): "feat: load messages from the database before date"
revert(chatlog): Revert cleanup
refactor(chatlog): Move rendering of messages from GenericChatForm -> ChatLog
refactor(chatlog): Store ChatLine::Ptr in messages instead of ChatMessage
feat(chatlog): Re-implement sliding window ChatLog view
refactor(chatlog): Remove unused getRow functions from ChatLine
refactor(chatlog): Rename ChatLog -> ChatWidget
* Replace lines/messages with helper class to synchronize state between
IChatLog and ChatLog more easily
* selection indexes have been replaced with ChatLine::Ptrs, this is to
ensure consistency while the view slides around
* This has another benefit of removing all the code that has to
manually slide the selection boxes around
* Replaced all insertion/removal functions with single "insertAtIdx".
This helps ensure that mappings between ChatLogIdx and position within
the view are captured correctly as items in the view slide around
* workerTimeout replaced with more generic name "renderFinished" that is
used in synchronous and asynchronous paths
* Removed unused function ChatForm::insertChatMessage
* Re-implemented "Go to current date" with new ChatLog APIs
* Removed unused GenericChatForm::addSystemDateMessage. This is handled
by ChatLog now
* Resolves#6223
* Resolves#5878
* Resolves#5940
* Simplifies reasoning about who owns what functionality between
GenericChatForm and ChatLog. GenericChatForm is now just a layout
class and ChatLog handles all interactions with retrieving and
displaying messages from the model
* Reasoning for work is described in more detail in #6223
Add old glib to work with our old gnutls on redhat based systems.
Generally we would want to avoid providing our old libs that the distro's newer
libs that we use depend on, which would include harfbuzz in this case for glib,
but including harfbuzz breaks libfreetype on newer distros like arch.
Other libs that we use from the system with dependencies that we provide include
are libfreetype, libXdmcp, and libICE, but that is unchanged here.
Fix#6339
Define at least one virtual method in polymorphic class cpp files to
improve link efficiency. Do so by defining a defaulted destructor or
another overridden virtual method in the class cpp file.
Also add explicitly defaulted copy/move constructors and assignment
operators to follow the rule of five and to avoid compiler suppression
of these functions due to the addition of a user-provided destructor.
Where neccessary, create new cpp files and add them to CMakeLists and
Testing.cmake. Set the -Wweak-vtables by default when compiling with
clang to issue warnings for new classes that do not comply with this
pattern.
See http://llvm.org/docs/CodingStandards.html#provide-a-virtual-method-anchor-for-classes-in-headers.
Fixes#6036.
Reuse code from the file transfer widget to provide an image preview
on paste/grab. This prevents users from accidentally sending images they
did not mean to when their clipboard is not in the state they thought it
was.
Implementation exposes the genericchatlog vbox to the child classes and
chatform injects the imagepreview into it.