Features:
100x speedup for full-text search queries with better quality by @kozlovsky in #7025, #7166, #7259
Upgrade the TagComponent to the KnowledgeComponent by @drew2a in #7070
#2455 Added edit metadata GUI elements by @devos50 in #7112
Update Popularity community by @xoriole in #6950
Add Tribler translation to Spanish by
@Manuel-Senpai in #7235, #7246
Bugfixes:
Fix #7295 invalid health records infect Tribler nodes and spread from machine to machine fixed by @kozlovsky & @drew2a in #7286, #7313, #7322
Add ProcessLocker to ensure that no more than one Tribler GUI/Core process runs locally at any moment by @kozlovsky in #7212
Hopefully fix #7137 CoreConnectTimeoutError: Could not connect with the Tribler Core within 120 seconds by @kozlovsky in #7251
#6994 Tribler Core process continues to work after the GUI process crash by @kozlovsky in #6995
#5833 WatchFolder PermissionDenied by @drew2a in #6966, #7016
#6884 Add Magnet Dialog disappears until restarted by @drew2a in #6885
#6890 Fix Eva InvalidStateError by @drew2a in #6891
#6833 Avoid incorrect padding by @drew2a in #6898
#6973 Rewrite window geometry restoring by @drew2a in #7008
#6987 Handle incorrect tracker URLs by @drew2a in #7012
#3037 Fix "bencoded item count limit exceeded" by @drew2a in #7015
#7051 Fix stack overflow for a torrent with a deep directory structure by @kozlovsky in #7052
#5816 RuntimeError: nested asn1 error by @drew2a in #7128, #7302
Fix initialization of Ipv8Endpoint in RESTComponent by @kozlovsky in #7044
#7053 Tribler becomes unresponsive with a large tags.db by @drew2a in #7062
Fix #7065 error while attempting to bind on address by @drew2a #7071
#7080 The Upgrader might not copy some files by @drew2a in #7083
#7077 Tribler is asking to upgrade version too frequently by @drew2a in #7101, by @vi in #7102
#7107 Error on rendering tablecontentdelegate by @xoriole in #7108
#6699 the width of the Size column on Windows when the display scaling is more than 100% by @kozlovsky in #7131
#7056 adding torrent with invalid magnet link to channel by @xoriole in #7058
#7106 crash when file progress is empty by @xoriole in #7114
#7149 Core Tribler notifier should work in async mode by @kozlovsky in #7151
#7154 Error on clicking blank space below the item list on personal channel by @drew2a in #7155
#7157 RuntimeError: invalid torrent handle used by @drew2a in #7157
#7172 ValueError: invalid literal for int() with base 10 by refactoring get max_lines logic by @drew2a in #7173
#7181 Enable token balance refresh only if widget is available by @xoriole in #7201
#7059 Handle non-existing file in torrent info endpoint by @xoriole in #7203
Link detection fix by @Dmole in #6716
#7041 Request Error while pressing the "download" button by @drew2a in #7211
#7177 Tribler does not close if left idle for a few hours by @xoriole in #7202
#7213 ValueError: invalid literal for int() with base 10 in TorrentDef.is_private() by @kozlovsky in #7214
#7216 AssertionError in RestManager.stop() by @kozlovsky in #7217
#7218 Do not load Debug Window if settings is not available yet by @xoriole in #7219
#7223 UnicodeDecodeError in on_metadata_received_alert by @drew2a in #7224
#7225 ClientConnectorError: Cannot connect to host by @drew2a in #7226
#7117 RuntimeError: invalid torrent handle used by @drew2a in #7230
#7231 Ignore payout in the case of the OrmError happens by @drew2a in #7236
#7271 ValueError: "Unable to convert 222222 to QColor" by @kozlovsky in #7272
#7253 Tribler does not run if the state directory does not already exist by @kozlovsky in #7257
#7187 A download in GUI fluctuates between "0%" and "Seeding" by @drew2a in #7205
#7318 GUI downloads status update by @drew2a in #7319
#7316 mathematical mistake in the download progress bar drawing by @drew2a in #7317
#7321 KeyError while surfing through a channel's content by @kozlovsky in #7323
Fix item_rank(), torrent_rank(), freshness_rank() functions by @kozlovsky in #7338
#7333 On GUI side, handle Core REST API responses without data by @kozlovsky in #7334
Rename the column with a torrent's creation date from "Updated" to "Created" to avoid confusion by @kozlovsky in #7340
#6842 Some settings are not used if torrent loaded from watch folder by @drew2a in #6863
#7314 long shutdown by @drew2a in #7315
#7188 Add shutdown for the KnowledgeRulesProcessor by @drew2a in #7189
#7192 Task was destroyed but it is pending! Transfer.start_request() by @drew2a in #7193
Remove streaming related sentences from main README.md by @drew2a in #6826
Code improvements:
#7158 Limit the log size by @drew2a in #7160
Obfuscate machine name for Sentry events by @drew2a in #7023
Add core stdout breadcrumb by @drew2a in #7022, #7033
#7066 Extract a real core error from CoreError for the Sentry Reporter by @drew2a in #7072
Simplify Session class by @drew2a in #6955
Add "subclass match" for session.get_instance() by @drew2a in #7060
Improve the EVA protocol by @drew2a in #6831, #6889, #6878, #6882, #6883, #6887
Config refactoring by @drew2a in #6879
Add typings to the Download class by @drew2a in #6880
Add logging for LibTorrent events by @drew2a in #6867
Add format_error_message function by @drew2a in #6881
Simplify base64 conversion in get_pieces_base64 by @drew2a in #6897
Stricter signature for ErrorHandler.gui_error() by @kozlovsky in #6846
Extract the run_threaded function to the pony_utils.py by @drew2a in #7150
Refactoring of the tail function by @drew2a in #7...