summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2017-02-27Redesign highlight logic and processingTobias Markmann
The new highlight logic follows a simpler model. It supports: * highlighting of whole words in a message * highlighting messages by sender name * highlighting if the user’s name is mentioned Possible actions for these highlights are text colouring, sound playback of WAV files, and system notifications. In addition the user can decide to receive sound and system notification on general incoming direct and group messages. Redesigned the highlight configuration UI dialog for this new model. ChatMessageParser class now deals with all parsing and marking up the chat message with the matching HighlightActions. Highlighter class has been extended to deal with all sound and system notification highlights that should be emitted by a specified chat message. Moved some tests over to gtest in the process. Test-Information: Tested UI on macOS 10.12.3 with Qt 5.7.1. Manually tested that correct system notification are emitted on mentions, keyword highlights and general messages. Added new unit tests to cover new highlighting behaviour. Change-Id: I1c89e29d81022174187fb44af0d384036ec51594
2017-02-24Add Sparkle license to about dialog COPYING file on demandTobias Markmann
If scons detects a Sparkle release in the 3rdParty folder, it will add the containing LICENSE file at the end of the dynamically generated COPYING file. Test-Information: Tested that the contents of Sparkle’s LICENSE file are at the end of the text in the license window of the about dialog, if the Sparkle folder, with a Sparkle release inside, is present in 3rdParty. Tested that Swift builds fine, if the Sparkle folder is missing in 3rdParty. Change-Id: I89db155b5bb3eef4d632997fd99ff270b4720a16
2017-02-24Fix sorting of emoji categories in the emoji dialogTobias Markmann
This also changes the minimal height of the emoji dialog to hold about 8 emoji rows. Test-Information: Tested on macOS 10.12.3 with Qt 5.7.1 that the categories are sorted in a more sensible manner and that the dialog at least shows about 8 emoji rows. Change-Id: I8c5518f8d552a581d5073b5f155425580f72938a
2017-02-24Use FlowLayout instead of QGridLayout in QtEmojiGridTobias Markmann
FlowLayout is an official BSD-licensed Qt example showing how to implement custom layouts. It will layout items dynamically in rows. This way we don’t need static column/row calculations for QGridLayout and it looks better. Test-Information: Build and ran on macOS 10.12.3 with Qt 5.7 to test that it has a better, less spacious look. Change-Id: Ief1299b0d3fb1e516a1973469f4f9a26824942f2
2017-02-24Remove ‘regional’ category from emoji dialogTobias Markmann
Test-Information: Build and ran on macOS 10.12.3 with Qt 5.7.1 and verified the ‘regional’ category was gone from the dialog. Change-Id: I664d5b8600037b42453c12ea0f180d0acd29361f
2017-02-23Change the logic of displaying chat room subjectJoanna Hulboj
Test-Information: Run Swift and join any MUC room, on join there is no information displayed regarding room subject. Choose "Change subject", the following information is displayed in the chat window: "The room subject has been removed" after the subject was removed, or "The room subject is now: some subject" after the room subject was set to "some subject". Run Swift join any MUC room, disconnect from server (using another Swift client change subject to "Test") after reconnecting the following information is displayed in chat window: "The room subject is now: Test" Change-Id: Ice901697a6a381464d694147b17830b4e62c8198
2017-02-23Fix crash in Swift about dialog if build w/o auto update supportTobias Markmann
Test-Information: Previously Swift crashed on QtAboutWidget.cpp:175 when build without any auto update support. Now it does not anymore. Tested on macOS 10.12.3 with Qt 5.5.1. Change-Id: Ia58ec3679d107cfd6b736e54e90a4167cf1adc47
2017-02-23Disconnect signals in ComponentSessionStanzaChannel dtorTobias Markmann
This is similar to what is currently already done in the dtor of ClientSessionStanzaChannel. This should fix potential crashes that have been reported in Sluift with ASAN enabled, showing a heap-use-after-free in ComponentSessionStanzaChannel::handleSessionFinished. Test-Information: All unit tests pass successfully on macOS 10.12.3 with clang-5.0. Change-Id: Id1e95894f9d5fe85922c0e11d18a38d46bd08e3c
2017-02-22Fix double entries in MUC participant lists after merging nicksJoanna Hulboj
Test-Information: Tested using Psi and Swift. Log in to Psi and Swift as UserOne. Enter Room (e.g. testRoom) using Swift and join the same room from Psi using drop down menu Join Groupchat. Splitting: change nick from UserOne to UserTwo. Swift correctly displays: UserOne, UserTwo. Merging: change nick back from UserTwo to UsetOne. Swift correctly displays: UserOne. Change-Id: I291eddd5aed154fb0babe1b0ada0a15a317eacdb
2017-02-22Cache some recently used entity capability lookups in memoryTobias Markmann
Previously any entity capability lookup was only cached on the disk. This meant that even for a cache hit, you would read from disk and parse the disco info XML in the cache, to return the result. This commit adds an addition LRUCache based in-memory cache. This extends the EntityCapsProvider API with a non-const method, i.e. getCapsCached, which allows active caching of results from the disk cache. Test-Information: All unit tests pass on macOS 10.12.3. This noticeably speeds up the duration of a join of a large MUC room, i.e. about 160 occupants, to about half of the previous duration. Change-Id: I0fc254cda962860416713822ddcad15ae13085f1
2017-02-22Improve Swift about window regarding auto update UXTobias Markmann
The dialog will automatically initiate a check for updates when opened. It will show the current state of the auto updater backend, e.g. whether it is downloading or already at the latest version. This also fixes update channel selection being shown on Windows and Linux. Test-Information: Ran Swift and opening the dialog shows a short progress bar indicating it checking for updates. Afterwards it shows that it is already running the latest version, which is sensible for a dev build. Change-Id: Ie08cd2a8852e468d6007122604b532fedc24bcfe
2017-02-22Add LRUCache utility class to SwiftenTobias Markmann
This implements a simple lookup cache with least recently used replacement strategy. This also adds Boost.MultiIndex from version 1.56 to 3rdParty. Test-Information: Added some unit tests for LRUCache, which pass on macOS 10.12.3 with clang-5.0 Change-Id: I0567945b1197d3fe786bf9d82fdb5e755743b975
2017-02-21Add checks to verify if the input data is a valid XML/XMPPJoanna Hulboj
Test-Information: Unit tests pass OK. Change-Id: Ibd7897c1c1249af7ac60a6549afd4c2362fcf0c0
2017-02-21Improve README.md regarding Windows build instructionsTobias Markmann
Described 64-bit Windows build and the QtWebKit situation for Qt 5.7 and later. Test-Information: None. Change-Id: I33740e81c27b2dddbd00f058e49c18fefed75843
2017-02-20Add alternative zoom shortcuts on macOS and workaround Qt bugTobias Markmann
This adds the Ctrl + Minus and Ctrl + Equal shortcuts for zoom out and zoom in respectively. In addition, this commit provides a workaround for QTBUG-56571. Test-Information: Tested on macOS 10.12.3 with Qt 5.7.1. Tested with German and UK keyboard layout. On UK layout both shortcuts, Ctrl + (+/-) and Ctrl + (=/-) work. On German layout only Ctrl + (+/-) works. Change-Id: Ifbcab308c9a8f4c88b51978969c73c3c1138a9ba
2017-02-20New Unicode Emojis DialogThibault Meunier
The new selector behaves like the old one. However, selection of an emoji results in the corresponding UTF-8 sequence to be inserted into the input widget instead of a ASCII emoticon. The code is based on the Emojione library which is MIT licensed. Emojione provides a mapping from shortnames to relevant Unicode codepoint, as well as mappings from textual emoticons (e.g. ). This commit does not modify the existing emoticon parser and so does not include any ability to enter emojis via text entry. The part of the Emojione library required to generate the mappings in C++ is included in this patch, specifically the emoji.json file. It is used to generate a corresponding .cpp file. Mapping code can be generated as follows: * cd BuildTools/EmojisGenerator/ * (optional) update emoji.json from https://github.com/Ranks/emojione/blob/master/emoji.json) - Version used with this commit: ba845a7 * npm install * node generate.js Test-information: General * Click the emoji button opens the selector * Change tab * Click an emoji and check it appears correctly * Click outside emoji dialog hides it Emojis * Emojis are well printed on macOS with Qt 5.7.1 * Emojis are black/white on Windows 10 with Qt 5.7.1 * Emojis have the right tooltip (when mouse is hover) * Check emojis are rendered appropriately by the receiving client Tabs * Tabs have the right tooltip * Click an emoji adds to recent tab * Emojis in the Recent tab are ordered by last click date (with a maximum of 50 "recent" emojis) * Recent emojis are saved in the QtSetting under "recentEmojis" Change-Id: Ibd07b8713d6272da6a8a4c9c35ddf866473f662b
2017-02-16Remove redundant UIEventStream* member from (MUC|Chat)ControllerTobias Markmann
Clang’s -Wshadow-field rightfully complained about it. Test-Information: Builds on macOS 10.12.3 with clang5 and Qt 5.7.1. All unit tests passed. Change-Id: Ib0705d518298e666c73d84150a043688a9d925ce
2017-02-14Sluift: Add shortcut for get disco_infoRoger Planas
So instead of doing something like this local features = client:get({ to = to, query = "<query xmlns='"..sluift.disco.features.DISCO_INFO.."'"..node.."/>" })['features'] we can now do something like this local features = client:get_disco_info({ to = to })['features'] That is, avoid raw calls. Test-information: Updated test calls to use new API and noticed no different behaviour to old code. Change-Id: I0d9a7c25c0f56499487f8aa0e67e30e9fa1b56ac
2017-02-10Display error message in profile window if vCard request failedTobias Markmann
Also fixed an typo error in GConfProxyProvider.cpp that prevented compilation on Linux. Test-Information: Tested with an XMPP server with vCard support disabled and also with vCard support enabled. Tested profile window and profile editor window. The profile window will show cached vCard data if present and the error message. The profile editor window will only show the error message in case of an error. Tested profile window and profile editor window in a scenario where vCard support is first enabled in the server, then disabled, and finally enabled again, and opening the editors in between. Potential error messages were always correctly cleared before showing the dialog. Tested on macOS 10.12.3 with Qt 5.7.1. Change-Id: I3958c35286f6f0096d1605c29816f666530aae03
2017-02-09Fix mouse movement when resizing trellis layout.Joanna Hulboj
Test-Information: From view menu choose "Change Layout", move mouse to resize trellis. Trellis resizing works fine. Change-Id: I112c0bd84dc57abb3bb95f825f74b2efa1f8e183
2017-02-09Update GConfProxyProvider to new string to HostAddress functionTobias Markmann
This change was missing in commit 43479ef. glib is automatically initialised nowadays and g_type_init() is a deprecated function. Surrounded the relevant code with a GLIB_CHECK_VERSION macro. Test-Information: Tested build on Ubuntu 16.04.1 LTS. Change-Id: Iea7242f6366d827b2cc6ce355cb923872f774a6c
2017-02-07Remove trusty and add yakkety to package_all_platforms.shTobias Markmann
Test-Information: None. Change-Id: Iaa0bad47c104b9407329d69329f3409af0d62e6d
2017-01-31Sluift: Add client methods for adding and removing JIDs from blocklistRoger Planas
A previous commit added a get_block_list() client method to retrieve the list of blocked items. This patch extends that and adds capabilities to add and remove items to such list. Test-information: Tested with client and was able to successfully add items to list, delete and delete all Also tried to delete a non existing item and it rightly complained. Change-Id: Iabbfdbd9e74ddc9740db5c9871b8355210aa0727
2017-01-27Sluift: Add handling of block/unblock eventsRoger Planas
Swiften handles blocklist event notifications, but those were not passed to Sluift, so a Sluift client, when querying events, would not be aware if an XMPP server pushes block/unblock. This patch adds an extra event type to Sluift so that method for_each_event reports block/unblock notifications, in addition to a new API 'get_block_list' to retrieve the blocklist from the server. Test-information: Used Sluift client to retrieve blocklist and it is as expected. Also used client to retrieve all items after adding, removing and removing all items in the blocklist, and Sluift clients can now see these events. Change-Id: I0b76289ebd9e63505ff8a99cd9c0aa0e93af0c22
2017-01-18Set cursor position to the center of the screen to show layout window in the ↵Joanna Hulboj
middle of the screen Test-Information: Tested with multiple screen setup. Tested only on Windows. From view menu choose "Change Layout", the layout window appears in the middle of the screen. Change-Id: Iab4ba64d54766426be39926773aa5b5bb628b9e9
2017-01-17Add Qt bin path to SCons process' PATH environment variableTobias Markmann
Test-Information: Tested scons dist=1 successfully on Windows 10 with Visual Studio 2015 and Qt 5.7.1. Change-Id: I41271f10367249e2e89fdba85f1d5c5305c548ff
2017-01-16Prevent cursor from jumping to the wrong position when using Change Layout ↵Joanna Hulboj
dialog Test-Information: Tested only on Windows with two monitors. Tested by opening Swift App on the first screen, next choose View->Change Layout, mouse cursor appears correctly on Change Layout dialog, next move Swift App to the second screen choose View->Change layout, mouse cursor appears correctly on Change Layout dialog. Change-Id: Ibb3e2ca1de6bcdb620104ff6b0940005ab85a827
2017-01-11Integrate googletest and googlemock libraries to 3rdPartyTobias Markmann
googletest and googlemock from release 1.8.0 have been copied to the 3rdParty folder. With this commit tests for Swift project can also written using googletest and googlemock APIs. The test runners will execute test suites written to either test library. Passing —-xml to a test runner will now create two test report XML files, namely $programName-report.cppunit.xml and $programName-report.gtest.xml. The ByteArrayTest has been converted to use googletest instead of googlemock to serve as an example and test the integration. Test-Information: Build all tests via ‘./scons test=all’ and verified all tests are run. Build all tests via ‘./scons test=all checker_report=1’ and verified that two report XML files are generated per test runner executed. Change-Id: I81a9fb2c7ea5612fc1b34eef70ed7e711bfeea81
2017-01-11Allow cancelling trellis resize window with escape keyJoanna Hulboj
Test-Information: From view menu chose "Change Layout". Cancelled the trellis resizer using Escape. Change-Id: I82e196f813cf34db9b50d812ce0597975432869f
2016-12-16Add missing libqt5svg5-dev to debian/config.inTobias Markmann
Test-Information: Tested this manually on our Debian builder. With this fix it stops complaining about missing Qt packages. Change-Id: I5fb25714f7e1b726f893f9475fded17c36677cef
2016-12-15Merge branch 'swift-3.x’Tobias Markmann
* swift-3.x: - Fix building Swift on 32-bit Linux distributions - Remove optional_fwd.hpp use; workaround for Boost Bug #12179 - Split COPYING.thirdparty in contributions/dependencies - Fixes for building packages on Debian Conflicts: BuildTools/SCons/SConstruct Sluift/Console.h Sluift/ITunesInterface.h Sluift/Terminal.h Swift/Packaging/Debian/debian/control.in Swift/QtUI/SConscript Swiften/Elements/Stanza.h Swiften/FileTransfer/FileTransferTransporter.h Swiften/FileTransfer/IBBReceiveSession.h Swiften/JID/JID.h Swiften/Network/BoostConnectionServer.h Swiften/Network/ConnectionServer.h Swiften/Parser/AttributeMap.h Test-Information: Builds on macOS 10.12.1 with clang trunk. Change-Id: I9f41ab199f227bc106721627ea994313c68e5cfe
2016-12-09Fix overly bright rendering of status text in contact listTobias Markmann
Instead of adjusting the color lightness for the second line, the new code just draws the second line with 70% opacity. This provides a more consistent and predictable effect. Test-Information: Checked rendering of available, away, and busy contact rendering on macOS 10.12.1 and Windows 10. Change-Id: I417b80bdf8ea01db7a6e0e680b488d6a52c297dd
2016-12-09Do not emit windowClosing signal in QtTabbable dtorTobias Markmann
Instead, handle the QCloseEvent and emit the windowClosing signal there. This is an attempt to fix a crash I am unable to reproduce but which crash stack includes the signal emit in ~QtTabbable. Test-Information: Builds on macOS 10.12.1 with clang master. All unit and integration tests pass. Manual login and close of Swift worked without a crash. Change-Id: I470f3c5362fd0f502c542560854424e87fc0727e
2016-12-09Improve documentation of code related to impromptu chatsTobias Markmann
Test-Information: Builds and all tests pass on macOS 10.12.1. Change-Id: I58ca7ba27736d27426350f636dfe910f4f2f1b17
2016-12-09Fix issue with invites to MUC if a MUC PM for that room is openTobias Markmann
Previously if you wanted to invite people to a MUC and had a PM window for a MUC occupant open at the same time, the InviteToMUCUIEvent would be handled by the PM window, by the ChatController of the PM window and not the MUCController of the MUC window. Test-Information: Verified that some scenarios work correctly: - Tested a drop to a MUC window while a MUC PM window is open to an occupant in the MUC. Previously this crashed due to ChatsManager::localMUCServiceJID_ being empty. - Test that impromptu MUC creation to a normal chat works. - Test that impromptu MUC creation to a MUC PM chat works. All unit and integration tests pass on macOS 10.12.1. Change-Id: Ib20de7e925e3503308211936ee47d4ba829d0394
2016-11-30Show MUC PM item-not-found error in MUC PM windowTobias Markmann
Previously, if one would send a MUC PM to a user that has left a room the error response from the MUC would be shown in the MUC room. Now the error will show in the MUC PM window, if the MUC PM full JID has a ChatController. Test-Information: Added unit test verifying new behaviour. Manually verified that the error is shown in the MUC PM window instead of the MUC room window. Change-Id: I1b259d5eee9e22217bbe7e5c09294d2166a77895
2016-11-28Correctly handle server initiated closing of streamTobias Markmann
If a server closes the XMPP stream, it sends a </stream:stream> tag. The client is supposed to respond with the same tag and then both parties can close the TLS/TCP socket. Previously Swift(-en) would simply ignore </stream:stream> tag if it was not directly followed by a shutdown of the TCP connection. In addition there is now a timeout timer started as soon as Swiften or the server initiates a shutdown. It will close the socket and cleanup the ClientSession if the server does not respond in time or the network is faulty. Refactored some code in ClientSession in the process. Moved ClientSession::State to a C++11 strongly typed enum class. This also fixes issues where duplicated </stream:stream> tags would be send by Swift. Test-Information: Tested against Prosody ba782a093b14 and M-Link 16.3v6-0, which provide ad-hoc commands to end a user session. Previously this was ignored by Swift. Now it correctly responds to the server, detects it as a disconnect and tries to reconnect afterwards. Added unit test for the case where the server closes the session stream. Change-Id: I59dfde3aa6b50dc117f340e5db6b9e58b54b3c60
2016-11-23Fix building with Avahi support on LinuxTobias Markmann
This was broken in commit 43479ef. Test-Information: Build with Avahi support on Ubuntu 16.04.1. Unit tests passed. Change-Id: If7ee5f740510956d89f6c406e68b92ddeb61cf85
2016-11-23Migrate remaining Swiften/Base/foreach.h use to range-based for loopTobias Markmann
Test-Information: Build on macOS 10.12.1 and all tests pass. Change-Id: Iedaa3fa7e7672c77909fd0568bf30e9393cb87e0
2016-11-22Add missing dependency for Debian unstable/sid in control.inswift-3.xTobias Markmann
Test-Information: Ran package.sh on Debian unstable/sid. Without this fix, building in package.sh failed due to missing zlib header files. With this patch it complains about missing zlib1g-dev package, and after installation of it successfully builds Swiften/Swift. Change-Id: I9babcd1a5f9e21c01b9c6e9a51a80200d7998538
2016-11-18Add scons options forcing for bundled Boost, libminiupnpc, libnatpmpTobias Markmann
Test-Information: Build Swiften on Debian 8.6 with all installed dependencies with and without passing these new options to scons. Either case built fine. Change-Id: I4867c0479a0d44b15e12918c5075e9039945ed95
2016-11-18Improve string to HostAddress conversion APITobias Markmann
Previously HostAddress had a constructor which allowed initialisation via a std::string. This initialisation can fail and this is heavily used for checking whether a string is a valid IP address. This constructor is removed in this commit and replaced by a static method HostAddress::fromString, taking a string and returning an optional HostAddress. This clearly communicates that the conversion can fail. Test-Information: ./scons test=all passes on macOS 10.12.1. Change-Id: Idaafee6f84010ce541c55f267ac77ad6ac8f02b4
2016-11-17Fix typo in update feed selection dialogTobias Markmann
Test-Information: None. Change-Id: I6a734918b48e512726344d5812642473067e40a9
2016-11-17Fix version strings generated by GenerateAppCastFeeds.pyTobias Markmann
Check for updates on start. Test-Information: Manually verified a random sample of 50 Swift version string pairs, that Sparkle currently compares them and detects the new version. Change-Id: Ic88a5fdc5feab42cdcb4cc3c2740d4c24718eb7b
2016-11-16Add output folder option to GenerateAppCastFeeds.pyTobias Markmann
Test-Information: Verified that the tool writes to the specified output folder on macOS 10.12.1. Change-Id: I91157dda1031632c1e536ae6b509f08a69dce6c3
2016-11-16Update GenerateAppCastFeeds.py according to recent discussionsTobias Markmann
The script will now take stable/testing releases from the …/downloads/releases path using per-release folders inside, and only dev builds from the …/downloads/development/mac path without per-release folder. Test-Information: Ran the script on macOS 10.12.1 on a mirror and verified that it generated the correct feeds. Change-Id: I9b2f5780cfcdafb64d0d75d1483643b522ea7bb2
2016-11-14Add script generating Sparkle appcast feedsTobias Markmann
This Python script parses the folder structure of Swift downloads locally and generates three appcast feeds to use for Sparkle updater. The three appcast feeds are written to the downloads folder supplied to the script. Test-Information: Ran script with Python 2.7.12 and manually checked the output. Change-Id: Ie1e71eecad4f65e48694b805878765806a3465ae
2016-11-11Add update channel configuration dialog to the about windowTobias Markmann
If software updates are enabled the about dialog will show the currently configured update channel and provides a link to a dialog to change the update channel. Test-Information: Builds on macOS 10.12.1, unit tests pass, and dialogs behave as expected. Did not test Sparkle updating. Change-Id: I05d5014f0d719ba9b2146c1e599db4f7fde80558
2016-11-10Move Qt specific setting constants to QtUISettingConstants.hTobias Markmann
Test-Information: Builds on macOS 10.12.1, ./scons test=all passes, Swift successfully logins and remembered Trellis configuration. Change-Id: Id94d6af1448d44d7d46ba2b8606f3e5ebe98be7a
2016-11-10Use FeatureOracle to detect file-transfer support in rosterTobias Markmann
The FeatureOracle provides tri-state feature lookup functionality for bare JIDs. It returns Yes if a feature is supported by all resources of the bare JID, Maybe if some support it, and No if none of the resources support it. If passed a full JID, it returns the specific features supported by that end-point. Sending a file to a bare JID, will send a file to the resource of the bare JID with the highest availability by presence, show status and priority and which supports the features required for a Jingle file-transfer. Test-Information: Added unit test verifying new behavior. All tests pass on OS X 10.11.6. Added new unit tests for FeatureOracle. Manually verified that the roster and chat window both use the same mechanism to detect support for file-transfers. Manually verified that file-transfers via the contact list goes to already bound full JIDs if there is an existing ChatController. Change-Id: I0175ac42ecb73f1d54f9c96ffbba773eb5e24296