diff --git a/ChangeLog b/ChangeLog index d6793ecb..abf4bbd4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3559 +1,3563 @@ +Changes since 1.7.2: +* Added an easier method of copying text starting with # +* Fixed handling of IRC URLs for channels starting with more than one # + Changes from Konversation 1.7.1 to 1.7.2: Konversation v1.7.2 is a repackage of v1.7.1 with incomplete and badly maintained translations removed. They were accidentally included with the v1.7.1 release. There are no code changes in this release. Changes from Konversation 1.7 to 1.7.1: Konversation v1.7.1 is a maintenance release that addresses issues with some of the new features introduced in the last major release, such as SASL EXTERNAL and server-time support, along with other minor fixes. As per usual this maintenance release also ships the latest round of translation updates. * Fixed requesting the znc.in/server-time-iso capability from the server. * Fixed SASL EXTERNAL authentication without an account name set in the Identity settings. * Fixed clicking on nickname links containing the ` character. * Fixed the Highlight page in the Configure Konversation dialog not enabling/disabling the Apply button correctly. * Minor cleanups in application metadata setup code. Changes from Konversation 1.7-rc1 to 1.7: Konversation v1.7 is a major feature release focusing on greatly expanded protocol support, with newly-added support for many more IRC v3 extensions and the much-requested support for SASL EXTERNAL and 'server-time'. Many bugfixes and cleanups along with reinstated features initially lost in the first Frameworks 5-based release series v1.6.x are included as well. Finally, the handbook has been thoroughly refreshed in this release, and building and running on macOS and Windows have seen several fixes. * Two-finger scroll on the vertical channel list is now less sensitive. * Fixed execution of bundled scripts showing an error about locating translation files when running on a system without kde4-config installed. * Fixed a bug in executable command line parsing for passed URLs. * Fixed Konversation failing to start on Windows systems without D-Bus (it would previously exit if it failed to initialize its D-Bus service). * Ported from deprecated KDE Frameworks APIs to 5.24+ API (v1.7 requires Frameworks 5.25 or higher). Changes from Konversation 1.6.2 to 1.7-rc1: Konversation v1.7-rc1 is the first release candidate for the next major version of Konversation. The focus of the v1.7 release is on greatly expanded protocol support, with newly-added support for many more IRC v3 extensions and the much-requested support for SASL EXTERNAL and 'server-time'. Many bugfixes and cleanups along with reinstated features initially lost in the first Frameworks 5-based release series v1.6.x are included as well. Finally, the handbook has been thoroughly refreshed in this release and building on Mac and Windows has seen several fixes. * Improved support for CAP negotiation. * Output for CAP LS and CAP LIST is now shown in the server status view. * Added support for IRCv3 CAP MULTI-PREFIX. * Added support for IRCv3 CAP AWAY-NOTIFY. * Added support for IRCv3 CAP ACCOUNT-NOTIFY. * Added support for IRCv3 CAP EXTENDED-JOIN. * Added support for IRCv3 CAP USERHOST-IN-NAMES. * Added support for extended WHO. * Added support for server-time and message tags. * Added support for znc.in/server-time-iso, making buffer playback from ZNC much nicer. * Added support for the SASL EXTERNAL authentication mechanism, e.g. needed for using Tor with freenode. * Redesigned search bar in chat views. * Added support for font zooming to chat views. * Improved bi-di text handling in chat views. * The --restart command line argument works again. * Fixed command line argument parsing when Konversation is already running * Fixed tab completion not working when pressing tab after a full existing nickname as prefix. * Fixed the topic editor not updating when the topic changes. * Fixed nickname links including the pipe character. * Fixed the Invite dialog not closing on OK. * Fixed angle bracket display in OSD message bubbles. * Fixes to core protocol handling, e.g. in prefix parsing. * Fixed crash on close when the nick menu has been shown. * Fixed crash on quit. * Fixed crash when closing views. * Fixed crash in DCC resume dialogs without a Retry button. * Fixed incorrect icon for the global away action. * Minor UI layout cleanups, e.g. in the Behavior -> Chat Window settings page and fixes to tooltips. * Code cleanups, e.g. removal of unused settings and related code paths, porting away from deprecated API, and more. * Overhauled and corrected handbook & refreshed handbook screenshots to Frameworks 5 version. * Build fixes for Windows (MSVC compatibility and winsock linking). * The Windows and Mac builds now have app icons. * Improved code portability by using different byte swapping routines. * Updated AppStream metadata. * Konversation now depends on Qt 5.5+ and KDE Frameworks 5.25+. Changes from Konversation 1.6.1 to 1.6.2: Konversation 1.6.2 is a hotfix release that fixes an unfortunate severe crash condition that crept into 1.6.1. * Fixed a bug causing various operations on server list data to crash, e.g. pressing "Edit" on a server sub-item in the Server List dialog. * Translations for AppData metadata added in v1.6.1. Changes from Konversation 1.6 to 1.6.1: Konversation 1.6.1 is a maintenance release that contains various bug fixes for the stable KDE Frameworks 5-based version of Konversation. * Added an option to allow a server to bypass the global proxy settings. * Fixed a crash when changing the Qt style engine. * Fixed a crash when running "/exec -showpath" with no script name. * Fixed notification events for DCC Chats not working. * Fixed crash when closing the DCC Status tab. * Fixed crashes with the ISO-2022-JP encoding. * Fixed the "Close All Open Queries" action not working properly. * Minor UI polish, e.g. the margin under the nicklist when the Quick Button grid is disabled or emtpy. * Fixed missing icons on the Next/Previous buttons in the search bar. * On screens to small to fit Konversation's configuration dialog, the dialog will now show scrollbars around its content instead of the dialog buttons being forced off-screen. * Konversation now sets its window icon in a way that causes a hi-res icon to be available in window switchers such as Plasma's Alt+Tab UI. * Removed the spell checking language submenu from the context menu of the input bar - KDE Frameworks 5 now contains this upstream, leading to two submenus. * Fixed installing the Oxygen nickname list theme. * Fixed changes to the tab bar font's font weight being applied to the chat text area. * Minor changes to tooltips to support the Wayland windowing system better. * Fixed the Windows build. * Added KCrash (DrKonqi) support. * Improved support for the KDE Kiosk framework, fixing checks for the "shell_command" privilege. * Added AppData metadata for app stores. Changes from Konversation 1.6.1-beta1 to 1.6: Konversation 1.6 is the first stable release of Konversation built on the new KDE Frameworks 5 and Qt 5 library sets, improving integration into many desktop environments, including Plasma Desktop 5, and adding first support for hi-dpi scaling. In addition to porting and reworking things for hi-dpi scaling, a number of behavior improvements and bug fixes were implemented, particularly improved nickname selection behavior at connection time and better layout behavior for the channel topic area. Unfortunately the 1.6 release removes support for integrating with the KDE Address Book, as the interfaces Konversation was using to achieve this were dropped from KDE Frameworks. A replacement is in the works in the form of the new KPeople library, which we intend to use in a future release. Using KPeople, Konversation will then be able to tightly integrate with various contact management-related features in Plasma Desktop. * Improved support for character set aliases via KCharsets. * Improved behavior when reconnecting and Konversation had to use an alternate nickname for the previous connection because the preferred nickname was already in use: Konversation will now try harder to go back to nicknames sorted earlier in the identity's nickname list, instead of advancing down the list without checking whether earlier nicknames have become available again. * Konversation will no longer give up trying to connect when only a single nickname is configured and not available at connection time. Instead, it will do as many reconnection attempts as allowed by user configuration. * Fixed incorrect size calculations for the channel topic text label causing cut-off text and unwanted collapsing of the topic area. * Fixed a bug causing auto-connect not to connect to networks in the order they are listed in the Server List dialog. * Fixed a bug causing the main window not to be raised when an Konversation is started an additional time and the window is currently minimized. * The default tabs position is now 'Left', i.e. the treelist version of the tab bar. * Tabs can now be reordered by drag and drop again. * Fixed various rendering issues in the treelist version of the tab bar and made it high-DPI scaling-capable. * Fixed a bug causing Channel List tabs not to be sorted below the status tab of the server they belong to in the treelist version of the tab bar, and corrupt its contents. * Fixed margins in the Edit Network dialog. * Improved wording and correctness of several interface messages. * Fixed a bug causing some interface messages and labels not to use their translated versions when running with a language other than US English. * Fixed a bug causing Konversation not to generate default command aliases for installed scripts at startup anymore. * The bundled 'cmd' script now defaults to trying to decode command output as Utf-8 even when run on Python 2. * Fixed the bundled 'bug' script not working. * Fixed naming of bundled icons. * Konversation now opts into Qt's high-DPI pixmap handling. * Adjusted build system to use co-installable version of qca-qt5. * Fixed build failures on Windows. Changes from Konversation 1.5.1 to 1.6-beta1: Konversation 1.6-beta1 is the first release of Konversation built on the new KDE Frameworks 5 and Qt 5 library sets, and intended to allow you to help us test and shake out the remaining issues in the ported code. With stability despite many changes under the hood as the primary goal, the 1.6 release will not bring any new features, though Frameworks 5 and Qt 5 offer a host of efficiency improvements over the old stack and will enable us to support hi-dpi scaling and Wayland going forward. Known issues in this beta include a lack of addressbook integration support (the needed Frameworks dependencies have not yet been released), drag and drop support for tabs being disabled, and minor visual polish issues, including some visual assets not having been updated to match KDE's new "Breeze" visual identity yet. We expect to resolve these issues in upcoming releases. * Konversation now depends on KDE Frameworks v5.2.0 and Qt v5.3.0. * The default nickname list theme has been updated to KDE's new Breeze visual identity. * Notification events now have non-generic titles to prevent Plasma Desktop 5 from merging events from different sources. * Fixed a bug causing the "Focus Input Bar" action to be enabled/disabled at incorrect times. Changes from 1.5 to 1.5.1: Konversation 1.5.1 is a maintenance release containing only bug fixes. The included changes address several minor behavioral defects and a low-risk DoS security defect in the Blowfish ECB support. The KDE Platform version depen- dency has increased to v4.9.0 to gain access to newer Qt socket transport security flags. * Fixed a bug causing wildcards in command alias replacement patterns not to be expanded. * Fixed a bug causing auto-joining of channels not starting in # or & to some- times fail because the auto-join command was generated before we got the CHANTYPES pronouncement by the server. * Added a size sanity check for incoming Blowfish ECB blocks. The blind assumption of incoming blocks being the expected 12 bytes could lead to a crash or up to 11 byte information leak due to an out-of-bounds read. This fixes CVE-2014-8483. * Enabling SSL/TLS support for connections will now advertise the protocols Qt considers secure by default, instead of being hardcoded to TLSv1. * Fixed the bundled 'sysinfo' script not coping with empty lines in /etc/os-release. * Made disk space info in the bundled 'sysinfo' script more robust by forcing the C locale for 'df'. * Added an audio player type hint for Cantata to the bundled 'media' script. * Fixed some minor comparison logic errors turned up by static analysis. * Konversation now depends on KDE Platform v4.9.0 or higher. Changes from 1.5-rc2 to 1.5: Konversation 1.5 adds numerous major features over the previous stable release. Of particular note are support for SASL and client certificate authentication, all-new topic management UI, overhauled authentication UI in the Identities dialog, per-tab spell-checking language settings, user-configurable nick context menu entries, mouse spring-loading on tabs, all-new versions of major bundled scripts and improved Ignore and Watched Nicknames systems. Many under-the-hood changes to improve codec support and general performance, along with the usual slew of bug fixes all over, further sweeten the deal. Don't miss out on reading about various other new features and more fixes in the full changelogs since version 1.4, too! * Expanded interface translations. Changes from 1.5-rc1 to 1.5-rc2: After a (too) long wait, Konversation 1.5-rc2 is hopefully our final bid for your aid in assuring the quality of a now-impending final release. Quite a few gnarly bugs have fallen since rc1; some of them long-standing, others were introduced along with the features that made their debut in the preceding test release. Of particular interest to many users will be robustness improvements in the Watched Nicks system and the lifting of certain restrictions on Unicode support that had been in place as a by-product of supporting older, defective Qt versions. See the changelog for more details! * Fixed a bug that could cause the Watched Nicks system to report all nicknames as offline if the Watched Nicks tab had been opened prior to a reconnect, even if that was not the case. * Fixed a bug where a URL with IRC Color markups caused to show colors, even if 'Allow Colored Text in IRC Messages' was disabled. * Fixed a bug where spaces in the path to the pre-connect shell command were handled incorrectly. Tilde expansion now occurs as well. * Clicking a channel link starting with more than one # character would join a channel starting with one # too few; this has been fixed. * Fixed auto-replace not being applied to messages that are sent from the Large Paste Warning dialog. * Made the action to manually apply Auto Replace work in the Paste Editor as well. * Fixed irc(s):// URL support registration in KDE 4.9.3+ (kdelibs versions 4.9.3 and higher give precedence to .desktop file x-scheme-handler MIME type regis- tration over .protocol files installed by an app, but Konversation did not announce URL support via an %u expando in the Exec key). * Build fix for win32. * Added a workaround for a rare crash on Mac OS X due to bugs in the implementa- tion of Qt's font metrics calculation on that platform. * Fixed a bug causing changes of the 'a' user mode to set/remove Owner status on nickname list entries. * Minor UI cleanup in the Channel Settings dialog. * Enabled freedesktop.org Startup Notification support. * Recent releases of Konversation filtered all Unicode characters outside the Basic Multilingual Plane due to a confluence of grave bugs in the Utf-8 support in Qt. As fixed versions of Qt have now circulated for some time and are required to build Konversation, this restriction on Unicode support has now been lifted. * Fixed a bug that caused the desktop notification (KNotify) event for nicks on the Watched Nicknames list coming online or dropping offline not to fire when notifications for the associated connection's status tab were disabled. * Fixed the bundled 'sysinfo' script crashing on non-ascii characters in /etc/os-release when run on Python 2. * The bundled 'sysinfo' script now tries harder to determine the current CPU clock frequencies (it now looks at sys/.../cpufreq/scaling_cur_freq in addi- tion to /proc/cpuinfo). * Fixed a bug causing the flood fill tool in DCC Whiteboard tabs not to use the correct color after using the color picker tool to set it. * Launching the default browser when clicking on links now works properly again on Windows. * Fixed a bug causing certain combinations of sorting and filtering in Channel List tabs not to work correctly, leading to partially unsorted list entries. * Minor rewordings and cleanups in UI text and the handbook for clarity and correctness, e.g. the "Notify" notification event is now known as "Nick on- line". * More information sources are now taken into account to update Konversation's idea of whether a particular nick is identified with services or not (infor- mation from IRC numeric 330 was previously discarded). * Fixed a bug causing Konversation to attempt to PART a channel that's no longer actually joined when closing a channel tab after having been kicked from the channel. * Some included PNG image files were badly encoded, this has been addressed. * Fixed a bug causing the file URL for an authentication certificate in the Identities dialog to be forgotten across application restarts. * The warning about text in the topic editor exceeding the server-allowed limit now calculates the threshold more correctly, taking encoding and IRC formatting expandos into account. * Konversation now depends on KDE Platform v4.7.0 or higher and Qt v4.7.0 or higher. Changes from 1.4 to 1.5-rc1: Konversation 1.5-rc1 is the first test release for our next major release. The 1.5 development cycle has lead to significant new features in many areas of the application, from support for SASL and client certificate authentication on the protocol side, to all-new topic management UI, overhauled authentication UI, per-tab spell-checking language settings, user-configurable nick context menu entries and mouse spring-loading in the frontend and all-new versions of major bundled scripts. Improved Ignore, Watched Nicknames and Edit Paste functionality and behavior, performance improvements in some critical codepaths and many other bug fixes and minor UI touch-ups round things out. * The user interface for the Auto Identify settings in the Identities dialog has been extended by a combo box that allows choosing the type of authentification to be performed. Depending on the chosen type, different input fields are shown below the combo box. * The server password-based authentification supported by some networks is now configurable in the Identities dialog as well, making it more discoverable and allowing to keep Auto Identify settings generally with the Identity rather than requiring going through the Edit Server dialog. * SASL PLAIN authentification is now supported. To use, pick SASL as the Auto Identify type in the Identities dialog and fill in your account name and password. * Standard NickServ authentification has been further improved. The command sent to to the service, previously hard-coded to "identify", is now configurable, and the name of the service now defaults to "nickserv" in new identities (the previous default was an empty field). * Added support for authenticating via a SSL Client Certificate in the form of a PEM file if Konversation is built against KDE Platform v4.8.3 or higher. Choosing this type of authentication in the Identities dialog forces SSL to be enabled for a connection, overriding any server settings. * Added the ability to set a different spell-checking language for every tab, from the context menu of the input box. The chosen language setting is pre- served across application restarts. * The Topic tab in the Channel Options dialog has been redesigned and rewritten from scratch, featuring a much improved UI and many bug fixes: - In place of the previous UI with a multi-column topic history list and two distinct text fields for browsing and editing there is now only the list and an edit field. The list has been redesigned to show all of the data for a topic, with visually distinct headers serving to delineate individual entries and showing the author and timestamp, above the full text for each topic. - Entries in the history list now sport a context menu allowing to copy the topic text and querying the topic author. - A new search field above the history list allows filtering it by looking for the search string in the text, author name and timestamp of all topics. - When an encryption key is set for a channel an attempt is now made to decrypt all of the topics in the history, not just the current topic. - When editing the topic any text entered past the server's maximum allowed topic length will now be drawn in the color scheme's negative text color (i.e. usually red). Further, if Konversation has been built against KDE Platform v4.7.0 or higher, a warning is shown at the bottom of the text field explaining the limit and offering the option - via a button - to delete the excess text. - The text cursor is now automatically placed at the end of the edit field, making the common use case of adding to the topic more convenient. - The location of the splitter handle inbetween the history list and the edit is now remembered across all Channel Options dialogs and application restarts. - Storing the topic history for each channel now takes up less memory, and general efficiency in handling with topic data has been improved greatly. - Fixed a bug causing redundant entries to accumulate in the topic history across reconnects when the last entry in the history corresponds to the topic given by the server at rejoin. - Fixed a bug causing HTML tags (e.g. ) in topics to be invisible in the edit field. - Fixed a bug causing the "Undo" action in the edit field to occassionally stop working, making it impossible to return the field to the unmodified state in which its contents sync to the selected history list entry. - Fixed a bug causing the topic not to return to its encrypted form when the decryption key for a channel has been deleted. - Fixed a bug causing the author of a topic to sometimes be shown as the full user mask instead of consistenty showing only the nickname. - Fixed a bug causing the "Unknown" placeholder that is used when the author of a topic is unknown not to be translated. - Fixed the incorrect tab key order in the Topic tab. * Fixed a bug causing the topic at the top of channel tabs not to return to its encrypted form after the decryption key for a channel has been deleted. * The size of the Channel Options dialog is now synchronized between the dialogs for different channels and remembered across application restarts. * The widths of the columns in the Ban List tab in the Channel Options dialog is now synchronized across all Channel Options dialogs. * The Quick Buttons options now feature a new checkbox that toggles whether Quick Buttons that operate on nicknames will be shown alongside other nickname- related actions in context menus throughout Konversation. Essentially, this allows for placing custom actions in nickname context menus. * The list of placeholders available in Quick Button patterns now mention the previously undocumented "%k" placeholder for the current channel's key and is sorted alphabetically. * When a Quick Button pattern replaces the current input box contents (due to the presence of the "%n" expando in the pattern) they are now added to the input box history first. * Quick Button patterns now support a new "%i" placeholder that is replaced with the current contents of the input box. * Both the regular tab bar and its listview version now implement "spring- loading". That is, when dragging something onto a tab and holding it there, the hovered tab will now be switched to after a brief delay. This allows switching to the intended tab as part of dragging text or a file to its destination, e.g. the tab's input bar or nicklist. * All types of tabs which sport a prominent input widget will now see focus moved to that widget and the first keypress redirected when focus is on the treelist version of the tab bar while starting to type. In previous releases this already worked for chat tabs with their usual input bars, now it also works for e.g. Channel List tabs and Konsole tabs. * A '/umode' convenience command to set modes on self has been added. * The 'Mode change' notification event now sports a proper text payload describing what has happened. * The system tray icon now shows an overlay icon when global away is enabled. * The behavior of the 'Show/Hide Konversation' action has been simplified and tuned to do the correct thing in more scenarios. Previously, invoking the action would hide the window even if it was not actually visible due to being covered by other windows, because merely not being hidden, not being minimized and being on the current desktop was already considered being shown. A much simpler approach of always showing the window if it is not the currently active window (and, as before, moving it to the current desktop as needed) and hiding it when it is has been adopted now instead. * Added an option to restrict logging to private conversations (queries, DCC chats). * Added an action to manually apply the user-configured auto-replace rules to the input box contents without sending the message, enabling user review before doing so. The relative cursor position is preserved or the cursor is moved to the end of an intersecting replacement insertion when auto-replace is applied. * Server status tabs for networks listed in the Server List dialog now have a "Connect at Startup" checkbox in their context menu, similar to the "Join on Connect" checkbox in the context menu of channel tabs. Both set options also available from the Server List. * Removing newlines in the Edit Paste dialog can now handle Windows-style carriage return line breaks and whitespace characters other than ASCII 0x20. * Part and Quit messages now show the hostmask of the subject, consistent with Join messages. * The nickname list theme preview in the configuration dialog now uses the same background color as the actual nickname lists. * Raw log tabs now use color coding to visually differenciate inbound and outbound messages, using the server message and channel message colors from the color settings respectively. * The DCC Status transfer list update interval now depends on the graphics effects level setting in KDE System Settings, changing between 500, 1000 and 2000 ms depending on the level set. * Fixed a bug causing the input box height not to be adjusted appropriately to fit the contents when the "Input box expands with text" option is enabled and the window is resized horizontally, causing the text to rewrap. * Fixed a bug causing the context menu for an item in the DCC Status transfer list to appear in the wrong position. * The double-click action command for Watched Nicks list entries now supports command aliases. * Fixed a bug causing wildcard expansion to be performed on the input box contents when they start with a Command Alias (rather than just expanding wildcards in the Alias replacement pattern). * The bundled 'media' script has been rewritten from scratch to implement the MPRIS2 standard for interfacing with media players - and only the MPRIS2 standard. This means losing support for a number of legacy players which do not support MPRIS2, but also gaining support for a number of popular modern players which do (e.g. Tomahawk). Additionally, there are often third-party MPRIS2 bridges or plugins for players which do not support it natively. The script now also features much-improved error handling and reporting in the face of misbehaving players or configuration errors. * The bundled 'sysinfo' script has been rewritten from scratch. The new version offers more accurate CPU and KDE version information (accounting for multiple cores and frequency scaling for the former, and making the difference between running inside KDE or just using the KDE Platform for the latter), as well as the addition of distro name and release information and generally improved robustness in data acquisition. Finally, the output format is now easier to configure, adopting an approach similar to the one used in the 'media' script. * The bundled 'sayclip' script has been rewritten from scratch, removing the now-redundant flood handling found in the old version (Konversation takes care of this implicitly today) and improving the error handling in case Klipper cannot be contacted. * The bundled 'bug' script has been rewritten from scratch, featuring improved error handling and adding internationalization support. * Fixed a bug causing the What's This help tooltip for nickname lists to show the regular user icon instead of the away icon as the away icon example. * The desktop notification for a completed incoming DCC file transfer now offers an action to open/run the received file. * Various fixed to tab stops and margins in the configuration dialog pages. * Minor UI fixes for the Queue Tuner (opened by /queuetuner), correcting icon use and button labels. * Removed excess white space from several warning dialog messages. * Fixed a bug causing the Watched Nicks to spam the active tab with repeated WHOIS requests for someone on the Watched Nicks List after opening a query tab to them while they were offline. * Fixed several bugs in preserving per-tab encoding settings across application restarts. * Link opening now properly respects KDE's file type associating settings instead of always opening a web browser. * Fix Konversation not saving the unchecked "... a channel invitation is received" warning dialog option in the Warning Dialogs list in the configuration dialog * Unchecking the "... a channel invitation is received" warning dialog option in the Warning Dialogs list in the configuration dialog now sets the behavior for future channel join invitations to always joining them. The actual dialog allows chosing between always accepting and always ignoring, but until this can be exposed in the configuration dialog, always joining them makes this option consistent to all other warning dialog options. * The default behavior upon receiving a channel join invitation is now to ask the user, instead of silently accepting the invitation. The latter behavior accidentally snuck into 1.4 and is considered a bug. * Added a workaround for behavior in the Phonon multimedia library that could lead to crashes on application quit when using custom highlight notification sounds. * Fixed a bug causing an ambiguous shortcut warning dialog when using the default ESC keyboard shortcut to invoke the Focus Input Box action after the search has been opened and the Focus New Tabs option was disabled while a new tab was opened. * Fixed a bug causing multiple ignore list entries with the same pattern not to be preserved across application restarts. Instead only the latest entry with the pattern would. * Fixed a bug causing the tab label for open log viewer tabs to be set to "ChatWindowObject" when switching the tab bar position between top or bottom and left. * Made the code turning channel names into clickable links more strict about what types of trailing punctuation it incorporates into the link. * Fixed bugs causing currently joined channels not to react correctly to changes in the enabled state of the Automatic User Information Lookup setting. Previously, enabling the lookup would not actually start it, and disabling it would only take effect after one last lookup was performed. Both now take effect immediately. * The reaction to a change of the Automatic User Information Lookup interval setting has been improved considerably: Whereas previously Konversation would simply wait out the current interval scheduled using the old setting value and only then schedule the next lookup using the new value, it now reschedules the next lookup to occur as if the new value had been set all along, or, if the time elapsed since the last lookup was performed already exceeds the new value, comes as close as possible by performing a lookup immediately. * All forms of opening a query (the '/query' command, clicking a nickname in the chat text display, double-clicking in the nickname list or the nickname list context menu action) now consistently move focus to an existing matching query tab, matching the behavior of various forms of joining an already-joined channel. Previously this was only true for the '/query' command. * Minor visual (the selection decoration for server items now spans the whole row) and behavioral (when collapsing a network while one of its a server is selected, the selection is now moved to the network item instead of becoming invisible) improvements in the Server List dialog. * Fixed a bug causing the option to automatically focus new query tabs not to work correctly. * Fixed a bug causing IRC formatting state not to be reset at the end of a topic when showing it in a channel's chat text display, potentially causing the rest of the line to be malformatted. * If built against KDE Platform v4.8.3 or higher, the date column in the Url Catcher will now immediately reflect changes to the date format made in KDE's System Settings application. * Fixed a bug causing an application crash in response to an (illegal) '/unban <#channel>' command. * Showing line and paragraph indicators in the Edit Paste dialog's text entry field unfortunately had to be disabled for the time being due to a bug in the underlying Qt code. * Leaving the "Use custom version reply" option's text field empty now disables responding to CTCP VERSION requests entirely instead of sending empty responses. * Fixed the vertical height of rows in the Channel Invites dialog possibly cutting off the checkboxes depending on the checkbox and font sizes in play. * A basic framework to support the IRC Client Capabilities Extension ("CAP") has been added. * Performance optimizations and code cleanup for processing NAMES messages from the server. * Performance improvements have been applied to hotpaths in the protocol implementation. * Debug builds of Konversation now understand a "--nui" command line argument to disable the check for whether Konversation is already running, thus allowing multiple instances of Konversation to be started. This is known to cause bugs (e.g. for anything started by Konversation that relies on the D-Bus service name of the running instance being org.kde.konversation: this means all bundled scripts) and can wreak havoc with the config file - it's meant only for use by developers / for debugging purposes. * Markup cleanups in the handbook and visual improvements to handbook icons in the PDF export on http://doc.kde.org. * Fixed a compilation problem on 64bit Windows. * Code cleanups for warnings issued by clang. * Build system improvements for kdepimlibs includes handling. * Konversation now depends on KDE Platform v4.6.0 or higher and Qt v4.7.0 or higher. Changes from 1.4-beta1 to 1.4: The dominant theme in Konversation v1.4 is improvements and feature additions to the user interface, particularly to text views, dialogs, (context) menus and input line commands. However, nearly all areas of the application have seen some amount of improvements in this release, as is to be expected given the relatively long release cycle: Connection behavior, IRC protocol handling, scripting support, encryption support, user documentation - new features, polish and certainly also bug fixes are to be found in all of them. In summary, we hope you will enjoy the best Konversation yet. The changelog for this release starts with a (very) brief summary of major highlights relative to v1.3.1, followed by the short list of changes since v1.4-beta1. If you skipped the beta, please do refer to the changelog for v1.4-beta1 as well, which is highly detailed and categorized for your reading pleasure. A brief selection of highlights since v1.3.1: * URL and email detection in text views has been rewritten from scratch, greatly improving the handling of various types of URLs and the contexts they might appear in. * Extensive improvements to IRC formatting code handling, including the return of background color support. * Extensive, sometimes full rewrites of user interface elements such as nearly all context menus, the URL Catcher and the Warning Dialogs system for a long list of user interface improvements and bug fixes. * Improved SSL connection behavior. * Translation support and various other improvements in several bundled scripts. * Expanded Python scripting support via the introduction of an API support package. * Support for more IRC numerics. * Various bugfixes to input line command handling and connection behavior. Changes since 1.4-beta1: * Fixed +q Type A channel modes (Freenode's "quiet bans") being reported as awarding channel owner privileges. * Fixed a bug causing the +r channel mode to be incorrectly described as "server reop" in the user interface. * Improved the description string for the +l channel mode. * Fixed the parameter handling of the example script in the handbook's section on scripting. * Fixed build with KDE Platform versions below 4.6.0. The minimum required version is 4.4.3. * The '/setkey' command now supports keys that have spaces in them, by treating all parameters after the first as part of the key. * The 'Edit Multiline Paste' editor now puts initial focus on the text field, rather than the Send button. * Added a sanity check to avoid a crash while processing broken, empty NAMES messages from a server, encountered with the shroudBNC bouncer. Changes from 1.3.1 to 1.4-beta1: Konversation v1.4-beta1 is the first pre-release leading up to our next major release. A dominant theme in this release cycle have been improvements and feature additions to the user interface, particularly to text views, dialogs, menus and input line commands. However, as you might expect given the amount of time since the last release (sorry about that :-), improvements are to be found in nearly all areas of the application, including connection behavior, IRC protocol handling, scripting support, and more. Please have a look at the changelog for a short summary of the major highlights, as well as the usual extensive coverage of the details. General User interface (more UI changes in individual sections below): * The code handling the context menus of chat text views (including the context menus for nicks and channel links), channel nickname list views and topic areas has been rewritten from scratch, resulting in a long list of bug fixes and consistency and efficiency improvements: - Numerous consistency problems in the area of which actions are available in which context menus have been addressed. For example, the chat text nick context menu used to lack many of the actions available in the nickname list context menu. - Numerous actions that require an established connection (e.g. everything in the "Modes" submenu of nick context menus or the DCC actions) used to not get disabled when loss of connection occurred. Others did get disabled, but not consistently in all menus in which they are available. Still others, such as the "Add to Watched Nicks" action, used to get disabled unnecessarily. All of this has been addressed. - Toggle actions used to appear and behave inconsistently: The nickname list context menu showed either "Ignore" or "Unignore" actions as applicable, while the chat text view nick context menu used a checkable item. Meanwhile, the "Add to Watched Nicknames" action had no corresponding action to remove a nick from the Watched Nicks Online list at all. All of this has been fixed, going with the "Ignore"/"Unignore" style of the nickname list context menu (i.e. there's now a "Remove from Watched Nicks"). - If built against Qt 4.7, the topic area now uses the same context menus as the chat text view (with the exception of the inappropriate "Find Text.." action in the basic context menu), enabling a lot of functionality missing otherwise. - Some actions used to be shown in menus inappropriately, e.g. the "Channel Settings" action in the chat text view context menu of a connection status tab or the "Open Logfile" action in the same context menu of a raw log tab. This has been addressed. - The behavior of many of the actions is now more consistent with their input line equivalents. For example, clicking "Join Channel" in a link to an already-joined channel will now focus the existing channel tab, the same as the /join command would do. Previously, nothing would happen. - Fixed a bug causing the nick and channel link context menus in the chat text view of a channel tab to get disabled after having been kicked from the channel. - Fixed a bug causing the "Send Email..." action to always be disabled, even when any of the associated address book entries did have an email address on file. - The display of helpful titles repeating the nick/channel at the top of the chat text view nick and channel link context menus has been fixed - it previously got broken in the KDE 4 port. - The nick and channel link context menus now mark the action that occurs when clicking either as the default action of the context menu, improving the appearance with UI styles that visually distinguish the default action. - General improvements to the layout of menus, often with an aim for improved consistency with other KDE applications. - Numerous actions that were missing icons now have them. - The consistency of keyboard accelerators between the various menus has been improved. - Various actions in the nickname list context menu now appropriately use a singular or plural form for their text label depending on the number of selected nicks the menu operates on. - Improved memory efficiency by using single global instances of the various menus, rather than for example having two separate instances of the nick context menu - one for the chat text view, one for the nickname list view - for every channel tab. - The code implementing the various actions was in many cases redundantly implemented in three different places, for some even in four. This staggering code duplication has been done away with. - Links now have an "Open With..." action that opens a dialog allowing to choose in which application to open the link. * The URL Catcher has been rewritten from scratch, bringing about a number of improvements and bug fixes: - It is now possible to select multiple list entries, and all of the selection-related actions, such as "Open" or "Add Bookmark", can now operate on multiple selected entries ("Add Bookmark" will offer to add all selected entries as a new bookmark folder, for example). - Reasonable default sorting: The list is now sorted by the "Date" column in descending order the first time the URL Catcher is opened, so that the newest URLs are found at the top. Previously, the list was sorted by the "From" column in ascending order by default. - The list data is no longer stored in memory twice while the URL Catcher is open. Data handling is generally more efficient. - The list entry context menu has been cleaned up, now showing only the actions applicable to individual entries. - The list now automatically receives keyboard focus when switching to the URL Catcher tab. - When saving the list to disk, the file dialog to pick the destination file will now ask before overwriting an existing file of the same name. - The date and time in the header of a saved list file is now formatted according to the user's locale settings. - Fixed a bug causing the opening of caught irc:// and ircs:// URLs not to work. - Fixed a bug causing the "Date" column to sort alphabetically rather than chronologically. - Fixed a bug causing the deletion of list entries not to work. - Fixed a bug causing a 1px remnant of tree branch lines to be visible along the left edge of list entries. - An unnecessary margin around the toolbar and the search line edit has been removed. - Fixed a bug causing the URL Catcher tab to claim to be eligible to receive chat text messages that have the frontmost eligible tab as their recipient despite it not actually possessing the means to display them, resulting in a crash when such a message occurred. * The Warning Dialogs system has been overhauled, with improved wording in the listing in the configuration dialog (which now also contains the previously missing warning when minimizing to the system tray) and further improvements to individual warning dialogs, such as the addition of previously missing Cancel buttons. * Added a "Show/Hide Konversation" action that can be used to toggle the minimized state of the Konversation window or, if the tray icon is enabled, its visibility. Additionally, the window will always be moved to the current virtual desktop if shown using this action (if the window is already shown on another desktop, it will be moved to the current desktop rather than hidden). * It's now possible to give the "Next Active Tab" shortcut a global keyboard shortcut, and when triggered the action will always show, raise and focus the Konversation window (as needed), regardless of whether it will also perform a tab switch. This allows "Next Active Tab" to double as a "get me the Konversation window and the tab that just caused my notifications to go off" global shortcut. * Clicking the Insert button in the "Insert Character" dialog will no longer immediately close the dialog, making it easier to insert multiple characters in quick succession. * Double-clicking a character in the "Insert Character" dialog will now insert it into the input line. * The "Insert Character" dialog now sports a search line. * The widths of the columns and the sort column and direction in the Channel Option dialog's ban list are now remembered across application restarts. * The "Rejoin Channel" context menu action, shown when a channel could not be rejoined automatically on reconnect as well as after having been kicked from a channel, will now appear above the "Close Tab" action rather than at the end of the context menu, so "Close Tab" is always the last item. * The "Ok" button in the "Edit Multiline Paste" editor has been renamed to "Send" to communicate more clearly that clicking it will send the editor contents to the server. * Formatting control codes (e.g. for colors) in user real names are now filtered out before the names are shown in the nickname list when the "Show real names in nickname list" option is enabled. * The layout of user information tooltips (shown e.g. when hovering a nick in the nickname list or the header area of a query tab) has been improved slightly. * Fixed bugs causing the tooltip for the adjacent rather than the hovered item to be shown when hovering the mouse pointer near the upper or lower edges of an item in the nickname list or the listview version of the tab bar (tooltips are only shown on the latter when the listview is too narrow to fit its contents, to provide the unelided tab names). * Fixed bug causing the IRC Color Chooser dialog to only show 15 colors instead of the available 16. * Fixed a bug causing a very wide minimum window width when a query tab with very long user information in the header area was open. * Fixed bug causing the opening of URLs via the "Open URL" sub-menu in the list entry context menu in Channel List tabs not to work. * Fixed a bug causing actions that are meant to operate on the active tab (e.g. "Close Tab" invoked by the default shortcut Ctrl+W) to operate on a different tab after the "Join on Connect" action in that tab's context menu had been used. * Fixed a bug causing the state of the Show/Hide Menubar action not to be updated correctly when hiding the menubar was canceled from the warning dialog. * Fixed a bug causing the "Delete" button in the "Server List" dialog to incorrectly show a "Network needs to have at least one server." error dialog when trying to delete servers, even when the deletion would in fact leave the network with one or more servers. * Fixed a bug causing the active tab's text label not to be greyed out when its IRC server connection is cut. * Got rid of some too large margins in the "Edit Network" dialog. Text views: * Added support for KDE Web Shortcuts when built against KDE Platform 4.5 or higher: The context menu for selected text in a chat text view then offers a submenu by which the selected text can be used in a web search with any of the enabled search providers. The resulting search URL is opened in the system's default wen browser after clicking on the search provider in the submenu. * Added support for ircs:// URLs, the 's' standing for 'SSL'. It is supported both for opening and for bookmarking. If an ircs:// URL matches a server configured in the server list or refers to a network name instead of a specific server, the directive from the URL overrides the state of the SSL setting in the configuration. * Detection of URLs and email addresses in chat text views to turn them into clickable links has been much improved. An incomplete overview of notable cases: - Unicode characters in URLs are now handled properly, enabling support for example for international domain names. - Protocol-less links not starting in "www.", such as the short URLs popular these days ("bit.ly/foo" and similar), are now recognized. - Arbitrary protocols (e.g. "http://" or "message://") are now recognized; previously only a small hand-picked and insufficient set was. - The check that avoids balanced a pair of parentheses around an URL becoming part of the link now works for more than one level of balanced parentheses. - Aside from balanced pairs of parentheses, also square and other forms of brackets are now handled properly. - Trailing question marks no longer become part of the link. - URLs using uncommon schemas, e.g. Apple message:// URLs or Wolfram Alpha URLs, are now handled properly. - Numerous improvements to email link handling: User names containing the plus sign are now handled correctly, opening email links from the URL Catcher works now and others. - The URL detection for the "Open URL" sub-menu in the list entry context menu in Channel List tabs now uses the same infrastructure as link detection elsewhere rather than separate code, making it massively better compared to previous versions. - Average speed of link detection has improved slightly. * Added support for dragging web and email address links found in topic areas. * IRC formatting markup (colors, bold, italic, etc.) support in chat text views and the topic editor has been improved significantly: - Background colors are now supported. - The reverse color formatting character is now supported. - To emphasize usability, links are now consistently displayed using the link and background colors from the configuration dialog, regardless of preceding formatting markup or formatting markup located within the link. - Formatting markup located within links in incoming messages no longer results in those links being broken. - Fixed bugs resulting in incorrect display of messages containing multiple formatting characters. - Improved robustness in the face of invalid color codes. - Formatting markup in the topic editor's topic history listing is now shown in the human-readable format that is also used for entry, making it much easier to derive a new topic from an old one that contains formatting markup. - Fixed a bug causing '/topic <channel>' to display the topic of <channel> with formatting markup stripped. * Join/Part/Nick messages can now be selectively hidden based on whether the nickname the message is about has been active in the respective channel in the last 10 minutes, last hour, last day or last week. Previously it was all or nothing. * Rewrote chat text view wallpaper image support to avoid rendering problems some users were experiencing. * Fixed a bug causing some user hostmasks in chat text lines about channel topic author information to be treated as email addresses and thus turned into clickable links. They would also pollute the URL Catcher. * The code backing the marker and remember lines has been rewritten to work around bugs in Qt that could cause crashes, especially when running Konversation against Qt v4.7.4 or newer (see QTBUG-20916 for more). Input lines: * Added a "Focus Input Box" action that puts keyboard focus on the input box. The default shortcut is the Escape key. * The '(away)' label shown next to input lines when away now has a context menu with actions to change the away message or return from away state. * Pressing the Tab key when the cursor is at the start of the input box now checks whether the remembered nickname is currently attending the channel before repeating the last successful completion. Commands: * The syntax for the '/cycle' command is now '/CYCLE [-APP | -SERVER] [channel | nickname]'. Whereas '/cycle' previously only allowed you to cycle a channel from the input line of that same channel, you can now specify the target explicitly. '-app' will restart Konversation (as with the new 'Restart' action mentioned in the "Command line arguments" section, preservation of the command line arguments the app was started with requires KDE Platform 4.6 Alpha 1 or higher to work) and '--server' will close all tabs belonging to the current connection and then create a new connection with the same settings as the old one (plus it will attempt to rejoin all previously open channels). Both are new abilities for the command. A '/cycle' without parameters issued in server, channel and query tabs is equivalent to specifying '-server' or the current channel or query, respectively -- the ability to cycle a query is also new. * The '/clear' command now supports a channel or query argument to clear, as well as an -all parameter to clear all views. * The '/notify' command now displays more useful output after adding and removing and when summarizing Watched Nicks. * Fixed a bug causing adding of nicknames to the Watched Nicks Online list via the '/notify' command to fail. * Added an optional '-showpath' parameter to the '/exec' command that shows the path at which the given script file was found in the chat text view, i.e. '/exec -showpath media'. * Commands that accept parameters in the form "-foo" will now also understand " --foo". * The '/dns' command used to block the UI while trying to resolve the parameter it was given, potentially causing an extended lock-up of the application when the system has serious DNS trouble. This has been resolved; '/dns' is now fully non-blocking. * Trying to use the '/me' command from a tab that doesn't support it will now cause an appropriate error message to be displayed. * Fixed a bug causing the '/kickban' command not use the default kick reason from the Identity settings if no reason was explicitly specified. * Fixed a bug that could cause the '/list' command to open the Channel List tab for the wrong connection. * Fixed a bug causing '/list <search pattern>' to close an existing Channel List tab (the intended behavior for a parameter-less '/list') rather than update the active filter and refresh the list. Highlights and notifications: * Added a new "Chat Windows" field to the Highlight configuration to optionally restrict the list of chat windows a given highlight event may be triggered in to those named in the field, separated by comma or semicolon. * Resolved a conflict between the highlight system and the graphical emoticon support that was causing unintended highlights when the filesystem path to an emoticon image file shown in the chat text view matched any of the configured highlights. * Fixed bugs in the highlight system caused by it mistakenly operating on the HTML markup used internally by the chat text views rather than the original text. Identities: * Added a "Default away reason" field to the "Away" tab in the Identities dialog. The away reason entered there will be used when no away message is entered manually as an argument to the '/away' or '/aaway' commands, so for example when Global Away is enabled using the keyboard shortcut. * "Away Messages" on the "Away" tab of the Identities dialog has been renamed to "Away Commands". Watched Nicknames: * Fixed a bug causing the Watched Nicks Online system to fail to start checking nickname online status for a network after adding an initial nick to its Watched Nicks list via the context menu actions or the '/notify' command (it worked fine via the WNO tab, however). Bookmarking: * Fixed a bug causing the bookmark address to be unusable (it would lack the network name) when bookmarking a tab and the name of the associated network contains a space or certain other special characters. Logging: * Fixed a bug causing pipe symbols to appear in the date/time stamp and next to the nickname in backlog replay. * Fixed a bug causing the chat text notification messages originating in the Watched Nicknames Online system to be logged in HTML format (and thus HTML source to be displayed e.g. in backlog replay). * Fixed a bug causing a change of the buffer size setting on a log reader tab's toolbar not to immediately apply to new log reader tabs opened thereafter. Instead the buffer size for new tabs would be the size set on the toolbar of the last log reader tab that got closed, making it easy to unintentionally undo a change depending on the order in which log reader tabs were closed. DCC: * Added a Color Picker tool to DCC WHITEBOARD, to select a color from the image. * A better version of the information dialog for DCC file transfers is shown when Konversation is built against KDE Platform 4.5 or higher. * Fixed a bug causing newly-added DCC file transfers to the list in the DCC Status tab not to be sorted when using Qt 4.7. Connection behavior: * The auto-join on connect feature will now skip over any configured channels that are invalid as per the IRC server's CHANTYPES rules when sending the join command(s) to the server, making sure that all valid channels are joined even on servers that stop parsing join commands on the first invalid channel. Previously, all configured channels were sent. * Fixed a bug causing a channel the tab of which was closed while a connection was in disconnected mode to be rejoined upon reconnect. * Fixed a (harmless) bug causing unnecessary trailing "." placeholder channel key segments to be added to the raw format auto-join command (or to the last of multiple such auto-join commands when the amount of auto-join channels requires multiple commands to be generated). * Fixed a regression that could cause an endless loop of reconnection attempts when issuing a reconnect order to an established connection and the time needed to establish the new connection was longer than the configured reconnection delay. It would also cause confusing status messages to be shown in the connection status tab. * Cancelling the dialog asking how to deal with SSL errors upon connecting is now treated as a deliberate disconnect on part of the user, i.e. Konversation will no longer try to automatically reconnect. * A disconnect while waiting for user response to an SSL error dialog will no longer result in an automatic reconnection attempt. Instead, Konversation will wait for the outcome of the user interaction: If the user decides to ignore the SSL errors that have occurred, a reconnect will be initiated, otherwise the connection will remain disconnected. * Fixed a bug causing a crash when the user chose to accept an invalid certificate in the SSL error dialog when the connection had timed out in the meantime. * Fixed a bug causing the quit message to not always be supplied successfully to the server when disconnecting. * Fixed a bug that could cause the "Server found" message to be shown in the connection status tab before the "Looking for server" message if the DNS response was already cached. * Fixed bugs causing the automatic user information lookup, the periodic WHO-on- self and the periodic PING for a given connection not to be suspended properly after a disconnect, causing unnecessary wakeups and the potential for these messages to be sent at inappropriate times in the early phase of a reconnection attempt. * Fixed a bug causing a connection failure to reset the lag meter in the status bar to "Unknown" even when the active tab is not related to the connection that failed. * Solid network up/down notifications are now ignored for connections to localhost. Scripting and bundled scripts: * The 'cmd' script, used to run a shell command from within Konversation and send the output to the server, has been rewritten from scratch to provide the following improvements: - Running a command that returns no output or only empty lines used to result in an error claiming the command does not exist. Now an info message is shown remarking that the command executed successfully but did not return any output or only whitespace. - The script now also works when called from a server status tab - the command output will be shown to the user rather than sent to the server in that case. - The command's error output (stderr) used to be ignored; now it is shown to the user in the active tab (but not sent to the server). - Trailing whitespace is now stripped from command output. - Output lines containing only whitespace are no longer forwarded to Konversation. As an aside, this also implicitly fixes a bug the old script used to suffer from that caused it to generate faulty D-Bus calls when trying to forward empty output lines. * The bundled 'sysinfo' script now handles the way 'mount' reports bind mounts on certain newer Linux distributions by collapsing the repeated mentions of the same volume before calculating the disk space information. * Scripts executed by Konversation can now access Konversation's current UI locale in the KONVERSATION_LANG environment variable. * Konversation now installs an experimental Python scripting support package named 'konversation' into a subdirectory of its application data directory and appends all 'konversation/scripting_support/python' directories found in any KDE application data resource directories (i.e. within $KDEHOME, $KDEDIRS, etc.) to the PYTHONPATH environment variable available in the script execution context, thereby allowing Python scripts executed by Konversation to import the package. The package currently sports modules providing APIs for i18n support and D-Bus communication with Konversation. * User-facing information and error message strings in the bundled 'cmd' and 'media' scripts now finally enjoy translation support, making use of the experimental new Python scripting support package described above. * The 'media' script now requires Python 2.6 or higher and is compatible with Python 3. IRC Protocol: * Added support for the 475 numeric (ERR_BADCHANNELKEY). * Added support for the 482 numeric (ERR_CHANOPRIVSNEEDED). * Added support for UnrealIRCd's 671 numeric. * Incoming actions (i.e. "/me") without an argument are now handled properly. * Fixed a number of crashes on illegal data from the server. * Raw log tabs (/raw) now use percent-recording to depict non-ASCII characters in raw traffic for much improved usefulness and reliability in the multi- encoding world of IRC. * Numeric 437 (ERR_UNAVAILRESOURCE) is now treated like numeric 433 (ERR_NICKNAMEINUSE) during early connection negotiation: The next nickname in the identity's nickname list is tried, or the user asked for a new one if necessary. Previously Konversation would just idle in this situation and allow the connection attempt to time out. Command line arguments: * Added '--restart' command line argument and a 'Restart' action that quits and restart Konversation. Notes: If not already running, the command line argument has no effect; startup will occur normally. Also, the preservation of command line arguments across restarts is only supported on KDE Platform 4.6 Alpha 1 and higher, as a required library feature is only available as of that version. * Added a '--startupdelay <msec>' command line argument that causes the app to sleep for the specified amount of milliseconds early during the startup process, delaying D-Bus activity and UI creation. System integration: * Konversation now also registers itself for the irc:// and ircs:// protocols using the way preferred by freedesktop.org's shared-mime technology rather than just the KDE-specific way. * Fixed the tray icon always being in 'active' mode (and thus conflicting with the Plasma desktop tray's auto-hide behavior) when using the new (and, in this release, only supported) system tray protocol. D-Bus interface: * A D-Bus method call to retrieve the list of channels a particular connection is currently attending has been added. Documentation: * Numerous updates and cleanup in the handbook. * Fixed a bug causing the Help button in the Configure Konversation dialog not to open the handbook. Misc: * Various small code cleanups inspired by cppcheck. Build system and dependencies: * Konversation now depends on KDE Platform v4.4.3 or higher and Qt v4.6.0 or higher. * A Python installation is a recommended dependency due to optional but highly popular bundled scripts and an experimental Python scripting support package mentioned above. * Fixed build with KDE4_ENABLE_FINAL. * The section of the build system required to build user interface and handbook translations is now always present instead of being added manually to the tarball at release time, springing into action when the subdirectories containing the translation files are added to the source tree from KDE SVN, or remaining dormant otherwise. * Konversation could crash during Diffie-Hellman key exchange or Blowfish encryption/decryption if the system's installation of the Qt Cryptographic Infrastructure (QCA) does not have the required features available (usually because the qca-ossl provider plugin is not installed). It will now fail gracefully instead and show helpful error messages in the active tab. Changes from 1.3 to 1.3.1: Konversation 1.3.1 is a maintenance release that improves program behavior and fixes defects, the most serious of which is a regression that unfortu- nately suck into v1.3, which causes data corruption or even loss of Watched Nicknames Online lists on application quit. Behavioral improvements are found in the handling of aborting automatic reconnection attempts after connection failure and RFC 1459 PING/PONG exchanges. Further notable bug- fixes have been made to the Edit Network dialog, the handling of system color schemes and using the ignore list feature to ignore certain CTCP events. * In addition to the '/disconnect' command, the graphical 'Disconnect' action and the '/quit' command can now be used to cancel an in-progress automatic reconnect in the event of connection failure as well. * The '/disconnect' and '/reconnect' commands now take optional quit message parameters. * Fixed crashes when pressing the "Edit" buttons below the server or channel lists in the "New Network"/"Edit Network" dialogs after adding a new server or channel and there was no item selected before in the re- spective list. * Fixed bugs causing the "Edit" buttons below the server or channel lists in the "New Network"/"Edit Network" dialogs to edit the previously selec- ted list items rather than the ones shown as selected after adding a new server or channel. * Fixed a bug that could cause outdated status information for nicks to be displayed in channel nickname lists after a reconnect. * Efficiency improvements for channel join. * Don't send PING in response to PONG if another PING is already scheduled to be sent in the future. This avoids getting kicked off a server for flooding when multiple clients are connected to a bouncer that forwards PONGs to all of them. * Fixed numerous cases in which Konversation would incorrectly apply the KDE system color scheme to input lines, nickname lists and the listview version of the tab bar. This general overhaul of the relevant code also brought about minor efficiency and memory usage improvements. * Fixed nickname lists not respecting the "Alternate Background" setting when set to use custom colors. * Fixed the listview version of the tab bar not greying out disconnected tabs when set to use custom colors. * Fixed a bug causing the processing of incoming CTCP CLIENTINFO and CTCP TIME requests not to take the ignore list into account. * The "Insert IRC Color" dialog will now add a leading zero to colors which have single-digit numbers in the '%C...' string it inserts into the input line, to allow the text that follows to start with a digit rather than such a digit getting interpreted as part of the color number. * Fixed a bug causing the Watched Nicknames Online nickname list for a net- work to be stored under the wrong network or lost entirely on application quit. * Fixed a bug causing the order of the Quick Buttons below the nickname list in channel tabs to be flipped every time the config dialog was OK'd. * Improved consistency of the filter fields in the URL Catcher and Channel List tabs with other KDE applications. * Correct use of singular or plural unit suffixes for several numeric pre- ferences in the configuration dialog. * It is no longer possible to set the auto-way time to the nonsensical value of zero minutes. Rather, a minimum of one minute is now enforced. Changes from 1.3-beta1 to 1.3: Konversation 1.3 debuts a major new feature in the area of Direct-Client- to-Client (DCC) support: An implementation of the DCC Whiteboard extension that brings collaborative drawing - think two-player Kolourpaint - to IRC. It also brings back the integration with KDE's SSL certificate store the KDE 3 version enjoyed and expands support for auto-away to the Windows and Mac OS X platforms thanks to both recent advances in the KDE 4 platform and new code in Konversation. Interface tweaks, new keyboard shortcuts and many bugfixes (including a number of new fixes since 1.3-beta1) round things out. Finally, Konversation now depends on KDE 4.3 and Qt 4.5. * Fixed build with KDE 4.3. * When opening an "Edit Network" dialog and adding a new item to one of the server or channel lists, provided they already contain at least one item and no selection is made before clicking "Add...", the "Move Down" button would be enabled afterwards despite no item being selected. Clicking the button at this point would crash the application. This has been fixed along with other potential problems in the code that updates the state of the list control buttons. * After adding a new item to one of the server or channel lists in "Edit Network" dialogs, that item will now be selected. * Fixed a bug causing the file dialog for selecting a new target directory and file name for an incoming DCC file transfer in the event that the default path is not writable to complain about being unable to find the file after clicking "OK" when no file of the chosen name at the chosen location exists already. * Fixed a bug causing the file dialog for selecting a new target directory and file name for an incoming DCC file transfer in the event that the default path is not writable to lose the file name written in the "Lo- cation" field (by default, the original file name) when changing the current directory. Changes from 1.2.3 to 1.3-beta1: Konversation 1.3-beta1 debuts a major new feature in the area of Direct Client-to-Client (DCC) support: An implementation of the DCC Whiteboard extension that brings collaborative drawing - think two-player Kolour- paint - to IRC. It also brings back the integration with KDE's SSL certi- ficate store the KDE 3 version enjoyed and expands support for auto-away to the Windows and Mac OS X platforms thanks to both recent advances in the KDE 4 platform and new code in Konversation. Interface tweaks, new keyboard shortcuts and many bugfixes round things out. Finally, Konversa- tion now depends on KDE 4.3 and Qt 4.5. * Konversation now depends on Qt 4.5 and KDE 4.3. * Added support for DCC WHITEBOARD, bringing collaborative drawing to IRC. * When showing the dialog informing the user about the local target file for an incoming DCC file transfer already existing that dialog now includes the sizes of the local file and the file the sender is offering up. * Fixed a bug causing either an empty line or a few characters of gar- bage to be placed in the clipboard in place of marker/remember lines when copying chat text containing such lines. * Fixed a bug causing quotation marks, ampersands and angle brackets in chat messages to be displayed as HTML entities in the OSD. * The "Clear All Windows" action will now also resets the notification state of all tabs (i.e. removes active new message or highlight no- tifications from the tab bar). * Fixed a bug causing the server responses to background data gather- ing via WHO (to keep the app's idea of its own hostmask up to date, as well as optionally channel user info) to be displayed in tabs as if the user had made the requests manually after sending a '/who' command without parameters. * Fixed a bug causing a crash when sending '/privmsg' without any pa- rameters (did not apply to '/msg'). * In previous versions, channel tabs opened in the background (i.e. while "Focus new tabs" is disabled, as it is by default) would con- siderably increase the minimum width of the window due to particu- larities of the Qt layout system. After raising every channel tab at least once it would then be possible to make the window much narrower. This unintuitive behavior resulted in confusion as to why the minimum width of the Konversation window would sometimes vary greatly. This has been fixed in this version, i.e. it is no longer necessary to have raised every channel tab at least once to achieve a reasonable minimum width of the window. This also means that joining a new channel is now much less likely to resize the window. * Fixed a bug causing the status bar to become multiple lines in height when hovering an URL containing percent-encoded line breaks in the chat text view. * Fixed a bug making it impossible to scroll the Advanced Modes list in the Channel Settings dialog when the user doesn't have operator status in the channel. * Fixed a crash when selecting more than one completed, failed or aborted outbound transfer in the "DCC Status" tab and clicking "Re- send" in their context menu. * Fixed a bug causing the human-readable mode descriptions used by default in channel chat text views as well as the Channel Settings dialog's Advanced Modes list not to be translated. * When the display of human-readable mode descriptions is enabled (as it is by default), the Advanced Mode list in the Channel Set- tings dialog will now show the respective mode characters along- side them. Previously, only the description was shown. This makes the list useful as a utility to look up the meaning of obscure mode characters. * Fixed a bug causing both the default email client and the default web browser to be invoked when clicking an email address link in the chat text view. * Added a built-in '/sayversion' command that, as opposed to the bundled '/kdeversion' script, can show the version of both the KDE Konversation was built against and is running on. It also outputs the information in a single message instead of several. * Fixed a bug that would cause the second and following segments of a text so long that it has to be split into multiple messages when it is sent to be encoded incorrectly. * The ASCII 0x1d character is now used to denote italic formatting of text rather than 0x09, to avoid the conflict with the tab character that is frequently pasted e.g. from websites with tables. * Fixed a bug causing the server response to '/whois <nick> <nick>' not to be displayed on many IRC servers when the nick in questions is not online at that time (this variant of the WHOIS command is also used by the GUI actions). * Fixed a bug causing missing bans in the list in the Channel Settings dialog on certain (mostly older) IRC servers. * The text in notification messages used to be wrapped every 50 char- acters, an old workaround for problems with KDE 3.x's bubble notifi- cations. This has been removed now since it's no longer needed with modern notification frontends such as Plasma's, and produces rather ugly results there. * Made it possible again to initate DCC file transfers to a query partner by dragging files or URLs onto the chat text area of the query. * When building against the KDE Platform v4.4.3 libraries, the auto- away functionality will now make use of the new KIdleTime library to determine user activity and inactivity rather than use its own code, the primary advantage being that KIdleTime is supported on non-X11 platforms such as Windows and Mac OS X. In effect, this means auto-away is now supported on those platforms, depending on the implementation level in KIdleTime. (The use of KIdleTime can be explicitly disabled by passing '-DUSE_KIDLETIME=false' to 'cmake', in which case Konversation will fall back to using the original, X11-specific code and auto-away will only work decently on an X11 platform.) * SSL support now integrates with KDE's certificate handling again, as it used to in the KDE 3 version, made possible by improvements in the libraries of the KDE Platform v4.3 (the minimum version supported in this release) and higher. * Not reacting to an SSL certificat validation error dialog in a timely manner should no longer result in Konversation locking up. * In-progress automatic reconnect in the event of connection failure can now be aborted by using the '/disconnect' command. * Manually issuing a reconnect order to a connection currently in- active after having exceeded its maximum number of reconnection attempts used to result in a single connection attempt after which it would be announced that the maximum number of reconnect- ion attempts had been exceeded again. This has been fixed: It will now make the number of attempts specified as the upper limit in the application settings. * Fixed a bug that could cause the selection in the transfer list of the DCC Status tab to be lost when a new transfer was added to the list. * Fixed a bug causing the information panel in the DCC Status tab to show information for a transfer other than the one selected in the transfer list after sending a file to oneself for the first time in a session. * The frame that used to be around the main window's tab widget when the tab bar was located either at the bottom or top position has been removed. * Improved compatibility with freedesktop.org-compliant notification frontends other than KDE's. Other frontends could previously show empty notification message contents due to non-standard content in the messages. * Added an action to switch to the last focused tab, making it possi- ble to quickly switch forth and back between two tabs. The default keyboard shortcut for this new action is Alt+Space. * Added a "-local" parameter to the '/amsg' and '/ame' commands that limits their scope to the channel and query tabs associated with the same connection as the tab the command is issued in. * Fixed a bug causing the order of networks in the server list dialog not to be preserved across application restarts. Changes from 1.2.2 to 1.2.3: Konversation 1.2.3 is a hotfix release that improves upon an earlier fix, originally included in Konversation 1.2.2, that increases the re- liability of Konversation's interaction with the D-Bus inter-process communication daemon. * Increased reliability of interactions with the D-Bus inter-process communication daemon. Changes from 1.2.1 to 1.2.2: Konversation 1.2.2 contains a number of new features, such as support for passive DCC chat and amarok:// URLs, and a large amount of user interface improvements to various tabs (e.g. Watched Nicknames Online and the URL Catcher) and dialogs (e.g. Join Channel). When used with KDE SC 4.4 it supports the new system tray icon API. A sizable list of bug fixes round things out; of particular note is a change address- ing the high CPU usage some users have experienced with Qt 4.6. * Added support for passive DCC chat. * Made it possible to accept/reject DCC chats like DCC file transfers. * Added an option to auto-accept DCC chats (previously it would always auto-accept). * Added a confirmation dialog for closing DCC chats, consistent with other conversation tabs. * Improved the sanity-checking code for the validity of ports used in DCC operations. * Fixed connection attempts possibly stalling when there is a problem with executing the associated identity's pre-shell command (provided it has one set at all), and Konversation crashing when it is quit while a connection attempt is stuck on trying to execute the pre- shell command. * Fixed /setkey, /delkey and /showkey treating their target arguments (i.e. a channel or a query) case-sensitive. * Fixed the encryption key for a query getting lost if the other end changes their nickname. * Added support for KStatusNotifierItem, the new system tray API in KDE. * Fixed a bug causing multiple auto-replacements in a single message not to work. * Made it possible to include syntax normally used to refer to a sub- group of the matching pattern as normal text in the replacement pat- tern of a regular expression auto-replace, by escaping it like this: %%1. * Fixed a bug causing an empty MODE message to be sent to the server preceding the correct one when using /op, /deop and the like. * Fixed a bug causing as many mode chars as target nicknames given to commands like /op, /deop etc. to be sent as part of every single re- sultant MODE messages sent to the server, despite one MODE message being generated for every group of three target nicknames. I.e. "/op foo foo foo foo" would result in "MODE +oooo foo foo foo" and "MODE +oooo foo", when it should only be "+ooo" and "+o", respectively. * Added support for amarok:// URLs in chat text views and channel to- pics. * Fixed a bug causing Konversation to treat "Page Up" and "Page Down" key events with any modifier (e.g. Ctrl) the same as without any mo- difier, making such combinations unavailable as shortcuts for other actions. * Fixed a bug causing the status bar to remain stuck displaying the description of a menu action if subsequently hovering other actions without a description set. * The Watched Nicknames Online, URL Catcher and Channel List tabs now use a toolbar at the top rather than a row of buttons at the bottom for their various actions, consistent with the Log Viewer and the (redesigned for 1.2) DCC Status tabs. Aside from a nicer UI this has the side benefit of reducing the minimum window width with any of these tabs open. * Further work on reducing the use of the qt3support/kde3support lib- raries throughout the codebase. * The design of the search bar has been made more consistent with the search bars found in other KDE applications (e.g. Konqueror, Konso- le and KWrite). * Added a "--noautoconnect" command line argument to disable auto-co- nnecting to any IRC networks on application startup. * The invite dialog now has a drop-down offering the options "Always ask", "Always join" and "Always ignore" for future default behavior, rather than just a "Don't ask again" checkbox that wasn't sufficient to cover all scenarios. * The "Hide Nicklist" action has been renamed "Show Nicklist" to com- ply with the KDE 4 HIG. * URLs are no longer decoded before being passed to the web browser, fixing the opening of some links from the chat text view. * Fixed a bug causing the application to crash when pressing the left or right arrow keys after selecting an active file transfer in the DCC Status tab's transfer list when using Qt 4.6. * Improved performance of the DCC Status tab's transfer list. * It's now possible to add nicknames to the Watched Nicknames Online list, as well as remove them, right from the tab rather than having to go to the config dialog. * Fixed a bug that would cause the "Choose Association" KDE address book integration action to create a new contact in the address book. * It's now possible to add a nickname to the watch list of all net- works in the Watched Nicknames Online tab at once. * Fixed a bug causing the opening of all bookmarks in a bookmark fol- der at once not to work. * The ban list interface has seen a facelift. The new way of working with the list makes it very easy to use an existing list entry as a starting point, modify it and then decide between replacing the original ban with the new version or adding it as an additional ban. * The topic history list in the Channel Settings dialog has seen a number of behavioral and reliability improvements. * Updated various dialog layouts to better comply with the alignment rules of the KDE 4 HIG. * The URL list in the URL catcher tab now sports a new Date column and can be sorted. The sorting settings are saved and restored across sessions. * Fixed a bug causing the vertical spacing inbetween the regular mode checkboxen on the "Modes" tab of the Channel Settings dialog to change when the display of the advanced mode list was toggled or the dialog was resized. * The Join Channel dialog now sports a combo box listing all open co- nnections (and the nicknames used on them, to be able to tell mul- tiple connections to the same network apart), with the connection owning the active tab automatically pre-selected. This allows one to pick the connection to join the channel on regardless of the active tab at the time the dialog is invoked (e.g. via the keyboard shortcut). Previously, the dialog would only operate on the connec- tion owning the active tab (and display it in a static label), possibly requiring one to switch to a suitable tab first. * Fixed a bug causing the "Clear History" item in the context menu of the channel combobox in the "Join Channel" dialog not to clear the history correctly; while it would be gone for as long as the dialog was open, it would be back when closing and reopening the dialog. * Fixed a bug causing a crash on Windows when middle-clicking the chat text view. * Fixed a bug causing the pasting of clipboard contents using keyboard shortcuts not to work when the chat text has keyboard focus. * Fixed a bug causing the setting or removing of a 'q' channel mode to be mistakenly announced as giving or taking channel owner privileges on networks where it's actually a type of ban. * Fixed a bug causing a crash when pressing the "Ok" button in the "Join Channel" dialog without entering anything in the dialog's "Channel:" input field beforehand. * More robust Unicode handling to make interaction with the D-Bus dae- mon more reliable. Changes from 1.2 to 1.2.1: This second release in the Konversation 1.2.x release series for KDE 4 adds a number of new features to the bookmarks system and support for reacting to changes in network availability as signaled by KDE's Solid, along with a number of fixes for bugs discovered since version 1.2 was released last month. * Fixed a crash when cancelling the warning dialog that is shown upon receiving two incoming DCC file transfer requests using the same file name. * Fixed a crash when using the "Clear Completed" action in the DCC Sta- tus tab after having previously used the "Clear" action to remove spe- cific transfers from the transfer list. * Fixed a crash when using the "Clear" or "Clear Completed" action in the DCC Status tab after creating a mixed selection of removable (e.g. com- pleted, or failed) and non-removable (e.g. sending) transfers and the last addition to the selection was a removable transfer. * Added a "Bookmark Tabs as Folder" feature. * Added the ability to open the contents of an entire bookmark folder at once (aka "Open Folder in Tabs"). * Made the default generated bookmark titles more verbose: The Format is now "Channel (Network-or-Server)". * Added support for reacting to changes in network availability as re- ported by KDE's Solid subsystem. If the network goes down, Konversa- tion will now no longer make futile attempts to reconnect the affect- ed connections. Instead, it will reconnect once the network comes back up. * Variable expansion (%B, %C, %I, etc.) is no longer done in text seg- ments recognized as URLs to avoid clashes with percent-encoded char- acters in URLs copied from web browsers, such as German umlauts. * Made tooltips for truncated labels in the listview version of the tab bar work again with newer versions of Qt. * Fixed a bug that caused the Watched Nicknames Online list to show the wrong or no tooltip when hovering a list item with the mouse pointer. * The default destination folder for incoming DCC file transfers is now the "Downloads paths" configured in System Settings or the equivalent in other desktop environments (under the hood, this is a shared XDG setting). * Making and then comitting unrelated changes in the Channel Settings dialog could cause unintentionally setting the channel's topic to an older version if someone else had changed the topic since the first time the dialog was opened or while the dialog was open, due to a bug in the code that avoids such external topic changes interfering with concurrent local editing of the topic. This has been fixed. * The contents of the topic edit field in the Channel Settings dialog will now reflect the selected item in the topic history list until the user starts editing. * Fixed a bug that could cause user mode changes occurring directly af- ter joining a channel not to be reflected by the channel's nickname list. * Fixed a bug causing the "Open File" context menu action for DCC file transfer items in the transfer list in the DCC Status tab not to work for incoming file transfers. * Added support for RPL_HOSTHIDDEN. Changes from 1.2-rc1 to 1.2: Konversation 1.2 is the first release of Konversation for the KDE 4 app- lication platform and desktop environment. In addition to preserving the full functionality of the KDE 3 version, this release offers a signifi- cant amount of new features and improvements to the user interface, per- formance, memory usage, energy efficiency, correctness and stability. Sum total, the changelog of all development releases since Konversation 1.1 and of this final release combined once again make for the longest changelog in Konversation's release history. Some of the highlights compared to Konversation 1.1 include support for SOCKS v5 and HTTP proxies, a redesigned DCC file transfer user interface (and much improved DCC code under the hood with several new features, such as support for IPv6 and DCC REJECT), support for UPnP for NAT tra- versal, rewritten and much improved support for Blowfish encryption (now supporting DH1080 key exchange, for example), a significantly better per- forming channel list, a rewrite of the channel nickname lists for better performance and improved battery-friendlyness, a new channel join invita- tion user interface, an improved auto-replace feature, expanded media player support and many improvements to the IRC protocol implementation. Enjoy! * When dragging a link from the chat text view, the drag object will now contain a plain text version in addition to the URL version. This allows dragging a link to places that don't accept URL drops, such as Konsole, the Konqueror address bar or Konversation's own input line. Changes from 1.2-beta1 to 1.2-rc1: After a pleasantly uneventful two weeks with beta1, this release candida- te for our first KDE 4 stable release brings a handful of bugfixes that, while definitely worth having, are fortunately none too scary. We thus ex- pect the final Konversation 1.2 release to follow in the very near future. * Fixed the scrollbar thumb not remaining at the bottom when the chat text view is resized (such as when the window is resized or the input bar in- creases in height after typing more than one line with auto-expand mode enabled). * Fixed a bug that could cause the progress bar for DCC file transfers not to be updated when "Fast DCC send" was enabled. * Fixed a bug that could cause a crash when resuming an incoming DCC file transfer. * Fixed characters that require the Alt Gr modifier to be typed (such as the '@' symbol in German keyboard layouts, for example) not causing key- board focus to move to the input line when typed while the chat text view has keyboard focus and thus not showing up in the input line. * Fixed a bug causing both the link and the marker or remember line to be selected when a line is appended directly after a link that has just been clicked. * Fixed a bug causing the automatic scroll-down not to work when more back- log is replayed than the viewport can show at once at channel join. * The "Advanced Modes" listing in the "Modes" tab of the Channel Settings dialog will now properly vertically expand as the dialog is resized even to a very large height. * Fixed a bug that could cause a crash while manipulating a channel's ban list. * Fixed a bug causing the moving of child tabs of a network tab in the treelist version of the tab bar not to work using the keyboard shortcuts, context menu actions or "Window" menu actions. Changes from 1.2-alpha6 to 1.2-beta1: Konversation 1.2-beta1 marks the departure from active feature development for Konversation 1.2 and the entrance into the much-vaunted halls of bug- fixing-until-the-final-release, which we expect to materialize in early October. Until then, you can enjoy what this beta has to offer: HTTP and SOCKS v5 proxy support, further redesign of the DCC Status tab (many of you will be happy to find the minimum window size with the DCC Status tab open much reduced now), the long-awaited return of marker and remember lines and the resurrection of link dragging from the text display widget are of particular note, but the changelog has the details on a variety of other additions, plus the usual assortment of bugfixes, as well. * Added a topic widget for Konsole windows and hooked it up to the KPart's setWindowCaption signal * Added tooltips to items in the new DCC transfer lists that describe the transfer's status more verbosely. * Fixed the OSD stealing focus when it appears on Windows. * Running DCC file transfers are now properly aborted on application quit. * Removed the 'ucs2' encoding from the encoding list, as it is is not sup- ported on IRC. This also resolves a crash when sending messages after selecting it (however the crashing codepath has been independently made more robust as well). * Fixed a crash when sending a message containing only spaces. * Added a "Manage Profiles" button to the information area above the ter- minal area in Konsole tabs. * Added SOCKS v5 and HTTP proxy support. Proxy credentials are stored in KWallet. * Moved the buttons in the DCC Status tab to a toolbar, similar to how things were already laid out in log viewer tabs. * Redesigned the DCC transfer info panel in the DCC Status tab to have a smaller minimum size. This should mean that less people will see their window size increase when a DCC transfer is initiated, as it reduces the minimum size of the window with the DCC Status tab open. * Added a "Clear Completed" item to the DCC Status tab's toolbar. * Fixed a crash on the processing of illegal lines sent by the server that contain only spaces (as sent by the buggy lidegw lide.cz gateway script). * Made DCC transfer speed reporting more reliable. * Fixed sorting the transfer list in the DCC Status tab by its "Started At" column. Previously, sorting by that column would sort alphabetically by the string value of the fields rather than properly by date. * Fixed the Channel Settings no longer disabling interface elements allow- ing the manipulation of channel properties when the user lacks the ne- cessary operator privileges in the channel. * The position of the splitter handle determining the size of the info pa- nel in the DCC Status tab is now saved across application restarts. * Fixed a crash when changing settings after the "Insert Character" dialog had been used. * When an attempt to set up a port forward via UPnP fails, an error message stating as much will now be shown in the currently active or last active tab for the associated IRC server connection. * Made the '/amsg' command work properly again. * Fixed two close icons (one on the left, one on the right) being shown on tabs when close buttons were enabled and the tabs were in top or bottom position. * Fixed incorrect colors in the listview version of the tab bar when ini- tially switching to it within a session. * Fixed a regression vs. the KDE 3 version that caused a failure to correct- ly parse shortened IPv6 addresses except when using RFC 2732-style bracket notation and explicitly stating a port to connect to. * Made the display of server address and port number in various connection- related chat view messages more consistent and IPv6-friendly (with the '<ip>:<port>' forward previously used, it could be hard to tell where the IP ended and the port began -- now it's '<ip> (port <port>)'). * Updated the scripting documentation to talk about D-Bus rather than DCOP. * The initial width of the nickname lists in channel tabs is now more sen- sible. * Added back the ability to drag links out of the chat view. * Resurrected the RTL text support in the chat view. * Fixed a crash during UPnP discovery when the router doesn't respond in the expected way. * Various actions that operate on the active tab (e.g. those found in the "Insert" menu) are now properly disabled when the last tab is closed. * Fixed a bug with Qt 4.5 where after closing a tab a tab adjacent to it would briefly be activated before subsequently activating the tab that was active before the just closed one (i.e. only noticable when 'a tab adjacent to the just closed tab' and 'the previously active tab' are not the same). * Marker lines and the remember line are back. * Fixed a bug that could cause queue flushing rates to be entered into the configuration that would prevent successfully connecting to Freenode and potentially other IRC networks. Changes from 1.2-alpha5 to 1.2-alpha6: Konversation 1.2-alpha6 is primarily a hotfix release addressing a serious DCC crash that we unfortunately only discovered after releasing alpha5. To sweeten the offer, however, it also includes a nicer DCC tranfer list that separates incoming and outgoing transfers into distinct categories, allows you to enable/disable individual columns and saves the sort column and di- rection across application restarts. Furthermore, Konsole tabs may now be renamed and there's also a fix for the handling of certain rare mode cha- racters. * The transfer list in the DCC Status tab now separates items into "Inco- ming Transfers" and "Outgoing Transfers" categories, using the same ca- tegory headers employed in System Settings and other places throughout KDE 4. * It's now possible to enable/disable the display of individual columns of the transfer list in the DCC Status tab. This is remembered across app- lication restarts. * The sort column and direction of the transfer list in the DCC Status tab is now remembered across application restarts when using Qt 4.5 or higher. * A "Rename Tab..." action has been added to the context menu of Konsole tabs. * Fixed a crash when the client observes channel modes being modified that carry a parameter when used as user modes. * Fixed a crash when an incoming active or outgoing passive DCC file trans- fer either timed out or was manually aborted while in "Connecting" state." Changes from 1.2-alpha4 to 1.2-alpha5: Konversation 1.2-alpha5 features significant performance and memory usage improvements in several areas of the application, such as channel nickname lists, backlog loading, Channel List tabs and the URL Catcher - the latter two have also seen a fair number of interface refinements, making them much more enjoyable to use. The DCC subsystem has seen the addition of IPv6 sup- port and a '/dcc get' command to accept an incoming file transfer from the input line. Various smaller additions and improvements have been made as well, including the usual share of bug fixes. * Added back "Do not ask again" checkbox missing in the rewritten invita- tion dialog that appeared in v1.2-alpha4. By implication, the dialog now also observes the "Automatically join channel on invite" option from the "Warning Dialogs" page in the configuration dialog again. * Fixed problems reconnecting an SSL-enabled connection using a self-sign- ed certificate. * Fixed a build problem with KDE trunk (i.e. what will one day be KDE 4.4). * Fixed loading and saving of the settings toggling the invitation and mul- ti-line paste warning dialogs in the "Warning Dialogs" page of the con- figuration dialog. * Improved wording of the description of the invitation dialog setting in the "Warning Dialogs" page of the configuration dialog to reflect that the dialog being disabled doesn't imply that the channel the user was invited to will be joined automatically, as the user might have rejec- ted the invitation when he got the dialog along with checking "Don't ask again". * Decreased memory usage (the objects created for every IRC user encounter- ed are lighter now). * Initializing Phonon is now delayed until it is actually needed, resulting in less memory usage for those not using highlight sound notifications and less work being done during application startup. * Fixed DCC file transfer problems with files larger than 4 GB on 32bit sys- tems, along with some other correctness improvements to the file transfer code. * Backlog loading is now more efficient. * Added IPv6 support for DCC file transfers. * The fallback default file name for unnamed files received via DCC now con- tains the date of when the file was received in ISO format. * Fixed a crash when trying to perform a tab completion with an empty nick- list (i.e. shortly after joining a big channel, before its nicklist has been filled in). * Channel nickname list updating is now more efficient and pleasant to look at. Rather than resorting the entire list after the addition of a new nick- name, the nickname is now inserted directly at the correct position (using a binary search), avoiding a lot of CPU-intensive comparisons between nick- names. The same optimization is also done for nickname and user status (as relevant in case "Sort by status" is enabled) changes - rather than trigger- ing full resorts, items are moved directly to new positions as necessary. Resorting after both new additions and changes was previously done only after a delay of one second (as part of a scheme to throttle the update rate to a maximum of once per second given how CPU-intensive it was), which meant that new nicknames would initially appear at the end of the list and move to the correct position only after one second, and that nickname and status changes were similarly reflected in the sorting only after one second - this delay has now been eliminated, making the nickname list much snappier in re- acting to what's going on. Note however that when more than ten events requiring an update to sorting occur within one second, a fallback to the old scheme of doing a full resort at a maximum rate of once per second, after an initial delay of one second, occurs, as this is believed to be more efficient in situations of very high activity (such as merges after netsplits). Thus the new scheme described above should be seen as an additional optimization for the common case. * In addition to the broad strokes optimization described above, other minor optimization work has been done on the nickname list updating code, impro- ving the efficiency of updates further. * Fixed topic label text color not reacting to system color scheme changes. * Added a '/dcc get [nick [file]]' command to accept an incoming DCC file transfer request. * Fixed a crash when using the 'Insert -> IRC Color...' menu item without there being any tabs. * Nickname changes of the discussion partner are now announced in query tabs, provided the information is available (i.e. when one shares a channel with the discussion parther, so the server informs Konversation of the nickname change). * Fixed building on OpenSolaris. * The channel item context menu in Channel List tabs now has a "Join Channel" action, and the list of URLs extracted from the channel topic has been mo- ved to a sub-menu. * Increased use of the IRC icons found in recent versions of the Oxygen icon set. * Fixed a bug causing the time a user went online not to be displayed in WHOIS information (provided the server reports it). * Fixed close button icons not immediately appearing on newly-added tabs when enabled (a preferences change would cause them to appear). * A significant revamp of the Channel List code, especially around the way the list data received from the server is being moved into the UI, has brought about significantly improved behavior. The application should now no longer be bogged down for extended periods of time while the list is being process- ed - in extreme cases, this could even lead to disconnects by timeout. * The "Apply Filter" button has been removed from the Channel List interface. Instead, the filter is (re)applied automatically as its settings are chang- ed, i.e. briefly after stopping to type into the "Filter pattern" field or after changing one of the spin- or checkboxes. * Fixed the display of human-readable mode descriptions in place of traditio- nal mode characters (toggled by the "Show raw mode characters" preference and only applicable when Konversation knows a description for a given mode char) being inconsistent between '/mode <channel> and '/mode <channel>/<user> +/-<mode>' - separate, unequal lists of mode descriptions were being used; this has been unified now. * Fixed the "Modes" tab of the Channel Settings dialog not using human-readable mode descriptions in place of traditional mode characters when the "Show raw mode characters" preference is disabled (as it is by default) and a descrip- tion for a given mode char is available. * Fixed the mode list shown by "Show Advanced Modes" in the "Modes" tab of the Channel Settings dialog not showing all modes announced as supported by the server. * The Channel List, when hovering a list item with the mouse pointer, now shows a tooltip with the entire topic of the channel when it doesn't fit the topic column's width. * Konversation will now display a warning dialog box when the user is trying to send a character not supported by the chosen encoding. * When a message containing characters not supported by the chosen encoding is sent, the chat view will now display the '?' replacements for those cha- racters that are sent to the IRC server and thus seen by other users. Pre- viously, the chat view would display the version of the message before this encoding step, and thus usually show the characters, as the Unicode character set normally used by KDE/Qt is considerably broader than many of the encodings that can be selected in Konversation. In other words, the chat view now accurately portrays what is sent to other users when a mes- sage contains characters not supported by the active encoding. * The URL Catcher should now open considerably faster with long lists of caught URLs and mail addresses. * The list items in the URL Catcher now have the same context menu as links in the chat view. Previously there was no context menu. * Caught mails and mail addresses not coming from an IRC user (an example would be links contained in a server's Message of the Day text) now have their "From" field filled in with the tab name instead of it being left blank in the URL Catcher. * Fixed a bug causing the DCC Status tab to sometimes prematurely claim a transfer status of 100%, as well as an unrealistic transfer speed, when sending a file to another user. The transfer would go on until actually finished; merely the information shown in the interface was defective. * Fixed log viewer tabs not observing the chat window background image setting. * Fixed log viewer tabs not reacting to changes to the chat window background color or font settings. * Fixed raw log tabs only applying the chat view background image setting on configuration changes, not when initially being opened. * The removal of the frame around the tab widget is now exclusive to KDE 4.3. We do it by way of enabling document mode for the tab widget (which is new in Qt 4.5), which renders badly in versions of the Oxygen style found in KDE versions earlier than 4.3, and the workaround we previously applied to make it work even with those older Oxygen versions had the unwelcome side- effect of breaking the application of color preferences to the input bar and nickname list. Changes from 1.2-alpha3 to 1.2-alpha4: Alpha 4 marks a significant milestone on the way to feature completeness for the v1.2 release of Konversation. New features in this release inclu- de UPnP NAT traversal support for DCC file transfers and chats, DH1080 key exchange support for Blowfish encryption and the ability to automati- cally split very long actions (i.e. usage of the '/me' command) into mul- tiple messages conforming to the maximum length of an IRC message (this was already supported for regular messages for some time). Many bugs have also been addressed, including an important fix for invita- tion dialogs causing disconnects by timeout if they were not dealt with quickly enough - and not only is the rewritten dialog non-blocking, it also allows for handling multiple outstanding invitations in a single dialog, rather than a new dialog being displayed for every additional invitation received. Other fixes include further interface polish and robustness and correctness improvements to Blowfish encryption, the Watched Nicks Online system and the storage of per-tab encoding preferences in the configuration file. A closing note for packagers: In this release we have replaced our cus- tom implementation of the Blowfish encryption algorithm with an optional dependency on the Qt Cryptographic Architecture (QCA) library in version 2 or higher. By implication, Blowfish encryption support is now optional: A QCA2-enabled build will have it; a build not using QCA2 will not. * Changed links to KDE's (and hence our) bug tracker throughout the code- base to use https://bugs.kde.org/ rather than http://bugs.kde.org/ * Fixed the "Show Menubar" item not getting removed from the chat view context view after showing the menubar again. Also added a separator after the item (only visible when it is present). * Switched the timestamps in log files to use KDE's locale settings for formatting the date and time, as the equivalent Qt API used previously seems to look at the value of LC_NUMERIC to detemine the format in Qt 4, which doesn't meet user expectations. * Fixed the "Date" column in the topic history of the Channel Options Dialog not using KDE's locale settings to format the value. * Fixed the "Date" column in the Channel Settings dialog's topic history sorting alphabetically rather than by date. * Improved Windows support in the bundled 'media' script. * Fixed the vertical alignment of the topic label when using Qt 4.5 (it's now top-aligned rather than vertically centered, i.e. making the topic area bigger than the topic by dragging the splitter down won't cause the topic to move down to stay in the vertical center anymore -- Qt 4.5 is needed because a method to retrieve the document margin from the chat view to use as the top margin for the topic label is new in that version). * Fixed various chat view messages containing date/time values (channel created, topic set, online since, ban info) not using KDE's locale set- tings for their display format. * Added support for using UPnP for NAT traversal for DCC file transfers (both active send and passive receive) and DCC chat. When UPnP is ena- bled in both Konversation and your router, Konversation now knows how to ask your router to set up the necessary port forward, and also how to to ask it to remove it later. * Added support for the KDE 4 version of JuK to the bundled 'media' script. * Fixed '/msg <channel> <message>' not displaying the resulting message in the target channel when the user is attending that channel. * Made the appearance of the line informing about the message being sent with '/msg <nick|channel> <message>' consistent between channel, query and status tabs (it now looks like in the former in the latter two as well). * Fixed the visualization of '/msg <nick|channel> <message>' (i.e. the '<-> target> message' line) being shown only after adding the resul- ting message to the target chat view (if present), causing an odd-look- ing order if the origin view and the target view are the same. * Watched Nicknames Online now generally operates on networks by their internal unique IDs rather than names, enabling it to handle multiple configured networks with identical names properly. * Konversation's custom implementation of Blowfish encryption has been replaced with an optional dependency on the Qt Cryptographic Architec- ture (QCA) library version 2. * The '/setkey [nick|channel] <key>' command now recognizes 'cbc:' (ci- pher-block chaining) and 'ecb:' (electronic codebook) prefixes in the key field to set a particular Blowfish block cipher mode of operation, defaulting to the value of a config dialog preference (Behavior -> Co- nnection-> Encryption -> Default Encryption Type, the default is Elec- tronic Codebook (ECB)) when no prefix is given. * Fixed crash when opening links with ' in them when the "Custom Browser" preference is enabled in Konversation's config dialog. * Improved consistency of link opening behavior between the chat view, the topic label and the URL catcher (all three now use the new-in-KDE-4 KTool- Invocation API to invoke the KDE default browser, whereas the topic label and the URL catcher were still using KRun until now). * Fixed a bug that could cause the state of the spell-checking setting for the input line to be lost across application restarts. * Added support for considering square brackets ([]) part of URLs. * Fixed the code producing multiple JOIN commands for auto-join as neces- sary to stay under the 512 byte limit for a single command to take the length of the commas in the commands into account when calculating the distribution of the channels among the multiple lines, as well as not to list channels falling at the boundary twice, once in the current and once in the following line. In English: Fixed auto-join with a massive amount of channels possibly not joining all channels correctly. * Fixed a bug causing re-joining of password-protected channels to fail on reconnects when those channels also had another mode with a parame- ter set. * Fixed a bug that caused query lines written by the user that are so long that they need to be split up into multiple messages not to display in the query text color. * Fixed a bug causing query lines written by the user that are so long they need to be split up into multiple messages for sending not to be displayed in the configured query text color. * Fixed the status bar showing HTML data when hovering the contents of the info label area at the top of query tabs. The data was actually supposed to be displayed as a tooltip (just like the nickname list item tooltips in channel tabs), and is now. * Fixed a bug causing the automatic away system to set the user away again on the next periodic activity check when no further mouse/keyboard acti- vity occurs after unlocking the screen/ending the screensaver. * Implemented splitting up of overly long actions (i.e. usage of the '/me' command) into multiple messages to stay under the 512 byte message length limit (in raw format) imposed by the IRC protocol. As with the normal message splitting, this is aware of how multi-byte/variable-width text encodings and sender hostmask length (which is part of the message on the receiving end) factor into the matter. Note that only the first message is actually sent as an action, the other messages are sent as normal messa- ges - intentionally, as this seemed to make the most sense formatting-wise. * Fixed the dialog box appearing upon receiving an invitation to join a chan- nel causing a disconnect by timeout when not being dealt with by the user swiftly enough. * Multiple invitations to join channels are now being handled by a single dialog box per connection, so that receiving many invitations in short order no longer means getting flooded with dialog boxes. * Implemented DH1080 key exchange support for Blowfish encryption. You can use the '/keyx' command to initiate a key exchange. * The raw log now shows encrypted incoming and outgoing messages in their encrypted form. Previously, incoming messages were being decrypted before being shown, and outgoing messages were being shown before encryption took place, thus not capturing what was actually coming from or going to the network socket as is the intent of the raw log. * Fixed a bug causing unrecognized channel mode characters being shown as their decimal value in the chat view messages announcing them having been set or removed. * Per-tab encoding settings for tabs belonging to a connection to a configu- red network (i.e. one found in the Server List dialog) now reference the unique ID rather than the name of the network in the config file, making things work reliably across restarts even when there are multiple identi- cally named networks. Encoding config file entries for tabs belonging to connections to servers that are not part of a configured network continue to reference the server hostnames. * Fixed the "(away)" label in front of the input line, indicating away sta- tus, not showing up in query tabs. Changes from 1.2-alpha2 to 1.2-alpha3: This third alpha fixes a fair amount of annoying bugs encountered in day-to-day usage, as well as a serious bug in handling NAMES messages from IRC servers. We've also made some UI changes that we'd like to get your feedback on: We've changed the default tab completion mode to "Cycle Nicklist", and we've removed the frame around the tab wid- get when using the listview version of the tab bar. * Worked around a Qt bug that has a text selection in the chat view that includes the last line in the view grow to include the new text when new text is appended to the view. * Fixed Konversation exposing various signals on D-Bus that it shouldn't have. * Fixed a regression causing '/names #channel' to end up duplicating the nickname list contents when already attending '#channel'. * When using Qt 4.5, Konversation no longer paints a frame around the UI elements of a view (e.g. a channel) when using the listview version of the tab bar. Feedback on this change is appreciated! * Fixed duplicated messages about DCC transfer failures in the chat view. * When the menu bar is hidden, the top-most item in the chat view context menu is now the option to unhide it again. * Fixed the OSD disappearing also cancelling the system tray blinking no- tification. * Fixed a crash on quit by D-Bus / by KDE session logout. * Fixed the tab completion nickname list sorting behavior for the "Shell- like" completion modes. The behavior now matches the "Cycle Nicklist" mode and the "Shell-like" modes of previous Konversation 1.x versions again: The last active nick for the given prefix is at the top of the list, with the rest of the list sorted alphabetically. * The default tab completion mode has been changed to "Cycle Nicklist". Feedback on this change is appreciated! * Changed the bundled 'bug' script to perform a quick search with the given parameter, rather than try to use it as a bug ID directly. The resulting behavior is unchanged for a numerical parameter, but with a string, much more useful. * The 'mail' script, which was disabled in the build system up until now, is now getting installed again. * Fixed a bug causing the "Set Encoding" menu not to work. * Fixed a bug causing the bundled 'media' script not to work when used to retrieve song information from Amarok 2 for a song which has any of the following meta data fields not set: title, artist or album. * Fixed the 'Self' field of the DCC transfer details panel not showing the port when available. * Fixed DCC transfers showing an average speed of 1 TB/s in their first second. Changes from 1.2-alpha1 to 1.2-alpha2: After just under a week's worth of adding back some missing functiona- lity, polishing the interface and, of course, of fixing bugs, we've de- cided to bring you Konversation 1.2-alpha2. While there were no major defects discovered in alpha1, this one should yield an overall more re- fined user experience, and brings us another good step closer to our first stable release for KDE 4. * Fixed nicknames in action messages using the message text color when nick coloring is disabled rather than the correct action text color as the rest of the message. * Added back the context menus for nicknames and channel links in the chat view. * Fixed the topic/info area in channels, queries and DCC chats, the nick- name list in channels and the listview variant of the tab bar not keep- ing their sizes when the window is resized. * Added missing actions ("Reconnect", "Disconnect", "Join channel ...") back to the context menu for server status tabs. * Improved the placement of the "Join on connect" channel tab context menu item (back under "Enable Notifications" as in v1.1). * Added the use of some of the new irc-* icons found in recent updates to the Oxygen icon theme. * Fixed crash when joining a channel after having been blocked from get- ting the topic for the channel. * Made the initial size of the "Edit Network" dialog more reasonable. * Improved vertical size of and text alignment inside the input line. * Added back support for drag and drop reordering of views to the list- view version of the tab bar. * Added back support for "surfing" in the listview version of the tab bar by pressing and holding the left mouse button on a view and moving the mouse up and down in the list view. * Fixed mouse handling for close buttons in the listview version of the tab bar. * Added back support for showing tooltips for truncated view items in the listview version of the tab bar. * Fixed crash when receiving lines terminated by LFCRLF from buggy IRC servers (such as the shroudBNC IRC proxy when it relays a private mes- sage received while no user was connected to it). * Worked around a Qt bug that has a text selection in the chat view that includes the last character in the view grow to include the new text when new text is appended to the view. * Sound notifications for highlights now reuse a single Phonon MediaObject by enqueuing notification sounds rather than instanciate a new one for every notification, improving resource efficiency and hopefully taking care of some high CPU usage reports that seemed to be linked to Konver- sation's Phonon usage. * Fixed the enabling/disabling of the "Find Previous" action. * Fixed several bugs in the Server List dialog (sort indicator disappear- ing while dragging items, stray pixel in the top-left corner of the list- view, hover decoration while dragging not always showing). * Improved handling in the Identity editor dialog: When Konversation com- plains about one or more required fields not being filled in, the dialog will now put focus on the field when it opens. * Fixed the 'Self' IP field of the DCC transfer details panel not showing a value when on the receiving end of a DCC file transfer. * Handle DCC REJECTs. A DCC SEND is now automatically aborted when the partner rejects it. * Fixed a bug causing the ordering of views to be partially reversed when switching from the listview version of the tab bar to the regular tab bar. * Improved consistency of the context menu for links between the topic area and the chat view. * Fixed repeated searches for the same search pattern (i.e. "Find Next") sometimes not working reliably with the chat view search bar. * Minor code cleanups and performance improvements. Changes from 1.1 to 1.2-alpha1: We're happy to bring you this first public release of the KDE 4 version of Konversation. Despite the "alpha" moniker we've settled on for this one, mostly due to not yet being feature-complete (see below), this port has already been used productively by a fair number of people for some time and should be stable enough for general usage. In fact, certain features, notably DCC file transfers and auto-replace, are expected to be more robust than in Konversation 1.1. While this version largely achieves feature parity with Konversation 1.1 (and adds several new features on top), notable exceptions are the lack of support for marker lines as well as nick and channel context menus in the chat view. These are pending the merge of a rewritten chat view and will make a return before the final Konversation 1.2 release. Other known issues in this version include a lack of KDE 4 HIG compliance in the con- figuration dialog and various minor interface polish problems; these will be addressed as well. Enjoy, and don't forget to report any bugs you encounter! * Ported to KDE 4 (KDE 4.1 or higher is required). * Enabled the (experimental, hackish) Amarok 2 support in the 'media' script. * Fixed a bug that could cause channel notifications to be lost across recon- nects. * Removed the code to recreate hidden-to-tray state across application re- starts. It was broken after the shutdown procedures were moved to a point in time after after the main window is hidden to cover quit-by-DCOP, and Konversation 1.1 features an explicit hidden startup option that fulfills user demands more accurately anyhow. This fixes a bug that made Konversa- tion always hide to tray on startup regardless of the aforementioned op- tion when the system tray icon was enabled. * Added a network settings lookup fallback to retrieving the key of a channel. Previously, this relied solely on the channel's mode map. Closes the brief gap between a channel join and the server's reply to MODE where possible, so that e.g. reconnecting directly after auto-joining a channel with a key doesn't result in a failed rejoin due to not having the key by way of the MODE reply yet. * Fixed opening URLs from the channel topic context menu in Channel List tabs. * When connecting to multiple selected unexpanded network items from the Ser- ver List, don't also try to connect to the hidden server sub-items selected by implication, avoiding unwanted connection duplicates. * Mask the password field in the Quick Connect dialog. * Fixed a bug causing passive DCC file transfers to stall at 99%. * Fixed "/leave" command in queries. * Fixed auto-replace rules containing commas in the pattern not being loaded correctly from the config file. * Fixed non-regex mode auto-replace rules containing regex special characters and character sequences not working correctly. * Improved performance of non-regex mode auto-replace rules. * Added option to open log files with the system text editor instead of the built-in log viewer. * Made the Oxygen nicklist icon theme the default nicklist icon theme. * Removed the bundled 'weather' script (it relied on a KDE 3 service no lon- ger present in KDE 4; a replacement will need to adopt a new approach). * Fix sending and receiving of files with names containing spaces * DCC Protocol adjustment to proper handle passive DCC resume/accept requests. (this breaks passive-resume compatibly with <konversation-1.2) * Send proper DCC reject commands when rejecting a queued receive. * Improved error recovery during dcc send. * Fix time left for transfers that finished in under 1 sec displaying infinite time left. * Increased default DCC buffer size to 16384 to reduce CPU load while sending or receiving files. * Added KNotify events for "Highlight triggered", "DCC transfer complete" and "DCC transfer error". * Fixed Automatic User Information Look Up not being started upon channel join on some IRC servers (namely those that don't send RPL_CHANNELCREATED after joining a channel, such at those used by IRCnet). * Updated the server hostname for the pre-configured Freenode network to the one given on their website these days, 'chat.freenode.net'. * Added support for browsing the input line history by using the mouse wheel. * Fixed problems the bundled 'tinyurl' script had with certain URLs by conver- ting it to use the TinyURL API rather than screen scraping. * Added initial support for the MODES parameter of RPL_ISUPPORT. When giving or taking op, half-op or voice to/from multiple people at once, Konversa- tion will now combine as many of them into a single MODE command as the server advertises it supports (as long as it advertises an actual value; the value-less unlimited MODES case is not supported yet as it requires more work on limiting MODE commands to the 512 byte IRC message buffer limit for extreme cases). If MODES is not given at all by the server, the fallback is an RFC1459-compliant value of 3. * Added support for formatting variable expansion in the replacement part of auto-replace rules. * Rewrote multi-line paste editor, improving handling and appearance. * Added button to intelligently replace line breaks with spaces to the multi- line paste editor. Changes from 1.0.1 to 1.1: We are extremely pleased to announce Konversation's newest major release, v1.1. Konversation 1.1 is a special release for us in multiple ways: It's our farewell to KDE 3, by way of being the last major release built upon that venerable platform. It's also our biggest release yet, in terms of the number and magnitude of the changes. The additions and improvements in this release are both user-visible and under the hood. Some of the highlights are rewritten connection handling (robustness and correctness improvements, better support for IRC URLs, bookmarking and more), redone DCC with better UI and Passive/Reverse DCC support, a redone away system with the addition of auto-away support, redone and much more useful remember / marker line support, a new outbound traffic scheduler that is capable of aggressive throttling to avoid flooding while smartly reordering messages to improve latencies, great convenience additions like a "Next Active Tab" shortcut, and much, much more, along with a large number of bugfixes and tweaks to round things out. Note: All fixes made since RC1 are marked with a "[New since RC1]" label in the changelog. We're confident that this release is the best and most robust version of Konversation published so far, and upgrading comes highly recommended to all users. Enjoy! Text views * Added an option to hide the scrollbar in chat windows. * Don't scroll to bottom if the view was scrolled up before resizing. * Fixed chat views occassionally not being scrolled to the bottom at their inception with long backlog appends. * Fixed an off-by-one error in scrollback culling. * Fixed a bug that lead to single leading whitespace characters in lines being omitted from display in chat windows. * Now preserving trailing whitespace in raw log tabs. * Fixed display of '<' and '>' in backlog lines. * Fixed copy/paste with shortcuts other than the default Ctrl+C/V ones. * Fixed onotice display. * Fixed middle-click-to-open-in-new-tab on chat window URLs when Konqueror wasn't running. * Fixed superfluous closing parenthesis being inserted after links in lines which contain multiple links followed by closing parentheses. * Fixed URLs with encoded hash mark %23 being incorrectly passed off to handler. * Fixed variable expansion causing certain URLs to be corrupted when pasted. * Added a "Save Link As" item to the context menu of links in the chat window. * Have the "Save as..." dialog suggest a file name. * Implemented Shift+Click to "Save as..." URLs.. * Made the channel links context menu work in server status views. * Fixed nickname links in chat view messages created as a result of '/msg <nick> <message>' commands erroneously prepending '->' to nicknames. * Fixed operations on nicknames containing "\" characters from the nickname context menu. * Fixed query view context menus operating on the wrong nickname under certain circumstances. * Fixed a bug that caused the "Send File..." action in the generic query context menu to pick the wrong recipient after hovering the user's own nick in the chat display. * Fixed date display not using the locale's date format. * Fixed IRC color parsing so that the colors gets reset to default if no color numbers were given. * Fixed a bug that could cause the text selection in a chat window to be messed up when new text was appended. Marker/Remember Lines * Konversation now distinguishes between manually and automatically inserted marker lines, making the "show line in all chat windows" preference less confusing. * The automatically inserted remember lines when chat windows are hidden are now "sliding", i.e. there is only one per chat window, and it moves. * Automatically inserted remember lines will now optionally only be inserted when there's actually new text being appended to the chat window (enabled by default). * The automatic remember line will now also be inserted when the window has lost focus. * Added an action to clear all marker lines in a chat window. * Improved marker lines-related preferences and terminology. * Improved the appearance of marker lines in the chat window. * Made the (marker line-related and other) identity default settings consistent between the initial identity and additional newly created identities. * Fixed hidden join/part/quit events marking tabs as dirty, allowing multiple consecutive remember lines to appear. * Fixed crash when minimizing or closing the application window prior to any tab switch when the auto-insertion of remember lines is enabled. Input line * Fixed input line contents rather than actual sent text being appended to the input history upon a multi-line paste edit. * Special characters and IRC color codes will now be inserted at the cursor position rather than the end of the input line contents. Nickname list * Implemented an additional "Sort by activity" nicklist sorting mode. * Added Oxygen nicklist icon theme by Nuno Pinheiro. * The list of nickname list themes is now sorted alphabetically. * Fixed race condition when removing a nicklist theme (listview would be repopulated before deletion was complete). * Fixed using the wrong palette for the disabled text color in the nickname list. * Fixed moving back from the custom alternate background color to system colors in the channel nickname listviews when disabling the "Use custom colors for lists, [...]" preference. * Cleanups in the nicklist item code. Tab bar / Tree list * Added option to add and remove a channel from its network's auto-join list from the tab context menu. * Added option to close tabs using middle-mouse. * Slightly sped up tab switching by eliminating some redundant UI action state updates. * Channel tabs will no longer close when kicked, but rather grey out on the tab bar and offer context menu actions to rejoin. * Channel and query tabs will now grey out on the tab bar when disconnected and no higher priority notification is present. Channel tabs will only ungrey if and when the channel is successfully rejoined after reconnect; query tabs ungrey immediately once reconnected. * Display tooltips for truncated treelist items. * Fixed forwarding keyboard events received by the treelist to Konsole widgets and focus adjustment thereafter as well as generally after switching to Konsole tabs by other means. * Fixed treelist scrollbar not picking up on new palette when the KDE color scheme changes. * Fixed a bug that could cause a crash when the view treelist would receive keypress events during application shutdown. * [New since RC1] Fixed a corner case where a server status item could become a child item of another server status item when dragging it below an special application pane item such as DCC Status or Watched Nicks Online. * [New since RC1] Fixed a crash when using the mouse wheel on the list within ~150ms of a drag and drop operation. System Tray icon * Remember and recreate minimized-to-tray state across sessions. * Added option for hidden-to-tray startup. * Reload tray icons when the icon theme changes at runtime. * Added option to not blink the systray icon, but just light it up. Channel Settings Dialog * Added a search line to the ban list. * Fixed sorting the ban list by time set. * Made the ban list's "Time Set" column use KDE locale settings for the date format. * Fixed OK'ing/Cancel'ing/closing the Channel Settings Dialog not dealing with open ban list in-line edits correctly. * Reset topic editbox when the channel options dialog has been dismissed with cancel. * Fixed incorrect time display in the topic history list in the Channel Settings dialog. Server List Dialogs * Moved the "Show at application startup" option for the Server List dialog to the dialog itself. * Auto-correct hostnames and passwords entered with preceding or trailing spaces in the Server List dialog. * Don't allow impossible ports to be set for servers. * Sensible default focus in the server list dialog. * Fixed unresponsive, defective Server List dialog window appearing at application startup using the Beryl or Compiz compositing window managers. Interface Misc * Added a "Next Active Tab" keyboard shortcut to jump to the next active tab with the highest priority notification. * Added a Find Previous standard action. * Have the "Insert Character" dialog pick up on text view font changes. * Show correct number of colors in the color chooser dialog. * Made "Alternate Background" colorchooser disable when unneeded. * Fixed crash when changing the KDE color scheme while a non-chat tab is open. * The encoding selection now allows returning to the used identity's default encoding setting. * Update actions on charset changes. * Added Notifications Toggle and Encoding sub-menu to the window menu. * Moved "Hide Nicklist" menu action from Edit to Settings. * Fixed the "Automatically join channel on invite" setting not to show an inquiring dialog anyway. * Fixed saving the state of the invitation dialog option in the Warning Dialogs preferences. * Added a warning dialog for quitting with active DCC file transfers. * Return focus to the text display widget after closing the search bar in a log reader view. * Made pressing Return or Enter in the Log File Viewer's size spinbox apply the setting, just as pressing the Return button. * Fixed a bug where the SSL padlock icon would be shown on a non-SSL connection (and clicking would cause a crash). * Empty topic labels will no longer show empty tooltips, but rather none at all. * Added a sample 12-hour clock format string to the timestamp format combobox. * Timestamp format list is no longer localized. * Robustness improvements and less UI quirks around channel password handling. * Improved general layout and consistency of tab, chat view, query and topic context menus. Added some missing icons. * Fixed some bugs of UI actions not being appropriately as their context changes. * Fixed enabled state of "Close All Open Queries" action not being updated correctly when queries are closed by way of closing a status view tab. * The window caption is now properly being reset when the last tab is closed. * Made units in spinboxen in the identity and app preferences UI more consistent. * Minor fixes to accelerators and tabbing order in various dialogs. Commands * Support command aliases in network connect commands. * Turned parameter-less '/away' into a toggle: Sets away state with default message initially, and unsets away state if already away. * Added an '/aunaway' command to complement '/aaway' (previously, there was only '/aback'). * Added support for '/kill'. * A '/join' command for an already-joined channel will now focus it. * Added an '/encoding' command as an alias to '/charset'. * '/charset' and '/encoding' now accept 'latin-1' as an alias for 'iso-8859-1'. * Improved messages for the '/charset' and '/encoding' commands. * Rewrote /me parsing to be less hackish and display usage info with an empty parameter. * '/msg <nick>' is no longer treated as equivalent to '/query <nick>'. * '/msg <nick>' will now error out when lacking a message parameter. * '/query <recipient> [message]' will now error out when recipient is a channel. * Added a '/queuetuner' command to bring up the outbound traffic scheduler's tuning/debug pane. Notifications * Seperated query messages and messages containing the user's nickname into two distinct KNotify events. * Made the tab notification color of private messages configurable independently from normal messages. * Don't highlight own nick on topic created by messages. * Fixed disabling notifications for a tab not cancelling highlight sounds. * Fixed a race condition where a highlight's autotext reply would outrun the original line's tab notification. * Fixed actions in queries and DCC chats producing message notification events (rather than the correct private message ones). * Changed the OSD screensaver check logic to work in KDE 4. * [New since RC1] Fixed on screen display occassionally reverting to the default position when using the settings dialog to change unrelated settings. Connection handling * Improved behavior with regard to reusing existing connections in connection attempts that provide an initial channel to join, such as command line arguments, the DCOP interface, the bookmark system or irc:// links). Previously, the application would have inconsistently either reused an existing or created a new connection. * Better dialog messages in the interactive variant of the decision to either reuse or create a new connection (from the Server List dialog and the Quick Connect dialog). * Improved and more consistent display of connection names (i.e. network or server host name) throughout the application. * Much improved irc:// URL support for connection intanciation, with support added for IPv6 host names and many of the features proposed by the Mirashi specification. * Eliminated redundant irc:// URL parsing codepaths in favor of a single one. * Added support for irc:// URLs to the chat views. * Removed "konversationircprotocolhandler" shell script. The Konversation executable now understands irc:// URLs directly. * Initiating connections from command line arguments and options now works also when the application is already running. * Fixed a bug that would cause a connection initiated from command line options not to get past the identity validation stage when the configuration file was unitialized and empty. * The server list dialog will now always be closed when starting Konversation with command line arguments to initiate a connection, consistent with the configuration-based auto-connect behavior. * Providing a channel in the creation of a new connection (i.e. via command line arguments, the DCOP interface, the Quick Connect dialog, the bookmark system or irc:// links) now consistently pre-empts the stored auto-join channel list if the target of the connection is a network or the hostname is found to be part of a configured network. Previously, this would only work for Quick Connect and the bookmark system (which caused the infamous Sabayon user flood in #kde due to their "Get Support" desktop link connecting to Freenode, which in an unconfigured Konversation has #kde in its auto-join list). * Connections now have globally unique IDs. * The DCOP interface now understands connection IDs in addition to host names. * The scripting systems now uses globally unique connection IDs rather than server host names to refer to connections, fixing a bug where scripted responses were being handed to all connections sharing a hostname (which was actually intentional in the absence of connection IDs, but undesirable for users). * Improved iteration behavior over a network's server list on connection losses. * The "Reconnect" action now works also when Konversation doesn't consider the connection to be in a disconnected state. * Improved the server status view messages related to reconnection attempts. * Consistently apply the "Reconnect delay" setting (previously confusingly named "Reconnect timeout"), which wasn't done before. * Fixed a bug that could cause the connection process to claim that a DNS lookup was successful when it actually wasn't. * Fixed opening bookmarks with spaces in the target address name (which may be a network name, and networks may have spaces in their name). * Properly update the state of the "Add/Remove to Watched Nicknames" nickname context menu actions when the connection isn't to a config-backed network, in which case there's no way to store and make use of those list entries. * Fixed a crash when quitting the application with a resident connection that disconnected due to an SSL error. * Fixed crashes in the DCOP interface if no connection was present. * Make the "Reconnect" action available even while ostensibly in the process of connecting. * Fix possible crash when closing all views and subsequently creating a new connection. * Fixed crash upon auto-connect at application startup. * Improved the naming of preferences related to automatic reconnection attempts to be less confusing. * Made it possible to set the number of automatic reconnection attempts to unlimited. * Provided better default values to the preferences related to automatic reconnection attempts. * Fixed crash when opening a Konsole tab and Konsole was not installed. * Fixed allowing the user to create an infinite loop of showing the SSL connection details dialog upon being presented with the invalid certificate multiple choice dialog at connection time by checking "Do not ask again" and then clicking "Details". Identities * Made it possible to set a Quit message independently from the Part message. * Saving a newly-created identity is no longer allowed without entering a real name. * Apply switching the identity in the identity dialog as opened from the network dialog to the network's settings. * Have the Edit/Delete/Up/Down buttons for the nickname list of an Identity correctly change state according to the selection Away system * Added per-identity support for automatic away on a configurable amount of user desktop inactivity and/or screensaver activation, along with support for automatic return on activity. * Fixed the "Global Away" toggle to make sense and update its state properly. * Turned parameter-less '/away' into a toggle: Sets away state with default message initially, and unsets away state if already away. * Added an '/aunaway' command to complement '/aaway' (previously, there was only '/aback'). * Broadly rewrote away management related code for improved robustness and less duplication and hacks (e.g. no more abuse of multiServerCommand for global away). DCC * Massive DCC refactoring and improved reliability. * Passive DCC support (Reverse DCC RECV, SEND). * Replaced the DCC Transfer Details dialog with a retractable transfer details pane directly in the DCC Status tab. * Added DCC transfer average speed reading to the DCC transfer details panel. * The DCC Status tab now remembers its column widths across sessions. * Fixed duplicated quotation marks around file names in DCC transfer status messages. * Fixed "Open File" DCC dialog remembering the last viewed location incorrectly. * Added an "Open Folder" button to the DCC transfer details panel. * Added check for whether the URL is well-formed before initiating a DCC send. Fixes a bug of dragging a nickname link in the chat view onto the query chat view drop target starting a DCC transfer that cannot succeed. * Ported the DCC code away from relying on server group IDs to refer to connections, made it use connection IDs instead. Fixes potential bugs with multiple concurrent connections to the same network. * Fixed queued DCC transfer items not picking up on download destination directory changes. * Fixed bug leading to crash upon initiating DCC Chat when "Focus new tabs" was enabled. * [New since RC1] New transfer items added to the DCC panel's transfer list are no longer automatically selected, meaning work on other items in the list occuring at the same time no longer gets interrupted. * [New since RC1] The "Filename:" line in the DCC panel's detailed info pane is now using text squeezing to avoid an increase in minimum window width with long file names. * [New since RC1] Failed receives now longer show 833TB/s as their transfer speed. Blowfish support * Fixed FiSH-style +p prefix to send clear text to channel despite an encryption key being set. * Text encoding is now being applied to the cleartext, rather than the ciphertext. This fixes using characters outside the ASCII range with blowfish encryption. * Fixed CTCP (and thus DCC) requests to nicknames for whom an encryption key is set. * Added support for encrypted topics. * If an encryption key is set, a lock icon will now be shown next to the input box. * Added a '/showkey <channel|query>' command to show the encryption key for the target in a popup dialog. Auto-replace * Improved auto-replace behavior with multiple matches in one line (fixes multiple Wikipedia links). * Fixed bug that could cause auto-replace to replace the wrong group of the matching string. * Auto-replace is now case-sensitive in regular expression mode. * Added regular expression editor button to auto-replace preferences. * Fixed conditional enabling of the RegExpEditor button in the auto-replace preferences page. Ignore * Fixed being asked twice whether to close a query upon ignoring the opponent. * Fixed crash when opting to close a query upon chosing to ignore the opponent from the context menu of his nickname. Watched Nicknames * Improved robustness of the Watched Nicknames Online system. * The "Offline" branches in the "Watched Nicks Online" list will now be omitted when there are no offline nicks for the respective network. * Fixed display of WHOIS spam prompted by the Watch List's WHOIS activity. * Connections to non-config-backed targets no longer show in Watched Nicks Online. * [New since RC1] Actually honor the preference to enable/disable the Watched Nicknames Online system, and apply it at runtime. * [New since RC1] Make sure the periodic Watched Nicknames Online check actually starts running within the same session after adding the first nickname to the list. * [New since RC1] Fixed a crash on quit with the Watched Nicks Online tab open and there being an open connection to a network that nicks are being watched for. Channel List * IRC markup is now removed from content in the Channel List view. * Speed improvements in Channel List views. * Fixed keyboard accelerator collisions in Channel List views. * Allow higher values than 99 in the min/max users filter spin boxes in Channel List views. Under the Hood / Protocol * Rewrote the outbound queue scheduling system to be smart enough to reorder outbound traffic to reduce interactive latency while aggressively throttling the rate to prevent flooding. Use '/queuetuner' to tweak. * Rearranged when and how auto-who is triggered upon channel join a bit, to avoid excessive flooding on multiple concurrent joins in some cases. * Auto-Who reliability improvements. * Fixed auto-join with very many channels (the auto-join command would exceed the maximum buffer length; it is now split into multiple commands as needed). * Fixed bugs around rejoining channels after reconnects related to the cause of the disconnect, channel passwords and picking the actual list of joined channels over the network's auto-join list. * Improved behavioral consistency in situations where the auto-join list is preempted by a transitory auto-join channel (bookmarks, etc.). * Fixed bug that caused the topic state not to be cleared properly prior to rejoining channels during reconnects. * Fixed onotice payload being cut off after the first word. * Changed RPL_WHOISOPERATOR handling to internationalize the common case ("is an IRC Operator") and otherwise passthrough the string sent by the server. * Fixed parsing of alternate invite format on Asuka ircds (QuakeNet). * Added support for PRIVMSG from the server. * Support RPL_UMODEIS. * Announce 'k' channel mode (i.e. channel key) changes in non-raw mode as well. * The command part of CTCP requests is now always converted to uppercase before sending, as some clients don't like lower- or mixed-case commands as the user may have entered them. * Display mode for your nick and channels you're not in. * Fixed per-channel encoding settings for the channels of a network being lost when the network is renamed. * Fixed crash when receiving actions for channels the client is not attending. * Made newline handling in the DCOP interface more robust, fixing a potential security problem (CVE-2007-4400). * A few speed optimizations and memory leak fixes. * [New since RC1] Fixed a crash on quit during KDE logout or when quitting by DCOP. Included scripts * Support for KMPlayer in the 'media' script (based on the window caption, as KMPlayer has no proper appropriate DCOP interface). * Added KPlayer support to the 'media' script (also caption-based). * Added support for Audacious to the 'media' script. * Fixed problems in disk space calculation in the 'sysinfo' script caused by wrapped df(1) output. * Added KDE 4 support to the 'sysinfo' script. * Removed some bashisms from the 'sysinfo' script. * Rewrote 'weather' script for increased reliability in error handling and better readability. * Removed broken 'qurl' script in favor of new 'tinyurl' one. * Fixed the 'fortune' script not working properly when variable expansion is turned off in the preferences. * [New since RC1] Fixed a bug in the 'media' script that caused it to break when querying Audacious with audtool not being available. Packaging * [New since RC1] Standards compliancy fixes in the application .desktop file and the nicklist icon theme .desktop files. Build * Fixed build with --enable-final. ------------------------------------------------------------------------------- Changes from 1.0 to 1.0.1 We are pleased to announce the immediate availability of Konversation 1.0.1, a maintenance release featuring notable improvements for users of right-to- left languages (including new Arabic and Hebrew translations), further re- finement of the user interface and application functionality, and fixes for minor defects found in the previous release. * A bug that caused left-to-right text contained in lines determined to be right-to-left text to appear reversed has been fixed. * Whether a line is treated as right-to-left vs. left-to-right text is now determined by the amount of each type of character in the line, improving the user experience in chats involving bi-directional text considerably. * The "Edit Network" dialog has been refined for clarity and ease of use. * A warning dialog to prevent accidentally quitting Konversation has been added. * The Auto Replace list can now be sorted. * The '/media' script command now sports improved player recognition, enhan- ced and easier configurability, the ability to distinguish between audio and video media as well as newly added support for kdetv. New '/audio' and '/video' command aliases have been added to expose these new abilities. * The lower boundary of the default DCC port range has been raised from 1025 to 1026 to avoid conflicts with the commonly blocked Windows RPC port 1025. * Dismissing an OSD notification by clicking on it will now also cancel the systray notification flash. * A new configuration file option [OSD]OSDCheckDesktopLock has been added, allowing to manually disable the screensaver check in non-KDE environments that do not support it, causing the OSD not to be displayed. * A bug that could lead to the "Switch to" sub-menu in the context menus of tabs not to be updated properly upon switching tabs has been fixed. * A bug that caused the 'irc setBack' DCOP call not to function has been fixed. * A bug that caused ampersands in the names of tabs not to be displayed and an immediately following character to be used as keyboard accelerator has been fixed. * A bug that caused ignoring nicknames with '[' or ']' characters in them to fail has been fixed. * Command aliases containing regular expression syntax can no longer cause built-in commands not to function. * A bug that caused the Konversation irc:// protocol handler not to function has been fixed. Its compatibility with systems that do not use the GNU bash shell as default shell has been improved. * A notable number of code quality improvements suggested by KDEs automated quality control service EBN have been implemented. ------------------------------------------------------------------------------- Changes from 0.19 to 1.0 We are extremely pleased to announce the immediate availability of Konversation 1.0, a significant milestone in the lifetime of the Konversation project. This release includes major new functionality as well as a large amount of improvements to existing functionality, with an emphasis on user interface polish and overall reliability. Notable new features include a vertical treelist of tabs as an alternative to the traditional tab bar, auto-replacement of words in incoming and outgoing messages, an improved Channel Settings dialog now featuring a ban list, an optional expanding input box and many improvements to both DCC file transfers and DCC chats. Enjoy! User Interface * It is now possible to place the tabs on the left side of the application window. This has been implemented as a treelist of tabs. The treelist supports all of the cosmetic and interactive properties of the original horizontal tab bar, including colored notifications, LED icons, (hover) close buttons with delayed activation, reordering, drag'n'drop and mouse wheel cruising. And a few tricks of its own. * Connection status tabs now feature specific context menu entries to disconnect and reconnect, as well as to join a channel on that connection. * The automatic resizing of tabs in the tab bar first implemented in version 0.19 is now optional. * The grouping behavior of Channel List and Raw Log tabs in the tab bar has been improved. * Disabling notification for a tab will now unset the active notification. * The enabled/disabled state of the notifications for connection status tabs will now be remembered across sessions for configured networks. * The speed of switching tabs in quick succession with the auto-spellchecking preference enabled has been improved. * Using custom fonts in the user interface is now optional. The font used by the tab bar is now configurable. * Events in the connection status tabs are now logged into separate logfiles. * The Channel Settings dialog now includes a Ban List tab that allows viewing, adding and removing bans in a channel. The dialog can now be opened from the menu bar and chat window context menu in addition to the button in the topic area. * Mode and topic handling in the Channel Settings dialog and the channel mode buttons have been overhauled to make them more robust and reliable. * The number of Quick Buttons to show below the nickname list in channel tabs is now configurable. Additional buttons may be added or existing buttons removed. * Konversation now supports auto-replacing words in incoming and outgoing messages. Regular expressions are supported. The auto-replace configuration can be found in the preferences dialog. The static Wiki link feature found in older versions has been retired in favor of an auto-replace rule. * The search bar has been redesigned to provide a better user experience. * The "Find Next" action will now open the search bar when there is no active search, matching the behavior of Konqueror and other KDE applications. * The sorting of the nick completion list has been improved to put the last active user for a given completion prefix at the beginning of the list. * The tab completion of the user's own nickname has been reenabled. * The nick completion feature has been significantly cleaned up and made more reliable. A bug that could lead to an application crash during nick completion has been fixed. * An option to expand the vertical size of the input box automatically when the text entered grows beyond the length of a single line has been added. * The behavior of the input box on pasting text including leading or trailing newline characters has been improved never to cause lines being sent without user acknowledgement. * The input box of connection status, channel and query tabs will now be disabled and the nickname list of channel tabs cleared when the respective server connection is closed. * Konversation can now optionally insert a remember line whenever a tab is hidden, either by switching to a different tab or minimizing the window. * Multiple consecutive remember lines will no longer be inserted. * Remember lines can now also be inserted into the chat windows of connection status and DCC Chat tabs. * The Colored Nicknames feature will now always assign the same color to the same nickname. * The number of backlog lines to show in the chat window is now configurable. * The recognition of URLs in the chat window has been improved to cope better with URLs containing or being surrounded by parentheses and to exclude trailing dots and commas. * Channel links following mode characters or surrounded by interpunctuation are now properly recognized in the chat window. * The context menus for URLs and channel links in the topic area now match the context menus in the chat window. * Multiple ignore or unignore actions ordered at the same time will no longer be shown on separate lines in the chat window. * The nickname context menus in the chat window, topic are and the nickname list will now show "Ignore", "Unignore" and "Add to Watched Nicknames" entries as applicable. * A bug that could lead to the chat window nickname context menu actions ceasing to function after the targeted user left the channel has been fixed. * The Server List dialog now allows connecting to a specific server in a network even when a connection to that network has been previously established. If that connection is active, a dialog box will verify whether to disconnect from the current server and connect to the chosen one instead, otherwise the connection will simply be reestablished using the newly chosen server. * The Quick Connect feature will now properly warn when the identity to be used in the connection attempt is not set up properly. * The appearance and behavior of the warning about an incorrectly set-up identity have been improved. A prior connection attempt will now be automatically resumed after the identity settings have been corrected. * Many of the pages in the Konversation preferences dialog have been redesigned and rewritten for improved consistency, reliability and clarity. The general layout of the dialog has been improved as well. * The naming of certain actions in the Configure Shortcuts dialog has been improved to make them easier to recognize outside of their normal context in the application interface. * Numerous improvements to keyboard navigation have been made. * The nickname list now longer allows drag'n'drop of channel or user links from the chat window onto list entries, as a DCC transfer of those data sources cannot succeed. * The preference to show or hide the real names of users in the nickname list will now be applied immediately. * The columns of the nickname list will no longer resize erratically when the preferences to show or hide real names and hostmasks are changed at runtime. * A bug that could lead to nicknames being sent as messages when double-clicking a selection of multiple nicknames in the nickname list has been fixed. * The placement of actions in the application menus has been improved. * The shown/hidden state of the application menubar will now be remembered across sessions. When the menubar is hidden, a menu action to show it again will now be added to the chat window context menu. * The "Close All Open Queries" menu action is now be disabled properly when there are no open queries. * A bug that could lead to the "Close All Open Queries" menu action failing to properly close all open queries has been fixed. * A bug that could lead to an application crash when closing the tab after choosing to ignore someone in a query has been fixed. * The "Hide Nicklist" menu action will now be disabled properly when the tab shown does not have a nickname list has been fixed. * The actions in the "Insert" menu will now be disabled properly when the current tab does not support them. * The default double-click action in the "Watched Nicks Online" tab is now to open a query to the respective contact. * The sorting in the Watched Nicks Online tab has been improved: Offline users are now always sorted at the bottom. * Several bugs in the "Watched Nicknames Online" tab that could lead to application crashes have been fixed. * Several errors in the chat window status messages produced by the Watched Nicks Online system have been corrected. * A bug that could lead to the columns in the "Watched Nicks Online" list resizing erratically has been fixed. * A bug that could lead to the status bar not being cleared properly when the last tab was closed or the application window lost focus after a link was launched from the chat window has been fixed. * The display of temporary and static info texts in the status bar has been improved not to interfere with each other and provide more useful information. Also, the status bar lag info section is now updated more consistently to avoid jumping around of the other status bar sections. * A bug that could lead to a wrong nickname count being shown in the status bar of channel tabs has been fixed. * Repeated triggering of the "Open URL Catcher" menu action will now properly show and hide the URL Catcher tab. * The warning about pasting text with multiple lines can now be properly disabled and reenabled from the Warning Dialogs preferences page. * A bug that could lead to IRC bookmarks showing up as actions in the Configure Shortcuts dialog has been fixed. * A bug that could lead to changes of the global KDE icon set not being applied to the tab bar close buttons immediately has been fixed. * A bug that caused the application window to change its horizontal size after opening a Query to a user with a very long hostmask has been fixed. The DCC Chat and query tabs now use the same heading style as channel tabs. * A bug that could lead to the topic and nickname list areas not keeping their size properly across tab switches has been fixed. * A bug that could lead to certain types of KNotify event notifications not being executed properly when the system tray icon was enabled has been fixed. * A bug that could lead to ampersands in network names being shown as underscores in the menu under certain circumstances has been fixed. * A bug that could lead to an application crash when trying to access non-existing tabs via the Alt+number keyboard shortcuts has been fixed. * A bug that could lead to the toolbar being hidden after it was edited has been fixed. * A bug that could lead to the chat window context menu not being cancelled properly when clicking outside of it has been fixed. * A bug that could lead to heavy disk seeking when the splitters separating the topic area and the nickname list from the chat window were moved has been fixed. * The option to only show the application in the system tray at all times has been retired in favor of the standard KDE mechanic of minimizing into the system tray. Commands * The 'Now Playing' script invoked via the /media command alias now features support for XMMS and KSCD as well as improved support for untagged media files playing in Amarok. Support for non-ASCII encodings in file names and meta tags has been improved as well. * New "/hop" and "/dehop" commands to grant or remove half-op status from a user have been added. * A new "/devoice" command has been added. * A new "/kickban" command to ban and immediately kick a user has been added. It supports the same parameters as the "/ban" command plus an additional "kickban reason" parameter. * Commands to grant or remove status for users will now be applied to the user's own nickname when no nickname parameter is given. * The "/unignore" command now supports the same simple nickname-only format as the "/ignore" command. * If given no parameter, the "/away" command will now set the away state with the default away message. The "/back" and "/unaway" commands can be used to unset the away state. * You may now use "%nick" as a placeholder for your own nickname in the auto- connect commands for a network. * A bug that could lead to the auto-connect commands for a network not being executed correctly has been fixed. DCC * DCC file transfers now support file names containing spaces on send, receive and resume. The automatic replacement of spaces with underscores in file names can now be optionally disabled in the DCC preferences. * File names are no longer being needlessly lower-cased during DCC transfers. * The DCC file transfer and DCC Chat info messages shown in the chat window have been significantly improved to provide more useful information while being less excessively verbose. * DCC Chats will now be logged properly. * It is now possible to select multiple files in the DCC Status tab. * The default size of the buffer used in DCC transfers has been increased to 8192kb for improved DCC performance. * The DCC Status tab will no longer show a speed of '?' for completed, failed or aborted transfers. * Bugs that could lead to the IP used for DCC transfers not being retrieved from the server correctly upon reconnect or in general on certain servers have been fixed. * A bug that could lead to the progress bar of a transfer in the DCC Status tab being rendered at a wrong position has been fixed. * A bug that could lead to Konversation's CPU usage spiking to 100% after a DCC Chat was closed from the remote side has been fixed. * Several bugs that could lead to application crashes in DCC Chat tabs after the server connection from which the DCC Chat originated was closed have been fixed. Technology * Konversation will now properly split up very long lines into multiple messages by calculating the length of the message preamble and the number of bytes of the text payload. Encodings that use multiple or variable numbers of bytes per character are accounted for. * The Disconnect and Reconnect menu actions and the respective input box commands have been rewritten for increased reliability. Their state will now be updated properly, and they will quit the IRC server in the correct manner. * A previous away state will now be recreated upon reconnection to a server. * The Quick Connect feature will now no longer join the auto-join channels of the configured network that the quick connect server was recognized as being a part of. * The "Konversation" and "KonvDCOPIdentity" DCOP objects have been renamed to "irc" and "identity", respectively. Several bugs in the DCOP API have been fixed, and deprecated interfaces removed. * Processing of the user lists of newly joined channels has been rewritten to fix several bugs, including improved compatibility with the Bip IRC proxy and other servers. * The lag calculation and timeout handling code has been rewritten for improved reliability and performance. * Recognition of the half-op user status has been improved. * The detection of text being typed into the input box to prevent focussing new tabs at inconvenient times has been improved to work correctly with non-ASCII characters. * The handling of channel user limits in the Channel Settings dialog is now more reliable. * Support for mode flags encountered on UnrealIRCD servers has been improved. * Support for RPL_DATASTR on UnrealIRCD servers has been improved. * A bug that could lead to the mode flags displayed for users not being updated properly after they were kicked from a channel has been fixed. * A bug that could lead to iterating over a configured network's servers failing after a connection failure has been fixed. * A bug that could lead to Konversation connecting to the wrong server in a network when choosing to connect to a specific server from the Server List dialog has been fixed. * A dialog will now ask the user for an additional nickname when all nicknames configured in the identity where tried unsuccessfully during a connection attempt. This replaces the previous behavior of repeatedly appending underscores to the last nickname, which eventually ran into the nickname length limit on the server. * A bug that could lead to unnecessary nick changes immediately after connecting to a server has been fixed. * A bug that could lead to Konversation trying to auto-identify multiple times upon connect on certain servers has been fixed. * A bug that could lead to Konversation not picking up on users leaving a channel without providing a part or quit message on UnrealIRCD servers has been fixed. * Changes to the list of auto-join channels for a network will now be applied immediately. * The auto-reconnect preference will now be properly applied at runtime. * Konversation will no longer enable IDENTIFY-MSG mode on servers that support it, but continues to be able to process messages with IDENTIFY-MSG prefixes in case an involved IRC proxy chose to enable IDENTIFY-MSG mode. * The broken default for the Custom Web Browser preference has been fixed. * Konversation will no longer allow Konsole tabs to be opened in KDE environments in which the use of terminals is prohibited by the KIOSK framework. * A bug that could lead to an application crash when a Konsole tab was closed from the Konsole component's context menu has been fixed. * A bug that could lead to an application crash when a channel was joined while the application window was hidden has been fixed. ------------------------------------------------------------------------------- Changes from 0.18 to 0.19 We are extremely pleased to announce the immediate release of Konversation 0.19. The focus of this release is on extending and improving upon established functionality. Most notable in this regard are significantly improved management of IRC networks and servers all across the application, a redesigned tab bar and better support for common IRC commands. A long list of further additions and improvements has us confident of this being the best version of Konversation yet. Enjoy! User Interface * The Server List dialog has been rewritten to allow direct manipulation of a network's servers and features more intelligent sorting behavior. Reordering networks via drag and drop is now possible. A behavioral audit of all actions in the dialog resulted in numerous improvements. * A redesigned tab bar sports highly configurable text- and LED icon-based notifications as well as more intelligent scaling behavior under space-critical conditions. * Tabs are now intelligently grouped around their respective connection status tab. * Status tab labels now display the user-configured network name where appropriate. * The Find Text dialog has been replaced by a search bar that no longer interrupts your workflow. * Channel links in the chat area now feature a context menu for quick access to common actions. * Usage of the status bar has been extended to show context-relevant information as the cursor passes over various interface elements. The lag information segment is now only shown where appropriate. * A channel's topic can now be cleared by setting an empty text in the Channel Options dialog. * The Channel Options dialog has been redesigned to allow editing the current topic while browsing a channel's topic history. * The Watched Nicknames interface has been fully integrated with network management. * Pressing the Arrow Down key in the input line now preserves any input entered by adding it to the history. * Commands may now be sent as regular messages by typing Ctrl+Enter. * The multi-line paste editor window now highlights whitespace characters and prepends the existing content of the input line. * The Colored Nicknames feature has been improved to better handle nickname changes and immediately apply any changes to the color palette. * Some previously not configurable notification events have been made configurable. * Users leaving a server will now be announced in any query you have open with them. * Query tab labels will now update when a user you have a query open with changes his/her name. * The DCC file transfer dialogs have seen a number of cosmetic improvements. Among other things, in the event of a file being renamed on save, the local file name is now shown across the application. * Various status and error messages have been rewritten for improved consistency and clarity. * The KDE standard text font will now be correctly set as initial default chat font. * It is now possible to skip displaying a server's MOTD on connect. * If the application is set to display a server's MOTD in a fixed-width font and the previously configured default chat font is already a fixed-width font, the chat font will now be used rather than the global KDE default fixed-width font. * The state of the automatic spell checking functionality is now remembered across sessions and set for all tabs. * Networks no longer lose their channel history when their settings are changed. * The Server List dialog will no longer close when a connection attempt fails due to the identity not being set up correctly. * After changing your nickname using the optional drop-down menu to the left of the input line, focus will now be returned to the input line. * The configuration dialog has been rewritten to correctly update the button state of its primary actions and improve consistency with the KDE style guide. * The vertical and horizontal splitters in channel tabs now behave better when the application window is resized and correctly retain their positions across sessions. * The OSD preview in the OSD settings page is now always shown correctly. * The OSD will no longer be shown when the desktop is locked. * A bug that prevented copying text from the chat area under certain circumstances has been fixed. * Keyboard search in the channel nickname list has been fixed. * A number of issues affecting nickname context menus in the chat area have been fixed. * A bug leading to a wrong operator count in the status bar has been fixed. * It is no longer possible to add nameless networks or hostless servers in the respon- sible management dialogs. * Bugs that led to parts of the interface not reacting to KDE color scheme changes have been fixed. * The status bar now correctly reacts to KDE font size changes. * A bug that led to the application window resizing on overly long status bar contents has been fixed. * A bug that led to multiple remember lines being inserted into the frontmost tab when away mode was activated has been fixed. * A bug that led to wrong link addresses being opened from the chat area has been fixed. * Bugs that led to wrong URLs being produced by dragging a link from the chat area to the input line have been fixed. * Channel names are now better recognized as such by the chat area. Bookmarking * Bookmark titles now default to the channel name. * Bookmarks now store the network name rather than the server address where available. * Bookmarks now support IPv6 addresses. Commands * The '/server' command now recognizes a greater variety of address notations including network names. * The '/names' command now always succeeds in returning the user list of a channel. * The '/topic' command now always succeeds in returning the topic of a channel. * A '/dns' command has been added that facilitates resolving the host name of a user on the server as well as generic host names. Reverse resolve is supported on KDE 3.5.1+. * An '/unignore' command has been added. * A '/disconnect' command has been added. * A '/reconnect' command has been added that disconnects and then reconnects the respec- tive server. * A '/setkey' command has been added to set the Blowfish encryption/decryption key for the respective context. * The '/list' command now correctly opens the Channel List tab. * A bug in parsing the arguments of the '/join' command has been fixed. * Usage information and error reporting for various commands has been rewritten for improved consistency and clarity. * A bug that led to a 'clear' command being sent to the server when using the '/clear' command to clear the contents of a query tab has been fixed. Miscellaneous * The 'media' script has been rewritten and now features improved compatibility with common character sets, greatly enhanced support for the Kaffeine media player and newly added support for the Yammi media player. * The 'sysinfo' script has been rewritten to produce more concise output and better handle a variety of storage scenarios. * The convenience feature expanding [[term]] into a Wikipedia link is now localizable and generates a link that performs an intelligent lookup for the term in the Wiki- pedia rather than assume a correct direct link. Technology * Konversation now depends on KDE 3.4+. * The preferences storage system has been rewritten to facilitate easier maintenance and faster development in future release cycles. * Localized support for a long list of IRC protocol primitives has been added. * The application will now correctly iterate over a network's servers on successive failed connection attempts. * When the '/server' command or the Quick Connect dialog is used to connect to a server that has previously been added to a network in the Server List dialog, it will be recognized as being part of the network and the respective identity settings will be applied. * The automated reply to a highlight event can now reference the groups of the matched pattern by the identifiers %1-%9 and the entire match by the identifier %0. * The CABAP IDENTIFY-MSG technology is now supported. * Compatibility with the Unreal IRC server has been improved. * Initial support for Blowfish encryption (compatible with mIRCryption and FiSH) has been added. Note that Diffie-Hellman key exchange (DHX) is not yet supported. * The Watched Nicknames reporting has been made more reliable. * Socket handling in the DCC file transfer feature has been improved. * Alpha-blending of icons in the channel nickname list has been fixed. * Support for the iso-2022-jp encoding has been enhanced. * The custom web browser feature will now automatically append the URL as a parameter to the specified command when the %u identifier is missing. * Channel modes are now correctly cleared and updated in the internal representation on rejoin. * A bug that led to an infinite loop during a connection attempt when all nicknames configured in the identity were in use has been fixed. * A bug that could lead to a crash when opening the log file for a closed connection has been fixed. ------------------------------------------------------------------------------- Changes from 0.17 to 0.18 - All nicks were blue when colored nicks are disabled with some setups - /cycle now works as expected - /gauge script was not working correctly when given a bigger than 100 argument - /mail script has been added - Button to invoke Regular Expression Editor (if installed) in Settings -> Highlight. - Complete command line argument system for connection - An option to disable clickable nicks . Add ClickableNicks=false to konversationrc to disable it. - Fixed a big memory leak in message processing - Nicklist slider now correctly resizes in all channels when its resized and correctly restores on startup - [[foo]] is now a link to http://en.wikipedia.org/wiki/foo . We will expand this to local wikipedia's in a later release [Update: Now fixed in 0.19] Changes from 0.16 to 0.17 - Add an option to hide realnames in nicklist - Show away users as disabled ala Xchat - Remove sort by away status - Fix whois replies for normal users on safe channels ( IRCNet alike ) - Fix whois replies from ircd-hybrid ( Efnet alike ) - Better handling of quiet bans ( especially Freenode ) - KDE color scheme is now honered in topic widget - Enable clickable nicks even if colored nicks are off - Per identity pre-shell command support with a GUI - Bookmarking support - Detect Japanese encoding correctly while trying to auto-detect Unicode Changes from 0.15 to 0.16 - Dropping URLs onto nick on nicklist or onto query initiates DCC send - You can now do SSL connections from Quick Connect Dialog - Nicklist Icon Themes - New topic widget - Added a channel dialog - Made the nickname box optional - Fix DCC resume when its set to auto-accept - Calculate DCC CPS more accurately - Colored nicks support - Added dcop functions to set away and added alt+a shortcut to toggle away - Clicking nicks in channel text will now open a query and similarly, clicking #foo will now join channel #foo - Nicks in channel view now have a context menu as in nicklistview - Tab at begining of line inserts last completed nick - A media script added to replace amarok,juk,noatun,kaffeine scripts. Use /media instead of using /amarok,/juk etc. - Links can now be dragged & dropped from channels - Midde clicking urls now opens them in new tab in konqueror ( if konqueror is used for links ) - Improved unicode detection - Fix unicode detection for strings containing color markup - /omsg,/onotice support - Added an option to use an IPv4 interface for IPv6 dcc sends - A new /google script added to search Google using Google SOAP api - Redesigned settings page - A new application icon - Lots of optimizations all around Changes from 0.14 to 0.15 - Ported socket code to KNetwork. Weird connection problems should be gone now - Get default username/ident information from system - Support for bouncer prefixes in nick completion - Dcc port range support - Scripts now works with /script or /exec script - Improved bidi support. - Cleaned up settings dialog - Added an option how to get own IP for DCC send/chat - "Open Watched Nicks Online panel on startup" option - Support encoding settings per channel - SSL Support - KIO-fied local I/O on DCC send/receive - OSD Positioning Support - New network based server settings - Added an option to stay in systray all the time - Full irc:/ url support (channel name & password now supported in url) - /charset support - auto /WHO support - display away status of nicks in nick list Changes from 0.13 to 0.14 - Added irc "pseudo" command /prefs for changing settings without settings dialog. - Measure away time and make it available via placeholder (%t) - (Very much) Improved OSD. - New application icons by luciash d' being <luci@sh.ground.cz>. Thanks! - Added /server command for connecting to a server. - After the connection is lost and the old nickname is still in use, the nickbutton in the channelwindows is updated to the new nick. - Now you can read utf8 encoded messages even if your locale is not unicode - "Do not show this dialog again" preferences now works correctly - Added an "Insert Remember Line" feature. The user can mark the position in the channel where he stopped reading(because he is away for a short time). When he comes back, he can scroll back to this mark and read what he missed. - Added the possibility to execute commands on server connection(for authentication and such things). Can be configured in the "Edit Server" dialog. - Added further timestamps for am/pm (BR 79612) - Added QuickConnect dialog by Michael Goettsche. (Thanks once again) - Properly receive a logout/shutdown request and terminate konversation, instead of minimizing to the systray. - Make OSD switchable on/off via DCOP. Thanks to Michael Goettsche! (BR 75870) - Dates can now be shown, next to the timestamp. Patch by Michael Goettsche (BR 82785) (thanks!) - Added DCC auto-resume feature by Michael Goettsche (BR 81740) (thanks!) - Added systray notification - Added shell like nick completion mode (aka uga mode) - Implemented a cleaner way of handling tab shortcuts - Implemented DCC Chat - Hilight mailto: links - Topic line can now be hidden - Added an away nickname - Added /aaway, /ame and /amsg - Added "Open URL" context menu to channel list entries - Implemented slower / faster blinking of tabs for more / less important events - Less important events like Join, Part and Nickchanges can now be hidden - Custom CTCP Version Reply Support - Added a shortcut to close all open queries - Added a patch by Thomas Nagy to cycle tabs with mouse scroll wheel (thanks!) - Added logfile reader - Added patch by Gary Cramblitt to enhance DCC panel (thanks!) - Added patch by Gary Cramblitt to select custom web browser command (thanks!) - When the server goes offline, now all associated tabs get crossed out - Added a multi line pasting editor - Nicks Online is now a tabbed panel, rather than separate window. - Added sound support to the highlight list - Added regular expression support to the highlight list^ - Follow the style guide when the tray icon is enabled by minimizing to tray when the close button is clicked. - Auto text feature on highlight events - DCC resume offers to rename a transfer now - Added patch by Ruud Nabben to enable hiding of IRC colors (thanks!) - Various small fixes and additions Changes from 0.12 to 0.13 - Added an option to hide hostmasks in channel nick lists - Autojoin on invite with user interaction implemented - Added URL catcher interface - Added user interface for "don't show again" dialogs - Added slovenian translation by Barko (thanks!) - Added korean translation by Hye-Shik Chang (thanks!) - Added option to place tabs on top - Color configuration is now in preferences dialog - Quick buttons configuration is now in preferences dialog - Notify list is now in preferences dialog - Option for a background image added - Added /quote command for raw server messages - Added Copy URL into clipboard for URL catcher - Added option for reconnect on too long lag - Added "Server list" menu entry to "File" menu - Applied a patch by Peter Simonsson (thanks!) - Patch added Color picker, IRC colors and KNotify events - Added support for command aliases - Encodings are now on per-identity basis - Added indicator to show own away state - Added system tray icon patch by Frauke Oster (thanks!) - Channel list update is now more CPU friendly - Tell the user why the channel list could not be opened - Channel list now sorts correctly when number column is clicked - Applied a patch by Christian Muehlhaeuser to enable bigger mode changes (thanks) - Applied a patch by Christian Muehlhaeuser to right-align close widgets (thanks) - Info button on dcc panel now works - Added /unban command - Applied a patch by Christian Muehlhaeuser for OSD functions (thanks) - Applied a patch by Sascha Cunz for extended user modes beyond @ and + (thanks) - Applied a patch by Steve Wollkind to close visible tab via shortcut (thanks) Changes from 0.11 to 0.12 - Now handles multi server mode in one single window - Fixed the wrong Ops counter - Added /notify command and respective dcop calls - Added support for /oper command - Implemented /ban command and menu items - Added shortcut (F3) for search dialog - History does not get cleared on cursor up/down anymore - Added context menu to copy URLs immediately - Added paragraph spacing - Added hostmask column to nick list - Implemented background hostmask scanning - Recognises now who set the first topic - Added nickname sorting options - Sorting now has up/down arrows - Added channel list panel - Added russian translation by Stanislav Karchebny (thanks!) - Applied some patches by Stanislav Karchebny - Added PgUp/PgDown support to Channels, Queries and Status views - Added rename button to identity page to overcome QComboBox limitations - Tabs now blink in the last highlight color to indicate important text - Tabs don't get to front anymore while the user is typing in an input line - Added shortcut editor dialog - Added konsole panel (thanks to Mickael Marchand) Changes from 0.10 to 0.11 - Added a patch by Bart Verwilst to provide automatic service registration (thanks!) - Added "Hide Menu" function - Improved server connection code to stop konversation freezes at startup - Server lag calculation after reconnect fixed - Implemented own async lookup class to throw out broken QDns - Added prelimnary application icons - Send File in dcc panel now works - Added Send File context menu item in text views - Added dialog for Resume / Overwrite DCC Get files - Added large paste warning dialog - Close Buttons on tabs are now an option - Added context menu on tabs with close item - Added ALT+1 - ALT+9 for switching tabs - Applied a big patch by Alex Zepeda. Thanks! - First working DCOP implementation - Implemented a simple search dialog - Added a raw log pane Changes from 0.9 to 0.10 - Font encodings are now set via KCharsets - Implemented different identities - Added double click actions to nick list and notify list - Added support for ASCII-BEL - Added custom spacing and margin - Added close buttons for the tabs - Redesign of the color configuration dialog - Switched to kapp->config() to properly remember dialog status - Color code parsing now works with QRegExp - CTCP-Ping now works - Removed files that are no longer needed - Updated German translation Changes from 0.8 to 0.9 - Added strikeout support (untested yet) - Added Swedish translation, done by Karolina Lindqvist (thanks!) - Added optional timestamps to chat windows - Quick Buttons and Channel Mode Buttons can now be hidden - Added support for multi channel joins - Added #include "sourcefile.moc" to all Q_OBJECTS to speed up compiles - Added support for autoconnect to server - Inserted a QSplitter between channel text and nick list - Added support for background colors - Reduced flickering on blinking tabs - Added experimental support for foreign language characters - Added ignore list functionality - Added away / unaway messages - DCC folder can now be selected vial GUI - Applied a patch by Barak Bloch to fix foreign character set behaviour (thanks!) - Updated German translation Changes from 0.7 to 0.8: - DCCs can now be opened (started) using the 'open' button - DCCs can now be aborted using the 'abort' button - Added support for /users reply - Added support for /invite and 341 reply - Added support for 401 error reply - Added /smsg for "silent messages" - Text and Nicklist-Fonts can now be selected via GUI - Changed server ping response again to make dalnet ircd happy - Fixed nicklist sorting in channels - Switched to kdevelop 2.1.4 to hopefully fix some compile problems - Made Notices appear a bit different - DCC recipient list now gets sorted - Made text widget not scroll when scroll bar isn't completely down - Parsed WHOIS messages into human readable form - Pasting multiline text into input lines now behaves as expected - Hilights now honor the sending nick, too (patch by Suran. Thanks!) - You can now hilight all your own lines independently - Fixed the problem in the appearance dialog with font names - Added DCC error dialogs - Quit/Nickchange/Kicks are now only reported in channels where the nick actually is in - Fixed bug with lockups on defective logfiles - Added support for EUR currency symbol - Added keyboard handling to navigate between pages - Code cleanup in nick list - Added first support for custom colors in nick list - Added application dsescription for the 'About' dialog - Major restructuring of the server status panel diff --git a/data/images/nickicons/alternative/index.desktop b/data/images/nickicons/alternative/index.desktop index 6d759d23..df02dde0 100644 --- a/data/images/nickicons/alternative/index.desktop +++ b/data/images/nickicons/alternative/index.desktop @@ -1,102 +1,104 @@ [Desktop Entry] Type=Theme Name=Big Bullets Name[ar]=رصاصات كبيرة Name[bg]=Големи орнаменти Name[bs]=Veliki predznaci Name[ca]=Big Bullets Name[ca@valencia]=Big Bullets Name[cs]=Velké odrážky Name[da]=Big Bullets Name[de]=Große Kugeln Name[el]=Μεγάλα Bullet Name[en_GB]=Big Bullets Name[es]=Big Bullets Name[et]=Big Bullets Name[eu]=Bulet handiak Name[fi]=Isot luettelomerkit Name[fr]=Grosses balles Name[ga]=Big Bullets Name[gl]=Furados grandes Name[he]=עיגולים גדולים Name[hne]=बिग बुलेट्स Name[hu]=Nagy pöttyök +Name[is]=Stórar kúlur Name[it]=Big Bullets Name[kk]=Ірі таңбалау белгілері Name[km]=ចំណុច​ធំ Name[ko]=큰 불릿 Name[lt]=Dideli ženkliukai Name[ms]=Big Bullets Name[nb]=Store kuler Name[nds]=Groot Pünkt Name[nl]=Big Bullets Name[nn]=Store kuler Name[pa]=ਵੱਡੀ ਬਿੰਦੀਆਂ Name[pl]=Duże pociski Name[pt]=Big Bullets Name[pt_BR]=Bolas grandes Name[ro]=Buline mari Name[ru]=Большие пули Name[si]=විශාල බුලට් Name[sk]=Veľké guľky Name[sl]=Velike točke Name[sq]=Big Bullets Name[sr]=Велике тачке Name[sr@ijekavian]=Велике тачке Name[sr@ijekavianlatin]=Velike tačke Name[sr@latin]=Velike tačke Name[sv]=Stora punkter Name[tr]=Büyük İmler Name[uk]=Великі кульки Name[x-test]=xxBig Bulletsxx Name[zh_CN]=大子弹主题 Name[zh_TW]=大圓點 Comment="Big Bullets" by Dario Abatianni Comment[ar]="رصاصات كبيرة" لـِ Dario Abatianni Comment[bg]="Големи орнаменти" от Dario Abatianni Comment[bs]=„Veliki predznaci“ Darija Abatijanija Comment[ca]=«Big Bullets» per Dario Abatianni Comment[ca@valencia]=«Big Bullets» per Dario Abatianni Comment[cs]="Velké odrážky" - Dario Abatianni Comment[da]="Big Bullets" af Dario Abatianni Comment[de]=„Große Kugeln“ von Dario Abatianni Comment[el]="Μεγάλα Bullet" από Dario Abatianni Comment[en_GB]="Big Bullets" by Dario Abatianni Comment[es]=«Big Bullets» de Dario Abatianni Comment[et]="Big Bullets" (autor Dario Abatianni) Comment[eu]="Bulet handiak", Dario Abatianni Comment[fi]=”Isot luettelomerkit” (Dario Abatianni) Comment[fr]=Thème « Grosses balles » par Dario Abatianni Comment[ga]="Big Bullets" le Dario Abatianni Comment[gl]=«Big Bullets» por Dario Abatiani Comment[he]="עיגולים גדולים" של Dario Abatianni Comment[hne]="बिग बुलेट्स" दारियो अबातियान्नी द्वारा Comment[hu]="Nagy pöttyök" - Dario Abatianni +Comment[is]="Big Bullets" eftir Dario Abatianni Comment[it]=«Big Bullets» di Dario Abatianni Comment[kk]=Dario Abatianni келтірген "Ірі таңбалау белгілері" Comment[km]="ចំណុច​ធំ" ដោយ Dario Abatianni Comment[ko]=Dario Abatianni의 "큰 불릿" Comment[lt]=„Dideli ženkliukai“, sukurti Dario Abatianni Comment[nb]=«Store kuler» av Dario Abatianni Comment[nds]="Groot Pünkt" vun Dario Abatianni Comment[nl]="Big Bullets", door Dario Abatianni Comment[nn]=«Store kuler» av Dario Abatianni Comment[pl]="Duże pociski" autorstwa Dario Abatianni Comment[pt]="Big Bullets" por Dario Abatianni Comment[pt_BR]="Bolas grandes" de Dario Abatianni Comment[ro]=„Buline mari” de Dario Abatianni Comment[ru]=Сделал Dario Abatianni Comment[si]=Dario Abatianni විසින් "විශාල බුලට්" Comment[sk]="Veľké guľky" od Dario Abatianni Comment[sl]=Dario Abatianni: "Velike točke" Comment[sq]="Big Bullets" nga Dario Abatianni Comment[sr]=„Велики тачке“ Дарија Абатијанија Comment[sr@ijekavian]=„Велики тачке“ Дарија Абатијанија Comment[sr@ijekavianlatin]=„Veliki tačke“ Darija Abatijanija Comment[sr@latin]=„Veliki tačke“ Darija Abatijanija Comment[sv]="Stora punkter" av Dario Abatianni Comment[tr]=Dario Abatianni tarafından "Büyük İmler" Comment[uk]=«Великі кульки», автор — Dario Abatianni Comment[x-test]=xx"Big Bullets" by Dario Abatiannixx Comment[zh_CN]="大子弹" 由 Dario Abatianni 创作 Comment[zh_TW]=「大圓點」,由 Dario Abatianni 提供 diff --git a/data/images/nickicons/christmas/index.desktop b/data/images/nickicons/christmas/index.desktop index 8ebab0fd..b8aef7e3 100644 --- a/data/images/nickicons/christmas/index.desktop +++ b/data/images/nickicons/christmas/index.desktop @@ -1,103 +1,105 @@ [Desktop Entry] Type=Theme Name=Christmas Theme Name[ar]=سمة الكريسماس Name[ast]=Tema de nadal Name[bg]=Коледна тема Name[bs]=Božićna tema Name[ca]=Tema nadalenc Name[ca@valencia]=Tema nadalenc Name[cs]=Vánoční motiv Name[da]=Juletema Name[de]=Weihnachtsdesign Name[el]=Χριστουγεννιάτικο θέμα Name[en_GB]=Christmas Theme Name[es]=Tema navideño Name[et]=Jõuluteema Name[eu]=Gabonak Name[fi]=Jouluteema Name[fr]=Thème de Noël Name[ga]=Christmas Theme Name[gl]=Tema de Nadal Name[he]=ערכת חג מולד Name[hne]=क्रिसमस थीम Name[hu]=Karácsonyi téma +Name[is]=Jólaþema Name[it]=Tema natalizio Name[kk]=Милад нақышы Name[km]=ស្បែក​បុណ្យ​ណូអែល Name[ko]=크리스마스 테마 Name[lt]=Kalėdinis apipavidalinimas Name[ms]=Tema Krismas Name[nb]=Juletema Name[nds]=Wiehnacht-Muster Name[nl]=Kerstthema Name[nn]=Juletema Name[pa]=ਕ੍ਰਿਸਮਿਸ ਥੀਮ Name[pl]=Wystrój świąteczny Name[pt]=Tema de Natal Name[pt_BR]=Tema de Natal Name[ro]=Tematică de Crăciun Name[ru]=Рождественская Name[si]=නත්තල් තේමාව Name[sk]=Vianočná téma Name[sl]=Božična tema Name[sq]=Christmas Theme Name[sr]=Божићна тема Name[sr@ijekavian]=Божићна тема Name[sr@ijekavianlatin]=Božićna tema Name[sr@latin]=Božićna tema Name[sv]=Jultema Name[tr]=Noel Teması Name[uk]=Різдвяна тема Name[x-test]=xxChristmas Themexx Name[zh_CN]=圣诞主题 Name[zh_TW]=聖誕節 Comment="Christmas Theme" by Kenichiro Takahashi Comment[ar]="سمة الكريسماس" لـ Kenichiro Takahashi Comment[bg]="Коледна тема" от Kenichiro Takahashi Comment[bs]=„Božićna tema“ Keničira Takahašija Comment[ca]=«Tema nadalenc» per Kenichiro Takahashi Comment[ca@valencia]=«Tema nadalenc» per Kenichiro Takahashi Comment[cs]="Vánoční motiv" od Kenichiro Takahashi Comment[da]="Juletema" af Kenichiro Takahashi Comment[de]=„Weihnachtsdesign“ von Kenichiro Takahashi Comment[el]="Χριστουγεννιάτικο θέμα" από Kenichiro Takahashi Comment[en_GB]="Christmas Theme" by Kenichiro Takahashi Comment[es]=«Tema navideño» de Kenichiro Takahashi Comment[et]="Jõuluteema" (autor Kenichiro Takahashi) Comment[eu]="Gabonak", Kenichiro Takahashi Comment[fi]=”Jouluteema” (Kenichiro Takahashi) Comment[fr]=« Thème de Noël » par Kenichiro Takahashi Comment[ga]="Christmas Theme" le Kenichiro Takahashi Comment[gl]=«Christmas Theme» por Kenichiro Takahashi Comment[he]="ערכת חג מולד" של Kenichiro Takahashi Comment[hne]="क्रिसमस थीम" केनिचिरो ताकाहाशी Comment[hu]="Karácsonyi téma" - Kenichiro Takahashi +Comment[is]="Christmas Theme" eftir Kenichiro Takahashi Comment[it]=«Tema natalizio» di Kenichiro Takahashi Comment[kk]=Kenichiro Takahashi келтірген "Милад нақышы" Comment[km]="ស្បែក​បុណ្យ​ណូអែល" ដោយ Kenichiro Takahashi Comment[ko]=Kenichiro Takahashi의 "크리스마스 테마" Comment[lt]=„Kalėdinis apipavidalinimas“, sukurta Kenichiro Takahashi Comment[nb]=«Juletema» av Kenichiro Takahashi Comment[nds]="Wiehnacht-Muster" vun Kenichiro Takahashi Comment[nl]="Christmas Theme" door Kenichiro Takahashi Comment[nn]=«Juletema» av Kenichiro Takahashi Comment[pl]="Wystrój świąteczny" autorstwa Kenichiro Takahashi Comment[pt]="Tema de Natal" por Kenichiro Takahashi Comment[pt_BR]="Tema de Natal" de Kenichiro Takahashi Comment[ro]=„Tematică de Crăciun” de Kenichiro Takahashi Comment[ru]=Сделал Kenichiro Takahashi Comment[si]=Kenichiro Takahashi විසින් "නත්තල් තේමාව" by Comment[sk]="Vianoičná téma" od Kenichiro Takahashi Comment[sl]=Kenichiro Takahashi: "Božična tema" Comment[sq]="Christmas Theme" nga Kenichiro Takahashi Comment[sr]=„Божићна тема“ Кеничира Такахашија Comment[sr@ijekavian]=„Божићна тема“ Кеничира Такахашија Comment[sr@ijekavianlatin]=„Božićna tema“ Keničira Takahašija Comment[sr@latin]=„Božićna tema“ Keničira Takahašija Comment[sv]="Jultema" av Kenichiro Takahashi Comment[tr]=Kenichiro Takahashi tarafından "Noel Teması" Comment[uk]=«Різдвяна тема», автор — Kenichiro Takahashi Comment[x-test]=xx"Christmas Theme" by Kenichiro Takahashixx Comment[zh_CN]="圣诞主题" 由 Kenichiro Takahashi 创作 Comment[zh_TW]=「聖誕節」,由 Kenichiro Takahashi 提供 diff --git a/data/images/nickicons/classic/index.desktop b/data/images/nickicons/classic/index.desktop index 6361f7e7..a6b72554 100644 --- a/data/images/nickicons/classic/index.desktop +++ b/data/images/nickicons/classic/index.desktop @@ -1,104 +1,106 @@ [Desktop Entry] Type=Theme Name=Classic Theme Name[ar]=السّمة التّقليديّة Name[be]=Класічная тэма Name[bg]=Класическа тема Name[bs]=Klasična tema Name[ca]=Tema clàssic Name[ca@valencia]=Tema clàssic Name[cs]=Klasický motiv Name[da]=Klassisk tema Name[de]=Klassisches Design Name[el]=Κλασικό θέμα Name[en_GB]=Classic Theme Name[es]=Tema clásico Name[et]=Klassikaline Teema Name[eu]=Gai klasikoa Name[fi]=Klassinen teema Name[fr]=Thème classique Name[ga]=Téama Clasaiceach Name[gl]=Tema clásico Name[he]=הערכה הקלסית Name[hi]=क्लासिक प्रसंग Name[hne]=क्लासिक प्रसंग Name[hu]=Klasszikus téma +Name[is]=Hefðbundið þema Name[it]=Tema classico Name[kk]=Классикалық нақышы Name[km]=ស្បែក​ក្លាស៊ីក Name[ko]=고전 테마 Name[lt]=Klasikinis apipavidalinimas Name[ms]=Tema Klasik Name[nb]=Klassisk tema Name[nds]=Klass'sch Muster Name[nl]=Klassiek thema Name[nn]=Klassisk tema Name[pa]=ਕਲਾਸਿਕ ਥੀਮ Name[pl]=Wystrój klasyczny Name[pt]=Tema Clássico Name[pt_BR]=Tema clássico Name[ro]=Tematica clasică Name[ru]=Классическая тема Name[si]=සම්භාව්‍ය තේමාව Name[sk]=Klasická téma Name[sl]=Klasična tema Name[sq]=Classic Theme Name[sr]=Класична тема Name[sr@ijekavian]=Класична тема Name[sr@ijekavianlatin]=Klasična tema Name[sr@latin]=Klasična tema Name[sv]=Klassiskt tema Name[tr]=Klasik Tema Name[uk]=Класична тема Name[x-test]=xxClassic Themexx Name[zh_CN]=经典主题 Name[zh_TW]=傳統 Comment="LED" by Dario Abatianni Comment[ar]="أضواء" لِـ Dario Abatianni Comment[bg]="LED" от Dario Abatianni Comment[bs]=„LED“ Darija Abatijanija Comment[ca]=«LED» per Dario Abatianni Comment[ca@valencia]=«LED» per Dario Abatianni Comment[cs]="LED" - Dario Abatianni Comment[da]="LED" af Dario Abatianni Comment[de]=„LED“ von Dario Abatianni Comment[el]="LED" από Dario Abatianni Comment[en_GB]="LED" by Dario Abatianni Comment[es]=«LED» de Dario Abatianni Comment[et]="LED" (autor Dario Abatianni) Comment[eu]="LED", Dario Abatianni Comment[fi]=”LEDit” (Dario Abatianni) Comment[fr]=« LED » par Dario Abatianni Comment[ga]="LED" le Dario Abatianni Comment[gl]=«LED» por Dario Abatianni Comment[he]=ערכת "LED" של Dario Abatianni Comment[hne]="एलईडी" दारियो अबातिनी द्वारा Comment[hu]="LED" - Dario Abatianni +Comment[is]="LED" eftir Dario Abatianni Comment[it]=«LED» di Dario Abatianni Comment[kk]=Dario Abatianni келтірген "Сәуледиод" Comment[km]="LED" ដោយ Dario Abatianni Comment[ko]=Dario Abatianni의 "LED" Comment[lt]=„LED“, sukurta Dario Abatianni Comment[nb]=«LED» av Dario Abatianni Comment[nds]="LED" vun Dario Abatianni Comment[nl]="LED", door Dario Abatianni Comment[nn]=«LED» av Dario Abatianni Comment[pl]="LED" autorstwa Dario Abatianni Comment[pt]="LED" por Dario Abatianni Comment[pt_BR]="LED" de Dario Abatianni Comment[ro]=„LED” de Dario Abatianni Comment[ru]=Сделал Dario Abatianni Comment[si]=Dario Abatianni විසින් "LED" Comment[sk]="LED" od Dario Abatianni Comment[sl]=Dario Abatianni: "LED" Comment[sq]="LED" nga Dario Abatianni Comment[sr]=„Лампице“ Дарија Абатијанија Comment[sr@ijekavian]=„Лампице“ Дарија Абатијанија Comment[sr@ijekavianlatin]=„Lampice“ Darija Abatijanija Comment[sr@latin]=„Lampice“ Darija Abatijanija Comment[sv]="Lampor" av Dario Abatianni Comment[tr]=Dario Abatianni tarafından "LED" Comment[uk]=«LED», автор — Dario Abatianni Comment[x-test]=xx"LED" by Dario Abatiannixx Comment[zh_CN]=“LED”由 Dario Abatianni 创作 Comment[zh_TW]=「LED」,由 Dario Abatianni 提供 diff --git a/data/images/nickicons/default/index.desktop b/data/images/nickicons/default/index.desktop index 6a1f2659..9209a073 100644 --- a/data/images/nickicons/default/index.desktop +++ b/data/images/nickicons/default/index.desktop @@ -1,88 +1,90 @@ [Desktop Entry] Type=Theme Name=Default Theme Name[ar]=السّمة الافتراضيّة Name[bg]=Стандартна тема Name[bs]=Podrazumijevana tema Name[ca]=Tema per omissió Name[ca@valencia]=Tema per omissió Name[cs]=Výchozí motiv Name[da]=Standardtema Name[de]=Standard-Design Name[el]=Προκαθορισμένο θέμα Name[en_GB]=Default Theme Name[es]=Tema predeterminado Name[et]=Vaiketeema Name[eu]=Gai lehenetsia Name[fi]=Oletusteema Name[fr]=Thème par défaut Name[ga]=Téama Réamhshocraithe Name[gl]=Tema predeterminado Name[he]=ערכת ברירת מחדל Name[hne]=डिफाल्ट प्रसंग Name[hu]=Alapértelmezett téma Name[ia]=Thema predefinite: +Name[is]=Sjálfgefið þema Name[it]=Tema predefinito Name[kk]=Әдетті нақышы Name[km]=ស្បែក​លំនាំដើម Name[ko]=기본 테마 Name[lt]=Numatytasis apipavidalinimas Name[nb]=Standardtema Name[nds]=Standardmuster Name[nl]=Standaardthema Name[nn]=Standardtema Name[pa]=ਡਿਫਾਲਟ ਥੀਮ Name[pl]=Wystrój domyślny Name[pt]=Tema Predefinido Name[pt_BR]=Tema padrão Name[ro]=Tematica implicită Name[ru]=Оформление по умолчанию Name[si]=පෙරනිමි තේමාව Name[sk]=Štandardná téma Name[sl]=Privzeta tema Name[sq]=Tema e Parazgjedhur Name[sr]=Подразумевана тема Name[sr@ijekavian]=Подразумијевана тема Name[sr@ijekavianlatin]=Podrazumijevana tema Name[sr@latin]=Podrazumevana tema Name[sv]=Standardtema Name[tr]=Öntanımlı Tema Name[ug]=كۆڭۈلدىكى ئۆرنەك Name[uk]=Типова тема Name[x-test]=xxDefault Themexx Name[zh_CN]=默认主题 Name[zh_TW]=預設主題 Comment="Breeze" by Uri Herrera Comment[ar]="نسيم" لِـ Uri Herrera Comment[ca]=«Brisa» per Uri Herrera Comment[ca@valencia]=«Brisa» per Uri Herrera Comment[cs]="Breeze" od Uri Herrera Comment[da]="Breeze" af Uri Herrera Comment[de]=„Breeze“ von Uri Herrera Comment[el]="Breeze" από τον Uri Herrera Comment[en_GB]="Breeze" by Uri Herrera Comment[es]=«Breeze» de Uri Herrera Comment[et]="Breeze" (autor Uri Herrera) Comment[fi]=”Breeze” (Uri Herrera) Comment[gl]=«Breeze» de Uri Herrera Comment[hu]=„Breeze”, készítette: Uri Herrera +Comment[is]="Breeze" eftir Uri Herrera Comment[it]=«Brezza», di Uri Herrera Comment[lt]=„Breeze“ autorius Uri Herrera Comment[nl]="Breeze" door Uri Herrera Comment[nn]=«Breeze» av Uri Herrera Comment[pl]="Bryza" autorstwa Uri Herrera Comment[pt]="Brisa" de Uri Herrera Comment[pt_BR]="Breeze" por Uri Herrera Comment[ru]=Тема «Breeze» от Uri Herrera Comment[sk]="Vánok" od Uri Herrera Comment[sl]=»Sapica« avtorja Urija Herrere Comment[sr]=„Поветарац“ Урија Ерере Comment[sr@ijekavian]=„Поветарац“ Урија Ерере Comment[sr@ijekavianlatin]=„Povetarac“ Urija Erere Comment[sr@latin]=„Povetarac“ Urija Erere Comment[sv]="Breeze" av Uri Herrera Comment[tr]=Uri Herrera tarafından "Breeze" Comment[uk]=«Breeze», автор — Uri Herrera Comment[x-test]=xx"Breeze" by Uri Herreraxx Comment[zh_CN]=“Breeze”由 Uri Herrera 创作 Comment[zh_TW]=「Breeze」,作者 Uri Herrera diff --git a/data/images/nickicons/oxygen/index.desktop b/data/images/nickicons/oxygen/index.desktop index 8cc15ae2..f113c731 100644 --- a/data/images/nickicons/oxygen/index.desktop +++ b/data/images/nickicons/oxygen/index.desktop @@ -1,82 +1,84 @@ [Desktop Entry] Type=Theme Name=Oxygen Theme Name[ar]=سمة أكسجين Name[ca]=Tema Oxygen Name[ca@valencia]=Tema Oxygen Name[cs]=Motiv Oxygen Name[da]=Oxygen-tema Name[de]=Oxygen-Design Name[el]=Θέμα Oxygen Name[en_GB]=Oxygen Theme Name[es]=Tema Oxygen Name[et]=Oxygeni teema Name[fi]=Oxygen-teema Name[gl]=Tema Oxygen Name[hu]=Oxygen téma +Name[is]=Oxygen þema Name[it]=Tema Oxygen Name[lt]=Oxygen apipavidalinimas Name[nl]=Oxygen-thema Name[nn]=Oxygen-tema Name[pl]=Wystój Tlenowy Name[pt]=Tema Oxygen Name[pt_BR]=Tema do Oxygen Name[ru]=Тема «Oxygen» Name[sk]=Téma Oxygen Name[sl]=Tema Kisik Name[sr]=Тема Кисеоника Name[sr@ijekavian]=Тема Кисеоника Name[sr@ijekavianlatin]=Tema Kiseonika Name[sr@latin]=Tema Kiseonika Name[sv]=Oxygen-tema Name[tr]=Oxygen Teması Name[uk]=Тема «Oxygen» Name[x-test]=xxOxygen Themexx Name[zh_CN]=Oxygen 主题 Name[zh_TW]=Oxygen 外觀主題 Comment="Oxygen" by Nuno Pinheiro Comment[ar]="أكسجين" لِـ Nuno Pinheiro Comment[bg]="Oxygen" от Nuno Pinheiro Comment[bs]=„Kiseonik“ Nuna Pinjeira Comment[ca]=«Oxygen» per Nuno Pinheiro Comment[ca@valencia]=«Oxygen» per Nuno Pinheiro Comment[cs]="Oxygen" od Nuno Pinheiro Comment[da]="Oxygen" af Nuno Pinheiro Comment[de]=„Oxygen“ von Nuno Pinheiro Comment[el]="Oxygen" από Nuno Pinheiro Comment[en_GB]="Oxygen" by Nuno Pinheiro Comment[es]=«Oxygen» de Nuno Pinheiro Comment[et]="Oxygen" (autor Nuno Pinheiro) Comment[eu]="Oxygen", Nuno Pinheiro Comment[fi]=”Oxygen” by Nuno Pinheiro Comment[fr]=« Oxygen » par Nuno Pinheiro Comment[gl]=«Oxygen» de Nuno Pinheiro Comment[he]=ערכת Oxygen של Nuno Pinheiro Comment[hu]="Oxigén" - Nuno Pinheiro +Comment[is]="Oxygen" eftir Nuno Pinheiro Comment[it]=«Oxygen» di Nuno Pinheiro Comment[kk]=Nuno Pinheiro келтірген "Oxygen" Comment[km]="អុកស៊ីសែន​" ដោយ Nuno Pinheiro Comment[ko]=Nuno Pinheiro의 "Oxygen" Comment[lt]="Oxygen" nuo Nuno Pinheiro Comment[nb]=«Oxygen» av Nuno Pinheiro Comment[nds]="Oxygen" vun Nuno Pinheiro Comment[nl]="Oxygen" door Nuno Pinheiro Comment[nn]=«Oxygen» av Nuno Pinheiro Comment[pl]="Tlen" autorstwa Nuno Pinheiro Comment[pt]="Oxygen" de Nuno Pinheiro Comment[pt_BR]="Oxygen" por Nuno Pinheiro Comment[ru]=Сделал Nuno Pinheiro Comment[si]=Nuno Pinheiro විසින් "ඔක්සිජන්" Comment[sk]="Oxygen" od Nuno Pinheiro Comment[sl]=Nuno Pinheiro: "Kisik" Comment[sq]="Oxygen" nga Nuno Pinheiro Comment[sr]=„Кисеоник“ Нуна Пињеира Comment[sr@ijekavian]=„Кисеоник“ Нуна Пињеира Comment[sr@ijekavianlatin]=„Kiseonik“ Nuna Pinjeira Comment[sr@latin]=„Kiseonik“ Nuna Pinjeira Comment[sv]="Oxygen" av Nuno Pinheiro Comment[tr]=Nuno Pinheiro tarafından oluşturulan "Oxygen" Comment[uk]=«Oxygen», автор — Nuno Pinheiro Comment[x-test]=xx"Oxygen" by Nuno Pinheiroxx Comment[zh_CN]="Oxygen" 由 Nuno Pinheiro 创作 Comment[zh_TW]=「Oxygen」,作者 Nuno Pinheiro diff --git a/data/images/nickicons/simplistic/index.desktop b/data/images/nickicons/simplistic/index.desktop index f50659c7..defc2d01 100644 --- a/data/images/nickicons/simplistic/index.desktop +++ b/data/images/nickicons/simplistic/index.desktop @@ -1,99 +1,101 @@ [Desktop Entry] Type=Theme Name=KDE 3 Default Theme Name[ar]=سمة كدي 3 الافتراضيّة Name[bg]=Стандартна тема за KDE 3 Name[bs]=Podrazumijevana tema KDE‑a 3 Name[ca]=Tema per omissió del KDE 3 Name[ca@valencia]=Tema per omissió del KDE 3 Name[cs]=Výchozí motiv KDE 3 Name[da]=KDE 3 standardtema Name[de]=Standard-Design aus KDE 3 Name[el]=Προκαθορισμένο θέμα KDE 3 Name[en_GB]=KDE 3 Default Theme Name[es]=Tema predeterminado de KDE 3 Name[et]=KDE 3 vaiketeema Name[eu]=KDE 3ren gai lehenetsia Name[fi]=KDE 3-oletusteema Name[fr]=Thème par défaut de KDE 3 Name[ga]=Téama Réamhshocraithe KDE 3 Name[gl]=Tema predeterminado de KDE3 Name[he]=ערכת ברירת מחדל של KDE3 Name[hu]=KDE 3 alapértelmezett téma +Name[is]=Sjálfgefið KDE3 þema Name[it]=Tema predefinito di KDE 3 Name[kk]=KDE3 әдетті нақышы Name[km]=ស្បែក​លំនាំដើម​របស់ KDE 3 Name[ko]=KDE 3 기본 테마 Name[lt]=KDE 3 numatytasis apipavidalinimas Name[nb]=KDE 3 standardtema Name[nds]=Standardmuster för KDE 3 Name[nl]=KDE 3 standaardthema Name[nn]=KDE 3-standardtema Name[pa]=KDE ੩ ਡਿਫਾਲਟ ਥੀਮ Name[pl]=Domyślny wystrój KDE 3 Name[pt]=Tema Predefinido do KDE 3 Name[pt_BR]=Tema padrão KDE 3 Name[ru]=Оформление по умолчанию в KDE3 Name[si]=KDE 3 පෙරනිමි තේමාව Name[sk]=Predvolená téma KDE 3 Name[sl]=Privzeta tema za KDE 3 Name[sq]=Tema e Parazgjedhur e KDE 3 Name[sr]=Подразумевана тема КДЕ‑а 3 Name[sr@ijekavian]=Подразумијевана тема КДЕ‑а 3 Name[sr@ijekavianlatin]=Podrazumijevana tema KDE‑a 3 Name[sr@latin]=Podrazumevana tema KDE‑a 3 Name[sv]=KDE 3 standardtema Name[tr]=KDE3 Öntanımlı Teması Name[uk]=Типова тема KDE 3 Name[x-test]=xxKDE 3 Default Themexx Name[zh_CN]=KDE 3 默认主题 Name[zh_TW]=KDE 3 預設主題 Comment="Simplistic" by Shintaro Matsuoka Comment[ar]="بساطة" لِـ Shintaro Matsuoka Comment[bg]="Опростена" от Shintaro Matsuoka Comment[bs]=„Jednostavno“ Šintara Macuoke Comment[ca]=«Simplista» per Shintaro Matsuoka Comment[ca@valencia]=«Simplista» per Shintaro Matsuoka Comment[cs]="Jednoduchý motiv" od Shintara Matsuoky Comment[da]="Simplificeret" af Shintaro Matsuoka Comment[de]=„Standard“ von Shintaro Matsuoka Comment[el]="Απλοϊκό" από Shintaro Matsuoka Comment[en_GB]=Simplistic by Shintaro Matsuoka Comment[es]=«Simplistic» de Shintaro Matsuoka Comment[et]="Simplistic" (autor Shintaro Matsuoka) Comment[eu]="Sinplista", Shintaro Matsuoka Comment[fi]=”Yksinkertainen” (Shintaro Matsuoka) Comment[fr]=« Simpliste » par Shintaro Matsuoka Comment[ga]="Simplistic" le Shintaro Matsuoka Comment[gl]=«Simplistic» por Shintaro Matsuoka Comment[he]="מראה פשוט" של Shintaro Matsuoka Comment[hne]="सिंप्लिस्टिक" शिनतारो मात्सुओका द्वारा Comment[hu]="Egyszerű" - Shintaro Matsuoka +Comment[is]="Simplistic" eftir Shintaro Matsuoka Comment[it]=«Simplistic» di Shintaro Matsuoka Comment[kk]=Shintaro Matsuoka келтірген "Қарапайымдық" Comment[km]="Simplistic" ដោយ Shintaro Matsuoka Comment[ko]=Shintaro Matsuoka의 "간단함" Comment[lt]=„Supaprastinta“, sukurta Shintaro Matsuoka Comment[nb]=«Simplistic» av Shintaro Matsuoka Comment[nds]="Eenfach" vun Shintaro Matsuoka Comment[nl]="Simplistic", door Shintaro Matsuoka Comment[nn]=«Simplistic» av Shintaro Matsuoka Comment[pl]="Uproszczony" autorstwa Shintaro Matsuoka Comment[pt]="Simplistic" por Shintaro Matsuoka Comment[pt_BR]="Simplista" de Shintaro Matsuoka Comment[ro]=„Simplist” de Shintaro Matsuoka Comment[ru]=Сделал Shintaro Matsuoka Comment[si]=Shintaro Matsuoka විසින් "Simplistic" Comment[sk]="Simplistic" od Shintaro Matsuoka Comment[sl]=Shintaro Matsuoka: "Enostavno" Comment[sq]="Simplistic" nga Shintaro Matsuoka Comment[sr]=„Једноставно“ Шинтара Мацуоке Comment[sr@ijekavian]=„Једноставно“ Шинтара Мацуоке Comment[sr@ijekavianlatin]=„Jednostavno“ Šintara Macuoke Comment[sr@latin]=„Jednostavno“ Šintara Macuoke Comment[sv]="Förenklat" av Shintaro Matsuoka Comment[tr]=Shintaro Matsuoka tarafından "Basitlik" Comment[uk]=«Спрощена», автор — Shintaro Matsuoka Comment[x-test]=xx"Simplistic" by Shintaro Matsuokaxx Comment[zh_CN]="极简主题" 由 Shintaro Matsuoka 创作 Comment[zh_TW]=「單純」,由 Shintaro Matsuoka 提供 diff --git a/data/images/nickicons/smiling/index.desktop b/data/images/nickicons/smiling/index.desktop index aa3b8de6..334f18e7 100644 --- a/data/images/nickicons/smiling/index.desktop +++ b/data/images/nickicons/smiling/index.desktop @@ -1,101 +1,103 @@ [Desktop Entry] Type=Theme Name=Smiling Theme Name[ar]=سمة الضّحك Name[bg]=Тема "Усмивка" Name[bs]=Nasmijana tema Name[ca]=Tema Smiling Name[ca@valencia]=Tema Smiling Name[cs]=Smajlíkový motiv Name[da]=Smilende tema Name[de]=Smiley-Design Name[el]=Θέμα χαμόγελου Name[en_GB]=Smiling Theme Name[es]=Tema «Smiling» Name[et]=Naerusuuteema Name[eu]=Irribarreak Name[fi]=Hymiöteema Name[fr]=Thème « Smiley » Name[ga]=Téama "Smiling" Name[gl]=Tema de sorrisos Name[he]=ערכה מחייכת Name[hne]=मुस्कान प्रसंग Name[hu]=Mosolygós téma +Name[is]=Brosþema Name[it]=Tema sorridente Name[kk]=Күлегіш нақышы Name[km]=ស្បែក​ញញឹម Name[ko]=웃음 테마 Name[lt]=Besišypsantis apipavidalinimas Name[nb]=Smilende tema Name[nds]=Smuustermuster Name[nl]=Smiling-thema Name[nn]=Smiletema Name[pa]=ਖੁਸ਼ ਥੀਮ Name[pl]=Uśmiechający się wystrój Name[pt]=Tema "Smiling" Name[pt_BR]=Tema sorridente Name[ro]=Tematică zâmbitoare Name[ru]=Смайлики Name[si]=සිනාසීම තේමාව Name[sk]=Smiling téma Name[sl]="Smeh" Name[sq]=Smiling Theme Name[sr]=Насмејана тема Name[sr@ijekavian]=Насмијана тема Name[sr@ijekavianlatin]=Nasmijana tema Name[sr@latin]=Nasmejana tema Name[sv]=Leende tema Name[tr]=Gülümseyen Tema Name[uk]=Тема «Посмішки» Name[x-test]=xxSmiling Themexx Name[zh_CN]=笑脸主题 Name[zh_TW]=微笑 Comment="Smiling" stolen from Kopete by John Tapsell Comment[ar]=سُرِقت "ضحك" من كوبيت لـ John Tapsell Comment[bg]=Тема "Усмивка" е откраднато от Kopete от John Tapsell Comment[bs]=„Nasmejano“ ukrao iz Kopetea Džon Tapsel Comment[ca]=«Smiling» robat del Kopete per John Tapsell Comment[ca@valencia]=«Smiling» robat del Kopete per John Tapsell Comment[cs]="Smajlíkový motiv" od Johna Tapsella převzato z Kopete Comment[da]="Smilende" stjålet fra Kopete af John Tapsell Comment[de]=„Smiley“ geklaut bei Kopete von John Tapsell Comment[el]="Χαμόγελο" κλεμμένο από το Kopete από John Tapsell Comment[en_GB]="Smiling" stolen from Kopete by John Tapsell Comment[es]=«Smiling» tomado de Kopete por John Tapsell Comment[et]="Smiling" (Kopetest hiivas John Tapsell) Comment[eu]="Irribarreak" John Tapsell-en Kopete-tik hartua Comment[fi]=”Hymiöteema” Kopetesta (John Tapsell) Comment[fr]=« Smiley » copié de Kopete par John Tapsell Comment[ga]="Smiling", goidte ó Kopete ag John Tapsell Comment[gl]=«Smiling» roubado de Kopete por John Tapsell Comment[he]="ערכה מחייכת" נגנבה מ־Kopete על ידי John Tapsell Comment[hne]="मुस्कान" जान टापसेल द्वारा केआप्टी से लाया गया Comment[hu]="Mosolygós" - a Kopete-ből John Tapsell csente +Comment[is]="Smiling" stolið frá Kopete eftir John Tapsell Comment[it]=«Sorridente» (rubato da Kopete) di John Tapsell Comment[kk]="Күлегішті" Kopete-тен John Tapsell ұрлап алған Comment[km]="ញញឹម" យក​ពី Kopete ដោយ John Tapsell Comment[ko]=John Tapsell의 Kopete용 "웃음" 테마 Comment[lt]=„Besišypsanti tema“, John Tapsell pavogta iš Kopete programos Comment[nb]=«Smilende» stjålet fra Kopete av John Tapsell Comment[nds]="Smuustern", muust bi Kopete vun John Tapsell Comment[nl]="Smiling", overgenomen van Kopete, door John Tapsell Comment[nn]=«Smiling» stole frå Kopete av John Tapsell Comment[pl]="Uśmiechający" skradziony z Kopete przez John Tapsell Comment[pt]="Smiling" retirado do Kopete por John Tapsell Comment[pt_BR]="Sorridente" obtido do Kopete por John Tapsell Comment[ro]=„Zâmbitoare” furată de la Kopete de John Tapsell Comment[ru]=Украл у Kopete John Tapsell Comment[si]=Kopete ගෙන් John Tapsell විසින් "සිනාසීම" ‍සොරාගන්නා ලදි Comment[sk]="Smiling" z Kopete ukradol John Tapsell Comment[sl]=John Tapsell: "Smeh", tema ukradena iz programa Kopete Comment[sq]="Smiling" vjedhur nga Kopete nga John Tapsell Comment[sr]=„Насмејано“ украо из Копетеа Џон Тапсел Comment[sr@ijekavian]=„Насмијано“ украо из Копетеа Џон Тапсел Comment[sr@ijekavianlatin]=„Nasmijano“ ukrao iz Kopetea Džon Tapsel Comment[sr@latin]=„Nasmejano“ ukrao iz Kopetea Džon Tapsel Comment[sv]="Leende" stulen från Kopete av John Tapsell Comment[tr]=John Tapsell tarafından Kopete uygulamasının "Gülümseyen" yüzleri Comment[uk]=«Посмішки» взято з Kopete, автор — John Tapsell Comment[x-test]=xx"Smiling" stolen from Kopete by John Tapsellxx Comment[zh_CN]="笑脸主题" 由 John Tapsell 从Kopete 移花接木而来 Comment[zh_TW]=「微笑」,從 Kopete 「偷」來的,由 John Tapsell 提供 diff --git a/data/images/nickicons/square/index.desktop b/data/images/nickicons/square/index.desktop index 114dab50..26d10054 100644 --- a/data/images/nickicons/square/index.desktop +++ b/data/images/nickicons/square/index.desktop @@ -1,99 +1,101 @@ [Desktop Entry] Type=Theme Name=Square Theme Name[ar]=السّمة المربّعة Name[bg]=Тема "Квадрат" Name[bs]=Kvadratna tema Name[ca]=Tema Square Name[ca@valencia]=Tema Square Name[cs]=Square motiv Name[da]=Firkantet tema Name[de]=Rechteck-Design Name[el]=Τετράγωνο θέμα Name[en_GB]=Square Theme Name[es]=Tema «Square» Name[et]=Kandiline teema Name[eu]=Karratuak Name[fi]=Neliöteema Name[fr]=Thème « Carrés » Name[ga]=Téama "Square" Name[gl]=Tema de cadros Name[he]=ערכה מרובעת Name[hu]=Négyzet téma +Name[is]=Ferningsþema Name[it]=Tema quadrato Name[kk]=Шаршы нақышы Name[km]=ស្បែក​ការេ Name[ko]=사각형 테마 Name[lt]=Kvadratinis apipavidalinimas Name[nb]=Kvadrat-tema Name[nds]=Quadraat-Muster Name[nl]=Vierkant thema Name[nn]=Kvadrattema Name[pa]=ਵਰਗ ਥੀਮ Name[pl]=Wystrój kwadratowy Name[pt]=Tema Quadrado Name[pt_BR]=Tema quadrado Name[ro]=Tematică pătrată Name[ru]=Квадратики Name[si]=චතුරස්‍ර තේමාව Name[sk]=Square téma Name[sl]="Kvadrat" Name[sq]=Square Theme Name[sr]=Квадратна тема Name[sr@ijekavian]=Квадратна тема Name[sr@ijekavianlatin]=Kvadratna tema Name[sr@latin]=Kvadratna tema Name[sv]=Kvadratiskt tema Name[tr]=Kare Teması Name[uk]=Тема «Квадрат» Name[x-test]=xxSquare Themexx Name[zh_CN]=方块主题 Name[zh_TW]=方塊 Comment="SQUARE" by Kenichiro Takahashi Comment[ar]="مربّعات" لِـ Kenichiro Takahashi Comment[bg]=Тема "Квадрат" от Kenichiro Takahashi Comment[bs]=„Kvadrat“ Keničira Takahašija Comment[ca]=«SQUARE» per Kenichiro Takahashi Comment[ca@valencia]=«SQUARE» per Kenichiro Takahashi Comment[cs]="SQUARE" od Kenichiro Takahashi Comment[da]="Firkantet" af Kenichiro Takahashi Comment[de]=„Rechteck“ von Kenichiro Takahashi Comment[el]="Τετράγωνο" από Kenichiro Takahashi Comment[en_GB]="SQUARE" by Kenichiro Takahashi Comment[es]=«SQUARE» de Kenichiro Takahashi Comment[et]="SQUARE" (autor Kenichiro Takahashi) Comment[eu]="KARRATUAK", Kenichiro Takahashi Comment[fi]=”NELIÖT” (Kenichiro Takahashi) Comment[fr]=« Carrés » par Kenichiro Takahashi Comment[ga]="SQUARE" le Kenichiro Takahashi Comment[gl]=«SQUARE» por Kenichiro Takahashi Comment[he]="ערכה מרובעת" של Kenichiro Takahashi Comment[hu]="Négyzet" - Kenichiro Takahashi +Comment[is]="SQUARE" eftir Kenichiro Takahashi Comment[it]=«Quadrato» di Kenichiro Takahashi Comment[kk]=Kenichiro Takahashi келтірген "ШАРШЫ" Comment[km]="ការេ" ដោយ Kenichiro Takahashi Comment[ko]=Kenichiro Takahashi의 "SQUARE" Comment[lt]=„Kvadratinė tema“, sukurta Kenichiro Takahashi Comment[nb]=«SQUARE» av Kenichiro Takahashi Comment[nds]="Quadraat" vun Kenichiro Takahashi Comment[nl]="SQUARE" door Kenichiro Takahashi Comment[nn]=«SQUARE» av Kenichiro Takahashi Comment[pl]="KWADRAT" autorstwa Kenichiro Takahashi Comment[pt]="QUADRADO" por Kenichiro Takahashi Comment[pt_BR]="QUADRADO" por Kenichiro Takahashi Comment[ro]=„PĂTRAT” de Kenichiro Takahashi Comment[ru]=Сделал Kenichiro Takahashi Comment[si]=Kenichiro Takahashi විසින් "චතුරස්‍ර" Comment[sk]="SQUARE" od Kenichiro Takahashi Comment[sl]=Kenichiro Takahashi: "Kvadrat" Comment[sq]="SQUARE" nga Kenichiro Takahashi Comment[sr]=„Квадрат“ Кеничира Такахашија Comment[sr@ijekavian]=„Квадрат“ Кеничира Такахашија Comment[sr@ijekavianlatin]=„Kvadrat“ Keničira Takahašija Comment[sr@latin]=„Kvadrat“ Keničira Takahašija Comment[sv]="KVADRATISK" av Kenichiro Takahashi Comment[tr]=Kenichiro Takahashi tarafından "KARE" Comment[uk]=«КВАДРАТ» автор — Kenichiro Takahashi Comment[x-test]=xx"SQUARE" by Kenichiro Takahashixx Comment[zh_CN]="方块主题" 由 Kenichiro Takahashi 创作 Comment[zh_TW]=「方塊」,由 Kenichiro Takahashi 提供 diff --git a/data/konversation.notifyrc b/data/konversation.notifyrc index acf476c4..d9dc4222 100644 --- a/data/konversation.notifyrc +++ b/data/konversation.notifyrc @@ -1,1772 +1,1794 @@ [Global] IconName=konversation Comment=Konversation Comment[ar]=محادثك Comment[bg]=Konversation Comment[bs]=Konverzacija Comment[ca]=Konversation Comment[ca@valencia]=Konversation Comment[cs]=Konversation Comment[da]=Konversation Comment[de]=Konversation Comment[el]=Konversation Comment[en_GB]=Konversation Comment[eo]=Konversation Comment[es]=Konversation Comment[et]=Konversation Comment[eu]=Konversation Comment[fi]=Konversation Comment[fr]=Konversation Comment[ga]=Konversation Comment[gl]=Konversation Comment[he]=Konversation Comment[hi]=कनवर्सेसन Comment[hne]=कनवर्सेसन Comment[hr]=Konversation Comment[hu]=Konversation +Comment[is]=Konversation Comment[it]=Konversation Comment[kk]=Konversation Comment[km]=Konversation Comment[ko]=Konversation Comment[lt]=Konversation Comment[mr]=कंव्हर्झेशन Comment[nb]=Konversation Comment[nds]=Konversation Comment[nl]=Konversation Comment[nn]=Konversation Comment[pa]=ਕੰਨਵਰਸ਼ੇਸ਼ਨ Comment[pl]=Konversation Comment[pt]=Konversation Comment[pt_BR]=Konversation Comment[ro]=Konversație Comment[ru]=Konversation Comment[si]=සාකච්ඡාව Comment[sk]=Konversation Comment[sl]=Konversation Comment[sq]=Konversation Comment[sr]=Конверзација Comment[sr@ijekavian]=Конверзација Comment[sr@ijekavianlatin]=Konverzacija Comment[sr@latin]=Konverzacija Comment[sv]=Konversation Comment[tr]=Konversation Comment[ug]=Konversation Comment[uk]=Konversation Comment[x-test]=xxKonversationxx Comment[zh_CN]=Konversation Comment[zh_TW]=Konversation [Event/message] Name=New message Name[ar]=رسالة جديدة Name[be]=Новае паведамленне Name[bg]=Ново съобщение Name[bs]=Nova poruka Name[ca]=Missatge nou Name[ca@valencia]=Missatge nou Name[cs]=Nová zpráva Name[da]=Ny besked Name[de]=Neue Nachricht Name[el]=Νέο μήνυμα Name[en_GB]=New message Name[es]=Nuevo mensaje Name[et]=Uus sõnum Name[eu]=Mezu berria Name[fi]=Uusi viesti Name[fr]=Nouveau message Name[ga]=Teachtaireacht nua Name[gl]=Nova mensaxe Name[he]=הודעה חדשה Name[hne]=नवा संदेस Name[hu]=Új üzenet Name[ia]=Nove message +Name[is]=Ný skilaboð Name[it]=Nuovo messaggio Name[kk]=Жаңа хабарлама Name[km]=សារ​ថ្មី Name[ko]=새 메시지 Name[lt]=Nauja žinutė Name[mr]=नवीन संदेश Name[nb]=Ny melding Name[nds]=Nieg Naricht Name[nl]=Nieuw bericht Name[nn]=Ny melding Name[oc]=Messatge novèl Name[pa]=ਨਵਾਂ ਸੁਨੇਹਾ Name[pl]=Nowa wiadomość Name[pt]=Nova mensagem Name[pt_BR]=Nova mensagem Name[ro]=Mesaj nou Name[ru]=Новое сообщение Name[si]=නව පණිවිඩය Name[sk]=Nová správa Name[sl]=Novo sporočilo Name[sq]=Mesazh i ri Name[sr]=Нова порука Name[sr@ijekavian]=Нова порука Name[sr@ijekavianlatin]=Nova poruka Name[sr@latin]=Nova poruka Name[sv]=Nytt meddelande Name[tr]=Yeni ileti Name[uk]=Нове повідомлення Name[x-test]=xxNew messagexx Name[zh_CN]=新消息 Name[zh_TW]=新訊息 Comment=New message arrived in a channel Comment[ar]=وصلت رسالة جديدة إلى قناة Comment[bg]=Пристигна ново съобщение в канала Comment[bs]=Nova poruka je stigla na kanalu Comment[ca]=Ha arribat un missatge nou a un canal Comment[ca@valencia]=Ha arribat un missatge nou a un canal Comment[cs]=Na kanálu se objevila nová zpráva Comment[da]=Ny besked ankom i en kanal Comment[de]=Neue Nachricht in einem Kanal Comment[el]=Νέο μήνυμα έφτασε στο κανάλι Comment[en_GB]=New message arrived in a channel Comment[es]=Ha llegado un nuevo mensaje a un canal Comment[et]=Kanalile saabus uus sõnum Comment[eu]=Mezu berri bat iritsi da kanal batera Comment[fi]=Kanavalle saapui uusi viesti Comment[fr]=Un nouveau message est arrivé sur le canal Comment[ga]=Tháinig teachtaireacht nua i gcainéal Comment[gl]=Recibiuse unha nova mensaxe nunha canle Comment[he]=הודעה חדשה הגיעה לחדר Comment[hne]=चैनल मं नवा संदेस आइस Comment[hu]=Új üzenet érkezett egy csatornára +Comment[is]=Ný skilaboð bárust á rás Comment[it]=Nuovo messaggio arrivato in un canale Comment[kk]=Бір арнаға хабарлама келді Comment[km]=សារ​ថ្មី​មកដល់​ក្នុង​ប៉ុស្ដិ៍ Comment[ko]=채널에 새 메시지가 도착함 Comment[lt]=Kanale gauta nauja žinutė Comment[nb]=Ny melding ankom i en kanal Comment[nds]=Nieg Naricht op en Kanaal ankamen Comment[nl]=Nieuw bericht gearriveerd in een kanaal Comment[nn]=Ny melding motteken i ein kanal Comment[pa]=ਇੱਕ ਚੈਨਲ ਵਿੱਚ ਨਵਾਂ ਸੁਨੇਹਾ ਆਇਆ ਹੈ Comment[pl]=Na kanale pojawiła się nowa wiadomość Comment[pt]=Nova mensagem chegou ao canal Comment[pt_BR]=Uma nova mensagem chegou em um canal Comment[ro]=A sosit un mesaj nou într-un canal Comment[ru]=Получено новое сообщение на канале Comment[si]=නාලිකාවෙන් නව පණිවිඩයක් පැමිණ ඇත Comment[sk]=Do kanála prišla nová správa Comment[sl]=Na kanal je prispelo novo sporočilo Comment[sq]=Një mesazh i ri mbërriti në një kanal Comment[sr]=Нова порука је стигла на каналу Comment[sr@ijekavian]=Нова порука је стигла на каналу Comment[sr@ijekavianlatin]=Nova poruka je stigla na kanalu Comment[sr@latin]=Nova poruka je stigla na kanalu Comment[sv]=Nytt meddelande anlände i en kanal Comment[tr]=Odaya yeni ileti geldi Comment[uk]=На каналі з’явилося нове повідомлення Comment[x-test]=xxNew message arrived in a channelxx Comment[zh_CN]=频道里有新消息 Comment[zh_TW]=在某頻道中有新訊息 Action=None [Event/nick] Name=Nick written Name[ar]=كُتِب اسمك المستعار Name[bg]=Написан псевдоним Name[bs]=Nadimak pomenut Name[ca]=Escriptura de sobrenom Name[ca@valencia]=Escriptura de sobrenom Name[cs]=Zapsána přezdívka Name[da]=Nick blev skrevet Name[de]=Spitzname erwähnt Name[el]=Το ψευδώνυμο γράφτηκε Name[en_GB]=Nickname written Name[es]=Apodo escrito Name[et]=Hüüdnimi kirjutatud Name[eu]=Goitizen idatzia Name[fi]=Nimimerkki kirjoitettiin Name[fr]=Pseudo écrit Name[ga]=Scríobhadh do leasainm Name[gl]=Escribiuse o seu alcume Name[he]=הכינוי נכתב Name[hne]=निक रिटन Name[hu]=Becenév kiírva +Name[is]=Gælunafn skrifað Name[it]=Nick scritto Name[kk]=Бүркеншік атыңыз жазылды Name[km]=សមត្ថិនាម​ដែល​បាន​សរសេរ Name[ko]=별명 언급됨 Name[lt]=Paminėtas slapyvardis Name[nb]=Kallenavn skrevet Name[nds]=Ökelnaam bruukt Name[nl]=Bijnaam geschreven Name[nn]=Kallenamn skrive Name[pa]=ਨਾਂ ਲਿਖਿਆ Name[pl]=Wpisany pseudonim Name[pt]=Alcunha escrita Name[pt_BR]=Apelido escrito Name[ro]=Poreclă scrisă Name[ru]=Упоминание вашего ника Name[si]=සුරතල් නම ලියන ලදි Name[sk]=Prezývka napísaná Name[sl]=Vzdevek omenjen Name[sq]=Pseudonimi i shkruajt Name[sr]=Надимак поменут Name[sr@ijekavian]=Надимак поменут Name[sr@ijekavianlatin]=Nadimak pomenut Name[sr@latin]=Nadimak pomenut Name[sv]=Något skrivet till smeknamnet Name[tr]=Takma ad yazıldı Name[uk]=Написано псевдонім Name[x-test]=xxNick writtenxx Name[zh_CN]=使用的昵称 Name[zh_TW]=暱稱被提及 Comment=Someone wrote your nick in a message Comment[ar]=كتب شخص ما اسمك المستعار في رسالة Comment[bg]=Псевдонимът ви бе написан в съобщение Comment[bs]=Neko je napisao vas nadimak u poruci Comment[ca]=Algú ha escrit el vostre sobrenom en un missatge Comment[ca@valencia]=Algú ha escrit el vostre sobrenom en un missatge Comment[cs]=Někdo ve zprávě napsal vaší přezdívku Comment[da]=Nogen skrev dit nick i en besked Comment[de]=Jemand hat Ihren Spitznamen in einer Nachricht erwähnt Comment[el]=Κάποιος έγραψε το ψευδώνυμό σας σε ένα μήνυμα Comment[en_GB]=Someone wrote your nickname in a message Comment[es]=Alguien ha escrito su apodo en un mensaje Comment[et]=Keegi kasutas sõnumis sinu hüüdnime Comment[eu]=Norbaitek zure goitizena idatzi du mezu batean Comment[fi]=Joku kirjoitti nimimerkkisi viestiin Comment[fr]=Quelqu'un a écrit votre pseudo dans un message Comment[ga]=Scríobh duine éigin do leasainm i dteachtaireacht Comment[gl]=Alguén escribiu o seu alcume nunha mensaxe Comment[he]=מישהו כתב את הכינוי שלך בהודעה Comment[hu]=Valaki leírta az Ön becenevét az egyik csatornán +Comment[is]=Einhver skrifaði gælunafnið þitt í skilaboðum Comment[it]=Qualcuno ha scritto il tuo nick in un messaggio Comment[kk]=Біреу хабарламасында бүркеншік атыңызды жазды Comment[km]=មាន​នរណា​ម្នាក់​សរសេរ​សមត្ថិនាម​របស់​អ្នក​នៅ​ក្នុង​សារ Comment[ko]=메시지에서 별명이 언급됨 Comment[lt]=Kažkas paminėjo jūsų slapyvardį žinutėje Comment[nb]=Noen skrev ditt kallenavn i en melding Comment[nds]=Een hett Dien Ökelnaam binnen en Naricht bruukt Comment[nl]=Iemand schreef uw bijnaam in een bericht Comment[nn]=Nokon skreiv kallenamnet ditt i ei melding Comment[pa]=ਕਿਸੇ ਨੇ ਤੁਹਾਡਾ ਨਾਂ ਇੱਕ ਸੁਨੇਹੇ ਵਿੱਚ ਲਿਖਿਆ ਹੈ Comment[pl]=Ktoś użył twojego pseudonimu w wiadomości Comment[pt]=Alguém escrever a sua alcunha numa mensagem Comment[pt_BR]=Alguém escreveu o seu apelido em uma mensagem Comment[ro]=Cineva v-a scris porecla într-un mesaj Comment[ru]=Кто-то написал ваше имя в своём сообщении Comment[si]=යමෙක් ඔබගේ සුරතල් නම පණිවිඩයක ලියා ඇත Comment[sk]=Niekto napísal vašej prezývke správu Comment[sl]=Nekdo je v sporočilu omenil vaš vzdevek Comment[sq]=Dikush shkruajti pseudonimin tuaj në një mesazh Comment[sr]=Неко је поменуо ваш надимак у поруци Comment[sr@ijekavian]=Неко је поменуо ваш надимак у поруци Comment[sr@ijekavianlatin]=Neko je pomenuo vaš nadimak u poruci Comment[sr@latin]=Neko je pomenuo vaš nadimak u poruci Comment[sv]=Någon skrev ett meddelande till ditt smeknamn Comment[tr]=Birisi iletisinde sizin takma adınızı yazdı Comment[uk]=Хтось написав ваш псевдонім у повідомленні Comment[x-test]=xxSomeone wrote your nick in a messagexx Comment[zh_CN]=有人在消息里提到了您的昵称 Comment[zh_TW]=有人在訊息中提到您的暱稱 Action=None [Event/highlight] Name=Highlight triggered Name[ar]=حُفِّز إبراز Name[bg]=Задействане осветяване Name[bs]=Okinuto isticanje Name[ca]=Activació de ressaltat Name[ca@valencia]=Activació de ressaltat Name[cs]=Aktivováno zvýraznění Name[da]=Highlight udløst Name[de]=Hervorhebung ausgelöst Name[el]=Η έμφαση πυροδοτήθηκε Name[en_GB]=Highlight triggered Name[es]=Realce desencadenado Name[et]=Midagi tõsteti esile Name[eu]=Nabarmentzea abiarazita Name[fi]=Korostus laukaistu Name[fr]=Surlignement activé Name[gl]=Activouse o resaltado Name[hu]=Kiemelt szöveg Name[it]=Evidenziazione attivata Name[kk]=Бояп белгілеуі қосылған Name[km]=បានកេះ​អ្វី​ដែលបាន​បន្លិច Name[ko]=강조 트리거됨 Name[lt]=Paryškinimas įjungtas Name[nb]=Framheving utløst Name[nds]=Rutheven utlööst Name[nl]=Oplichten aangezet Name[nn]=Framheving utløyst Name[pl]=Wyzwolono podświetlenie Name[pt]=Foi despoletado o realce Name[pt_BR]=Realce acionado Name[ru]=Включено выделение Name[si]=ඉස්මතු කිරීම පූරනය කර ඇත Name[sk]=Spustené zvýraznenie Name[sl]=Sprožen poudarek Name[sq]=U kërkua përzgjedhja Name[sr]=Окинуто истицање Name[sr@ijekavian]=Окинуто истицање Name[sr@ijekavianlatin]=Okinuto isticanje Name[sr@latin]=Okinuto isticanje Name[sv]=Markering orsakad Name[tr]=Vurgulama yapıldı Name[uk]=Увімкнено підсвічування Name[x-test]=xxHighlight triggeredxx Name[zh_CN]=高亮被触发 Name[zh_TW]=觸發突顯 Comment=Someone triggered a highlight Comment[ar]=حفّز شخص ما إبراز Comment[bg]=Някой е задействал осветяване в текста Comment[bs]=Neko je okinuo isticanje Comment[ca]=Algú ha activat un ressaltat Comment[ca@valencia]=Algú ha activat un ressaltat Comment[cs]=Někdo aktivoval zvýraznění Comment[da]=Nogen udløste en fremhævning Comment[de]=Jemand hat eine Hervorhebung ausgelöst Comment[el]=Κάποιος πυροδότησε μια έμφαση Comment[en_GB]=Someone triggered a highlight Comment[es]=Alguien desencadenó un realce Comment[et]=Keegi kutsus esile millegi esiletõstmise Comment[eu]=Norbaitek nabarmentze bat abiarazi du Comment[fi]=Joku laukaisi korostuksen Comment[fr]=Une personne a déclenché un surlignement Comment[gl]=Alguén activou o resaltado Comment[hu]=Valaki kiemelt szöveget írt Comment[it]=Qualcuno ha attivato un'evidenziazione Comment[kk]=Біреу бояп белгілеуді қосты Comment[km]=មាន​អ្នកណាម្នាក់​បានកេះ​ការ​បន្លិច Comment[ko]=메시지에서 강조가 트리거됨 Comment[lt]=Kažkas įjungė paryškinimą Comment[nb]=Noen tløste en framheving Comment[nds]=Een hett en Rutheven utlööst Comment[nl]=Iemand heeft een oplichting aangezet Comment[nn]=Nokon utløyste ei framheving Comment[pl]=Ktoś wyzwolił podświetlenie Comment[pt]=Alguém despoletou um realce Comment[pt_BR]=Alguém acionou um realce Comment[ru]=Кто-то включил выделение Comment[si]=යමෙක් ඉස්මතු කිරීමක් පූරණය කර ඇත Comment[sk]=Niekto spustil zvýraznenie Comment[sl]=Nekdo je sprožil poudarek Comment[sq]=Dikush kërkoi një përzgjedhje Comment[sr]=Неко је окинуо истицање Comment[sr@ijekavian]=Неко је окинуо истицање Comment[sr@ijekavianlatin]=Neko je okinuo isticanje Comment[sr@latin]=Neko je okinuo isticanje Comment[sv]=Någon orsakade en markering Comment[tr]=Birisi bir vurgulama yaptı Comment[uk]=Хтось увімкнув підсвічування Comment[x-test]=xxSomeone triggered a highlightxx Comment[zh_CN]=有人触发了高亮 Comment[zh_TW]=某人觸發了突顯 Action=None [Event/queryMessage] Name=Private message Name[ar]=رسالة خاصّة Name[bg]=Лично съобщение Name[bs]=Privatna poruka Name[ca]=Missatge privat Name[ca@valencia]=Missatge privat Name[cs]=Soukromá zpráva Name[da]=Privat besked Name[de]=Private Nachricht Name[el]=Προσωπικό μήνυμα Name[en_GB]=Private message Name[es]=Mensaje privado Name[et]=Privaatsõnum Name[eu]=Mezu pribatua Name[fi]=Uusi yksityisviesti Name[fr]=Message privé Name[ga]=Teachtaireacht phríobháideach Name[gl]=Mensaxe privada Name[he]=הודעה חדשה Name[hne]=निजी संदेस Name[hu]=Privát üzenet +Name[is]=Einkaskilaboð Name[it]=Messaggio privato Name[kk]=Сырлы хабарлама Name[km]=សារ​ឯកជន Name[ko]=개인 메시지 Name[lt]=Asmeninė žinutė Name[nb]=Privat melding Name[nds]=Privaatnaricht Name[nl]=Privaat bericht Name[nn]=Privat melding Name[pa]=ਪ੍ਰਾਈਵੇਟ ਸੁਨੇਹਾ Name[pl]=Wiadomość prywatna Name[pt]=Mensagem privada Name[pt_BR]=Mensagem privada Name[ro]=Mesaj privat Name[ru]=Личное сообщение Name[si]=පුද්ගලික පණිවිඩ Name[sk]=Súkromná správa Name[sl]=Zasebno sporočilo Name[sq]=Mesazh privat Name[sr]=Лична порука Name[sr@ijekavian]=Лична порука Name[sr@ijekavianlatin]=Lična poruka Name[sr@latin]=Lična poruka Name[sv]=Privat meddelande Name[tr]=Özel ileti Name[uk]=Особисте повідомлення Name[x-test]=xxPrivate messagexx Name[zh_CN]=私人消息 Name[zh_TW]=私密訊息 Comment=You received a private message Comment[ar]=استقبلت رسالة خاصّة Comment[bg]=Получихте лично съобщение Comment[bs]=Primili ste ličnu poruku Comment[ca]=Heu rebut un missatge privat Comment[ca@valencia]=Heu rebut un missatge privat Comment[cs]=Obdrželi jste soukromou zprávu Comment[da]=Du modtog en privat besked Comment[de]=Sie haben eine private Nachricht erhalten Comment[el]=Λάβατε ένα προσωπικό μήνυμα Comment[en_GB]=You received a private message Comment[es]=Ha recibido un mensaje privado Comment[et]=Sa said privaatsõnumi Comment[eu]=Mezu pribatu bat jaso duzu Comment[fi]=Sait yksityisviestin Comment[fr]=Vous avez reçu un message privé Comment[ga]=Fuair tú teachtaireacht phríobháideach Comment[gl]=Recibiu unha mensaxe privada Comment[he]=אתה הצטרפת אל חדר Comment[hne]=आपको निजी संदेस मिला Comment[hu]=Ön privát üzenetet kapott +Comment[is]=Þú fékkst einkaskilaboð Comment[it]=Hai ricevuto un messaggio privato Comment[kk]=Сырлы хабарлама келді Comment[km]=អ្នក​បាន​ទទួល​សារ​ឯកជន​មួយ Comment[ko]=개인 메시지를 받음 Comment[lt]=Gavote asmeninę žinutę Comment[nb]=Du mottok en privat melding Comment[nds]=Du hest en Privaatnaricht kregen Comment[nl]=U ontving een privaat bericht Comment[nn]=Du fekk ei privat melding Comment[pa]=ਤੁਹਾਨੂੰ ਇੱਕ ਪ੍ਰਾਈਵੇਟ ਸੁਨੇਹਾ ਆਇਆ ਹੈ Comment[pl]=Masz wiadomość prywatną Comment[pt]=Você recebeu uma mensagem privada Comment[pt_BR]=Você recebeu uma mensagem privada Comment[ro]=Ați primit un mesaj privat Comment[ru]=Вам написали личное сообщение Comment[si]=ඔබට පුද්ගලික පණිවිඩයක් ලැබී ඇත Comment[sk]=Dostali ste súkromnú správu Comment[sl]=Prejeli ste zasebno sporočilo Comment[sq]=Ju morët një mesazh privat Comment[sr]=Примили сте личну поруку Comment[sr@ijekavian]=Примили сте личну поруку Comment[sr@ijekavianlatin]=Primili ste ličnu poruku Comment[sr@latin]=Primili ste ličnu poruku Comment[sv]=Du har tagit emot ett privat meddelande Comment[tr]=Bir özel ileti aldınız Comment[uk]=До вас надійшло особисте повідомлення Comment[x-test]=xxYou received a private messagexx Comment[zh_CN]=您收到一条私人消息 Comment[zh_TW]=您接收到了一個私密訊息 Action=None [Event/nickchange] Name=Nick changed Name[ar]=تغيّر اسم مستعار Name[bg]=Псевдонимът е променен Name[bs]=Nadimak promijenjen Name[ca]=Sobrenom canviat Name[ca@valencia]=Sobrenom canviat Name[cs]=Přezdívka změněna Name[da]=Nick ændret Name[de]=Spitzname geändert Name[el]=Το ψευδώνυμο άλλαξε Name[en_GB]=Nick changed Name[es]=Apodo modificado Name[et]=Hüüdnimi muudetud Name[eu]=Goitizen aldatua Name[fi]=Nimimerkki muuttui Name[fr]=Pseudo modifié Name[ga]=Athraíodh leasainm Name[gl]=Alcume cambiado Name[he]=הכינוי שונה Name[hne]=उपनाम बदलिस Name[hu]=Becenév módosítva +Name[is]=Gælunafni breytt Name[it]=Nick cambiato Name[kk]=Бүкеншік ат өзгертілген Name[km]=បាន​ផ្លាស់ប្ដូរ​សមត្ថិនាម Name[ko]=별명 변경됨 Name[lt]=Slapyvardis pakeistas Name[nb]=Kallenavn endret Name[nds]=Ökelnaam ännert Name[nl]=Bijnaam gewijzigd Name[nn]=Kallenamn endra Name[pa]=ਨਾਂ ਬਦਲਿਆ Name[pl]=Zmieniono pseudonim Name[pt]=Alcunha alterada Name[pt_BR]=Apelido alterado Name[ro]=Poreclă schimbată Name[ru]=Изменён ник Name[si]=සුරතල් නම වෙනස් කරන ලදි Name[sk]=Zmenená prezývka Name[sl]=Vzdevek spremenjen Name[sq]=Pseudonimi u ndryshua Name[sr]=Надимак промењен Name[sr@ijekavian]=Надимак промијењен Name[sr@ijekavianlatin]=Nadimak promijenjen Name[sr@latin]=Nadimak promenjen Name[sv]=Smeknamn ändrat Name[tr]=Takma ad değişti Name[uk]=Змінено псевдонім Name[x-test]=xxNick changedxx Name[zh_CN]=昵称已改变 Name[zh_TW]=暱稱已變更 Comment=Someone changed their nick Comment[ar]=غيّر شخص ما اسمه المستعار Comment[bg]=Някой си промени псевдонима Comment[bs]=Neko je promijenio svoj nadimak Comment[ca]=Algú ha canviat el seu sobrenom Comment[ca@valencia]=Algú ha canviat el seu sobrenom Comment[cs]=Někdo změnil svou přezdívku Comment[da]=Nogen ændrede deres nick Comment[de]=Jemand hat seinen Spitznamen geändert Comment[el]=Κάποιος άλλαξε το ψευδώνυμό του Comment[en_GB]=Someone changed their nickname Comment[es]=Alguien ha cambiado su apodo Comment[et]=Keegi muutis oma hüüdnime Comment[eu]=Norbaitek bere goitizena aldatu du Comment[fi]=Joku muutti nimimerkkiään Comment[fr]=Une personne a modifié son pseudo Comment[ga]=D'athraigh duine éigin a leasainm Comment[gl]=Alguén cambiou de alcume Comment[he]=מישהו שינה את הכינוי שלו Comment[hu]=Valaki megváltoztatta a becenevét +Comment[is]=Einhver breytti gælunafninu sínu Comment[it]=Qualcuno ha cambiato il suo nick Comment[kk]=Біреу бүркеншік атын өзгертті Comment[km]=មាន​នរណា​ម្នាក់​បាន​ប្ដូរ​សមត្ថិនាម​របស់​អ្នក Comment[ko]=누군가의 별명이 변경됨 Comment[lt]=Kažkas pasikeitė savo slapyvardį Comment[nb]=Noen endret sitt kallenavn Comment[nds]=Een hett sien Ökelnaam ännert Comment[nl]=Iemand veranderde zijn of haar bijnaam Comment[nn]=Noko endra kallenamn Comment[pa]=ਕਿਸੇ ਨੇ ਆਪਣਾ ਨਾਂ ਬਦਲਿਆ ਹੈ Comment[pl]=Ktoś zmienił swój pseudonim Comment[pt]=Alguém mudou a sua alcunha Comment[pt_BR]=Alguém alterou o seu apelido Comment[ro]=Cineva și-a schimbat porecla Comment[ru]=Кто-то сменил своё имя Comment[si]=යමෙක් ඔහුගේ සුරතල් නම වෙනස් කරන ලදි Comment[sk]=Niekto zmenil svoju prezývku Comment[sl]=Nekdo je spremenil svoj vzdevek Comment[sq]=Dikush ndryshoi pseudonimin e vet Comment[sr]=Неко је променио свој надимак Comment[sr@ijekavian]=Неко је промијенио свој надимак Comment[sr@ijekavianlatin]=Neko je promijenio svoj nadimak Comment[sr@latin]=Neko je promenio svoj nadimak Comment[sv]=Någon ändrade sitt smeknamn Comment[tr]=Birileri takma adlarını değiştirdi Comment[uk]=Хтось змінив свій псевдонім Comment[x-test]=xxSomeone changed their nickxx Comment[zh_CN]=有人修改了昵称 Comment[zh_TW]=有人變更了暱稱 Action=None [Event/dcc_incoming] Name=Incoming file Name[ar]=ملفّ قادم Name[be]=Уваходны файл Name[bg]=Пристигащ файл Name[bs]=Dolazeća datoteka Name[ca]=Fitxer entrant Name[ca@valencia]=Fitxer entrant Name[cs]=Příchozí soubor Name[da]=Indkommende fil Name[de]=Datei angeboten Name[el]=Εισερχόμενο αρχείο Name[en_GB]=Incoming file Name[es]=Archivo entrante Name[et]=Sisenev fail Name[eu]=Sarrerako fitxategia Name[fi]=Saapuva tiedosto Name[fr]=Fichier entrant Name[ga]=Comhad isteach Name[gl]=Ficheiro recibido Name[he]=קובץ נכנס Name[hne]=आवक फाइल Name[hu]=Bejövő fájl +Name[is]=Skrá að berast Name[it]=File in arrivo Name[kk]=Файлды келеді Name[km]=ឯកសារ​មកដល់ Name[ko]=파일 들어옴 Name[lt]=Atsiunčiamas failas Name[nb]=Innkommende fil Name[nds]=Datei kummt an Name[nl]=Bestand aangeboden Name[nn]=Innkommande fil Name[pa]=ਆ ਰਹੀ ਫਾਇਲ Name[pl]=Przychodzący plik Name[pt]=Ficheiro recebido Name[pt_BR]=Arquivo recebido Name[ro]=Fișier de intrare Name[ru]=Входящий файл Name[si]=එමින් පවතින ගොනුව Name[sk]=Prichádzajúci súbor Name[sl]=Prihajajoča datoteka Name[sq]=Skedar në ardhje Name[sr]=Долазни фајл Name[sr@ijekavian]=Долазни фајл Name[sr@ijekavianlatin]=Dolazni fajl Name[sr@latin]=Dolazni fajl Name[sv]=Inkommande fil Name[tr]=Gelen dosya Name[ug]=كىرىۋاتقان ھۆججەت Name[uk]=Вхідний файл Name[x-test]=xxIncoming filexx Name[zh_CN]=正在传入的文件 Name[zh_TW]=傳來檔案 Comment=Someone wants to transmit a file to you over DCC Comment[ar]=يريد أحد نقل ملفّ إليك عبر دي​سي​سي Comment[bg]=Някой иска да ви изпрати файл чрез DCC Comment[bs]=Neko želi da vam pošalje datoteku putem DCC‑a Comment[ca]=Algú desitja enviar-vos un fitxer sobre DCC Comment[ca@valencia]=Algú desitja enviar-vos un fitxer sobre DCC Comment[cs]=Někdo vám chce přes DCC poslat soubor Comment[da]=Nogen vil sende en fil til dig via DCC Comment[de]=Jemand bietet Ihnen eine Datei zum DCC-Download an Comment[el]=Κάποιος θέλει να σας στείλει ένα αρχείο μέσω DCC Comment[en_GB]=Someone wants to transmit a file to you over DCC Comment[es]=Alguien quiere transmitirle un archivo a través de DCC Comment[et]=Keegi tahab sulle faili edastada üle DCC Comment[eu]=Norbaitek fitxategi bat igorri nahi dizu DCC bidez Comment[fi]=Joku haluaa lähettää DCC-tiedoston sinulle Comment[fr]=Une personne souhaite vous envoyer un fichier via « DCC » Comment[ga]=Is mian le duine éigin comhad a sheoladh chugat trí DCC Comment[gl]=Alguén quere transmitirlle un ficheiro mediante DCC Comment[he]=מישהו רוצה לשלוח לך קובץ דרך DCC Comment[hu]=Valaki fájl szeretne küldeni Önnek DCC-n keresztül +Comment[is]=Einhver vill senda þér skrá í gegnum DCC Comment[it]=Qualcuno vuole trasmetterti un file via DCC Comment[kk]=Біреу DCC арқылы Сізге файлды жібермек Comment[km]=មាន​នរណា​ម្នាក់​ចង់​បញ្ជូន​ឯកសារ​ឲ្យ​អ្នក​តាម DCC Comment[ko]=DCC로 파일을 전송하려고 함 Comment[lt]=Kažkas nori jums atsiųsti failą per DCC Comment[nb]=Noen vil sende deg en fil over DCC Comment[nds]=Een will Di en Datei över DCC överdregen Comment[nl]=Iemand wil via DCC een bestand naar u sturen Comment[nn]=Nokon ønskjer å senda deg ei fil via DCC Comment[pa]=ਕੋਈ ਤੁਹਾਨੂੰ DCC ਰਾਹੀਂ ਇੱਕ ਫਾਇਲ ਭੇਜਣੀ ਚਾਹੁੰਦਾ ਹੈ Comment[pl]=Ktoś chce do ciebie przesłać plik przez DCC Comment[pt]=Alguém quer transmitir um ficheiro através de DCC Comment[pt_BR]=Alguém deseja transmitir um arquivo para você via DCC Comment[ro]=Cineva dorește să vă transmită un fișier prin DCC Comment[ru]=Кто-то хочет передать вам файл Comment[si]=DCC හරහා ගොනුවක් ඔබට එවිමට යමෙකුට අවශ්‍යව ඇත Comment[sk]=Niekto vám chce poslať súbor cez DCC Comment[sl]=Nekdo želi poslati datoteko do vas preko DCC Comment[sq]=Dikush do t'iu dërgojë një skedar me anë të DCC Comment[sr]=Неко жели да вам пренесе фајл путем ДЦЦ‑а Comment[sr@ijekavian]=Неко жели да вам пренесе фајл путем ДЦЦ‑а Comment[sr@ijekavianlatin]=Neko želi da vam prenese fajl putem DCC‑a Comment[sr@latin]=Neko želi da vam prenese fajl putem DCC‑a Comment[sv]=Någon vill skicka en fil till dig via direktkommunikation Comment[tr]=Birisi size DCC üzerinden dosya göndermek istiyor Comment[uk]=Хтось бажає передати вам файл за допомогою DCC Comment[x-test]=xxSomeone wants to transmit a file to you over DCCxx Comment[zh_CN]=有人想通过 DCC 向您传送文件 Comment[zh_TW]=有人要透過 DCC 傳送檔案給您 Action=None [Event/dcc_error] Name=DCC transfer error Name[ar]=خطأ في نقل دي​سي​سي Name[bg]=Грешка при пренос DCC Name[bs]=Greška DCC prijenosa Name[ca]=Error de transferència DCC Name[ca@valencia]=Error de transferència DCC Name[cs]=Chyba DCC přenosu Name[da]=Fejl ved DCC-overførsel Name[de]=DCC-Übertragungsfehler Name[el]=Σφάλμα μεταφοράς DCC Name[en_GB]=DCC transfer error Name[es]=Error de transferencia DCC Name[et]=DCC ülekande viga Name[eu]=DCC transferentziaren errorea Name[fi]=DCC-siirtovirhe Name[fr]=Erreur de transfert « DCC » Name[gl]=Erro de transferencia de DCC Name[he]=שגיאת העברה ישירה (DCC) Name[hu]=DCC-átviteli hiba +Name[is]=Flutningsvilla í DCC Name[it]=Errore in trasferimento DCC Name[kk]=DCC тасымалдау қатесі Name[km]=កំហុស​ក្នុង​ផ្ទេរ DCC Name[ko]=DCC 전송 오류 Name[lt]=DCC siuntimo klaida Name[nb]=DCC overføringsfeil Name[nds]=Fehler bi DCC-Överdregen Name[nl]=Fout in DCC-transfer Name[nn]=Feil ved DCC-filoverføring Name[pa]=DCC ਟਰਾਂਸਫਰ ਗਲਤੀ Name[pl]=Błąd transferu DCC Name[pt]=Erro de transferência DCC Name[pt_BR]=Erro de transferência DCC Name[ru]=Ошибка передачи по DCC Name[si]=DCC මාරුකිරීමේ දෝශය Name[sk]=Chyba prenosu DCC Name[sl]=Napaka med prenosom DCC Name[sq]=Gabim transferimi i DCC Name[sr]=Грешка ДЦЦ преноса Name[sr@ijekavian]=Грешка ДЦЦ преноса Name[sr@ijekavianlatin]=Greška DCC prenosa Name[sr@latin]=Greška DCC prenosa Name[sv]=Överföringsfel vid direktkommunikation Name[tr]=DCC aktarım hatası Name[uk]=Помилка передавання DCC Name[x-test]=xxDCC transfer errorxx Name[zh_CN]=DCC 传输错误 Name[zh_TW]=DCC 傳輸錯誤 Comment=An error occurred in a DCC transfer Comment[ar]=حدث خطأ في نقل دي​سي​سي Comment[bg]=Получила се е грешка при пренос чрез DCC Comment[bs]=Greška u DCC prijenosu Comment[ca]=Ha ocorregut un error en una transferència DCC Comment[ca@valencia]=Ha ocorregut un error en una transferència DCC Comment[cs]=Při DCC přenosu nastala chyba Comment[da]=En fejl opstod i en DCC-overførsel Comment[de]=Bei der DCC-Übertragung ist ein Fehler aufgetreten Comment[el]=Ένα σφάλμα παρουσιάστηκε σε μια μεταφορά DCC Comment[en_GB]=An error occurred in a DCC transfer Comment[es]=Se produjo un error en una transferencia DCC Comment[et]=DCC ülekandel tekkis viga Comment[eu]=Errorea gertatu da DCC transferentzian Comment[fi]=Virhe tapahtui DCC-siirron aikana Comment[fr]=Une erreur s'est produite lors du transfert « DCC » Comment[gl]=Produciuse un erro nunha transferencia de DCC Comment[he]=אירעה שגיאה בעת העברה ישירה (DCC) Comment[hu]=Hiba történt a DCC-fájlátvitel közben +Comment[is]=Villa kom upp í DCC flutningi Comment[it]=Si è verificato un errore in un trasferimento DCC Comment[kk]=DCC тасымал кезде бір қате пайда болды Comment[km]=កំហុស​បានកើត​ឡើង​នៅ​ក្នុងការ​ផ្ទេរ DCC Comment[ko]=DCC 전송 중 오류 발생 Comment[lt]=Įvyko klaida DCC perdavime Comment[nb]=Feil oppsto i en DCC-overføring Comment[nds]=Dat geev en Fehler bi de DCC-Överdregen Comment[nl]=Er is een fout opgetreden bij een DCC-transfer Comment[nn]=Det oppstod ein feil ved DCC-filoverføring Comment[pl]=Podczas transferu DCC wystąpił błąd Comment[pt]=Ocorreu um erro numa transferência DCC Comment[pt_BR]=Ocorreu um erro na transferência DCC Comment[ru]=Произошла ошибка при передаче файла по DCC Comment[si]=DCC මාරුකිරීමේදී දෝශයක් හටගැනුනි Comment[sk]=Objavila sa chyba v prenose DCC Comment[sl]=Med prenosom DCC je prišlo do napake Comment[sq]=Ndodhi një gabim gjatë një transferte në DCC Comment[sr]=Грешка у ДЦЦ преносу Comment[sr@ijekavian]=Грешка у ДЦЦ преносу Comment[sr@ijekavianlatin]=Greška u DCC prenosu Comment[sr@latin]=Greška u DCC prenosu Comment[sv]=Ett fel uppstod vid en överföring via direktkommunikation Comment[tr]=DCC aktarımında bir hata oluştu Comment[uk]=Сталася помилка у передаванні DCC Comment[x-test]=xxAn error occurred in a DCC transferxx Comment[zh_CN]=DCC 传输时发生错误 Comment[zh_TW]=DCC 傳輸時發生錯誤 Action=None [Event/dcctransfer_done] Name=DCC transfer complete Name[ar]=اكتمل نقل دي​سي​سي Name[bg]=Привършен пренос DCC Name[bs]=Završen DCC prijenos Name[ca]=S'ha completat la transferència DCC Name[ca@valencia]=S'ha completat la transferència DCC Name[cs]=DCC přenos dokončen Name[da]=DCC-overførsel gennemført Name[de]=DCC-Übertragung abgeschlossen Name[el]=H μεταφορά DCC ολοκληρώθηκε Name[en_GB]=DCC transfer complete Name[es]=Transferencia DCC finalizada Name[et]=DCC ülekanne on tehtud Name[eu]=DCC transferentzia burutu da Name[fi]=DCC-siirto valmis Name[fr]=Transfert « DCC » terminé Name[gl]=Rematou a transferencia de DCC Name[he]=העברה ישירה הסתיימה Name[hu]=A DCC-átvitel befejeződött +Name[is]=DCC flutningi lokið Name[it]=Trasferimento DCC completato Name[kk]=DCC тасымалдау бітті Name[km]=បញ្ចប់​ការ​ផ្ទេរ DCC Name[ko]=DCC 전송 완료 Name[lt]=Baigtas DCC siuntimas Name[nb]=DCC-overføring fullført Name[nds]=DCC-Överdregen afslaten Name[nl]=DCC-transfer gereed Name[nn]=DCC-filoverføring fullførd Name[pa]=DCC ਟਰਾਂਸਫਰ ਪੂਰੀ ਹੋਈ Name[pl]=Ukończono transfer DCC Name[pt]=Transferência DCC completa Name[pt_BR]=Transferência DCC concluída Name[ru]=Передача файла по DCC завершена Name[si]=DCC මාරුකිරීම සම්පූර්ණයි Name[sk]=DCC prenos hotový Name[sl]=Prenos DCC je bil zaključen Name[sq]=Transferta në DCC u kompletua Name[sr]=Завршен ДЦЦ пренос Name[sr@ijekavian]=Завршен ДЦЦ пренос Name[sr@ijekavianlatin]=Završen DCC prenos Name[sr@latin]=Završen DCC prenos Name[sv]=Överföring via direktkommunikation färdig Name[tr]=DCC aktarımı tamamlandı Name[uk]=Передавання DCC завершено Name[x-test]=xxDCC transfer completexx Name[zh_CN]=DCC 传输完成 Name[zh_TW]=DCC 傳輸完成 Comment=A DCC transfer successfully completed Comment[ar]=اكتمل نقل دي​سي​سي بنجاح Comment[bg]=Преносът чрез DCC е успешно приключен Comment[bs]=DCC prijenos je uspješno okončan Comment[ca]=Una transferència DCC s'ha completat correctament Comment[ca@valencia]=Una transferència DCC s'ha completat correctament Comment[cs]=DCC přenos úspěšně dokončen Comment[da]=En DCC-overførsel er blevet gennemført Comment[de]=Eine DCC-Übertragung wurde erfolgreich abgeschlossen Comment[el]=Μια μεταφορά DCC ολοκληρώθηκε επιτυχώς Comment[en_GB]=A DCC transfer successfully completed Comment[es]=Ha finalizado con éxito una transferencia DCC Comment[et]=DCC ülekanne lõpetati edukalt Comment[eu]=DCC transferentzia bat ondo burutu da Comment[fi]=DCC-siirto valmistui onnistuneesti Comment[fr]=Transfert « DCC » terminé avec succès Comment[gl]=Completouse unha transferencia de DCC Comment[he]=העברה ישירה הסתיימה בהצלחה Comment[hu]=A DCC-átvitel sikeresen befejeződött Comment[it]=Un trasferimento DCC è stato completato correttamente Comment[kk]=DCC тасымалдауы сәтті бітті Comment[km]=ការ​ផ្ទេរ DCC បានបញ្ចប់ដោយ​ជោគជ័យ Comment[ko]=DCC 전송이 완료됨 Comment[lt]=DCC perdavimas sėkmingai baigtas Comment[nb]=En DCC-overføring er vellykket fullført Comment[nds]=En DCC-Överdregen wöör mit Spood afslaten. Comment[nl]=Een DCC-transfer is met succes voltooid Comment[nn]=Ei DCC-filoverføring vart fullført Comment[pl]=Transfer DCC zakończył się poprawnie Comment[pt]=Foi terminada com sucesso uma transferência DCC Comment[pt_BR]=Uma transferência DCC concluída com sucesso Comment[ru]=Передача файла по DCC успешно завершена Comment[si]=DCC මාරුකිරීමක් සාර්ථකව සම්පුර්ණ විය Comment[sk]=DCC prenos úspešne dokončený Comment[sl]=Prenos DCC se je uspešno zaključil Comment[sq]=Një transfertë DCC u kompletua me sukses Comment[sr]=ДЦЦ пренос је успешно окончан Comment[sr@ijekavian]=ДЦЦ пренос је успјешно окончан Comment[sr@ijekavianlatin]=DCC prenos je uspješno okončan Comment[sr@latin]=DCC prenos je uspešno okončan Comment[sv]=En överföring via direktkommunikation avslutades med lyckat resultat Comment[tr]=Bir DCC aktarımı başarılı bir şekilde tamamlandı Comment[uk]=Передавання DCC успішно завершено Comment[x-test]=xxA DCC transfer successfully completedxx Comment[zh_CN]=DCC 传输成功完成 Comment[zh_TW]=DCC 傳輸已成功完成 Action=None [Event/join] Name=Nick joined channel Name[ar]=انضمّ شخص إلى القناة Name[bg]=Псевдонимът се присъедини към канала Name[bs]=Nadimak se priključio kanalu Name[ca]=El sobrenom ha accedit al canal Name[ca@valencia]=El sobrenom ha accedit al canal Name[cs]=Přezdívka se objevila na kanálu Name[da]=Nick gik med i kanalen Name[de]=Benutzer betritt Kanal Name[el]=Το ψευδώνυμο συνδέθηκε στο κανάλι Name[en_GB]=Nickname joined channel Name[es]=Apodo se ha unido al canal Name[et]=Kasutaja ühines kanaliga Name[eu]=Goitizena kanalari batu zaio Name[fi]=Nimimerkki liittyi kanavalle Name[fr]=Une personne a rejoint le canal Name[ga]=Chuaigh leasainm le cainéal Name[gl]=Alguén se uniu á canle Name[he]=כינוי התחבר אל החדר Name[hu]=Valaki belépett a csatornára Name[it]=Nick entrato nel canale Name[kk]=Бүркеншік ат арнаға кірді Name[km]=សមត្ថិនាម​ដែលបាន​ចូល​រួម​ប៉ុស្ដិ៍ Name[ko]=채널에 입장함 Name[lt]=Slapyvardis prisijungė kanale Name[nb]=Kallenavn ble med i kanal Name[nds]=Ökelnaam na Kanaal tokamen Name[nl]=Bijnaam neemt deel aan kanaal Name[nn]=Kallenamn vart med i kanal Name[pa]=ਨਾਂ ਚੈਨਲ ਵਿੱਚ ਦਾਖਲ ਹੋਇਆ Name[pl]=Pseudonim dołączył do kanału Name[pt]=Alcunha juntou-se ao canal Name[pt_BR]=Apelido entrou no canal Name[ro]=Poreclă se alăturează la canal Name[ru]=Пользователь вошёл на канал Name[si]=සුරතල් නම නාලිකාවට සම්බන්ධ විය Name[sk]=Prezývka sa pripojila ku kanálu Name[sl]=Vzdevek se je pridružil kanalu Name[sq]=Një pseudonim u bashkua me kanalin Name[sr]=Надимак се прикључио каналу Name[sr@ijekavian]=Надимак се прикључио каналу Name[sr@ijekavianlatin]=Nadimak se priključio kanalu Name[sr@latin]=Nadimak se priključio kanalu Name[sv]=Någon med smeknamnet gick med i en kanal Name[tr]=Kişi odaya girdi Name[uk]=Псевдонім увійшов на канал Name[x-test]=xxNick joined channelxx Name[zh_CN]=昵称加入了频道 Name[zh_TW]=有人加入了頻道 Comment=New nick joined a channel Comment[ar]=شخص جديد انضمّ إلى القناة Comment[bg]=Нов псевдоним се присъедини към канала Comment[bs]=Novi nadimak se priključio kanalu Comment[ca]=Un sobrenom nou ha accedit a un canal Comment[ca@valencia]=Un sobrenom nou ha accedit a un canal Comment[cs]=Na kanálu se objevila nová přezdívka Comment[da]=Nyt nick gik med i en kanal Comment[de]=Jemand betritt einen Kanal Comment[el]=Νέο ψευδώνυμο συνδέθηκε σε ένα κανάλι Comment[en_GB]=New nickname joined a channel Comment[es]=Un nuevo usuario se ha unido a un canal Comment[et]=Kanaliga ühines uus kasutaja Comment[eu]=Goitizen berri bat kanalari batu zaio Comment[fi]=Uusi nimimerkki liittyi kanavalle Comment[fr]=Un nouveau pseudo a rejoint un canal Comment[ga]=Chuaigh leasainm nua le cainéal Comment[gl]=Un novo alcume uniuse á canle Comment[he]==כינוי חדש התחבר לחדר Comment[hu]=Új felhasználó lépett be az egyik csatornára Comment[it]=Un nuovo nick è entrato nel canale Comment[kk]=Жаңа бүркеншік ат арнаға кірді Comment[km]=សមត្ថិនាម​ថ្មី​ដែល​បាន​ចូលរួម​ប៉ុស្ដិ៍ Comment[ko]=새로운 사람이 채널에 입장함 Comment[lt]=Naujas slapyvardis prisijungė kanale Comment[nb]=Nytt kallenavn ble med i en kanal Comment[nds]=Op en Kanaal gifft dat en nieg Ökelnaam Comment[nl]=Nieuwe bijnaam neemt deel aan een kanaal Comment[nn]=Nytt kalenamn vart med i kanal Comment[pa]=ਨਵਾਂ ਨਾਂ ਇੱਕ ਚੈਨਲ ਵਿੱਚ ਆਇਆ Comment[pl]=Nowy pseudonim dołączył do kanału Comment[pt]=Um novo utilizador juntou-se ao canal Comment[pt_BR]=Um novo apelido entrou no canal Comment[ro]=O poreclă nouă s-a alăturat unui canal Comment[ru]=Новые люди на канале Comment[si]=නව සුරතල් නාමය නාලිකාවට සම්බන්ධ විය Comment[sk]=Nová prezývka sa pripojila do kanála Comment[sl]=Nov vzdevek se je pridružil kanalu Comment[sq]=Një pseudonim i ri u bashkua me një kanal Comment[sr]=Нови надимак се прикључио каналу Comment[sr@ijekavian]=Нови надимак се прикључио каналу Comment[sr@ijekavianlatin]=Novi nadimak se priključio kanalu Comment[sr@latin]=Novi nadimak se priključio kanalu Comment[sv]=Någon med ett nytt smeknamn gick med i en kanal Comment[tr]=Odaya yeni bir kişi girdi Comment[uk]=На канал увійшов особа з новим псевдонімом Comment[x-test]=xxNew nick joined a channelxx Comment[zh_CN]=新的昵称加入了一个频道 Comment[zh_TW]=有新來的人加入了頻道 Action=None [Event/part] Name=Nick left channel Name[ar]=غادر شخص من القناة Name[bg]=Псевдонимът напусна канала Name[bs]=Nadimak je napustio kanal Name[ca]=El sobrenom ha deixat el canal Name[ca@valencia]=El sobrenom ha deixat el canal Name[cs]=Přezdívka opustila kanál Name[da]=Nick forlod kanal Name[de]=Benutzer verlässt Kanal Name[el]=Το ψευδώνυμο έφυγε από το κανάλι Name[en_GB]=Nickname left channel Name[es]=Apodo ha dejado el canal Name[et]=Kasutaja lahkus kanalilt Name[eu]=Goitizenak kanala utzi du Name[fi]=Nimimerkki poistui kanavalta Name[fr]=Une personne a quitté le canal Name[ga]=D'fhág leasainm cainéal Name[gl]=Alguén deixou a canle Name[he]=כינוי עזב את החדר Name[hu]=Valaki kilépett a csatornáról Name[it]=Nick uscito dal canale Name[kk]=Бүркеншік ат арнадан шықты Name[km]=សមត្ថិនាម​បាន​ចេញ​ពី​ប៉ុស្ដិ៍ Name[ko]=채널을 떠남 Name[lt]=Slapyvardis atsijungė nuo kanalo Name[nb]=Kallenavn forlot kanal Name[nds]=Ökelnaam hett Kanaal verlaten Name[nl]=Bijnaam verlaat kanaal Name[nn]=Kallenamn forlét kanal Name[pa]=ਨਾਂ ਚੈਨਲ ਛੱਡ ਗਿਆ Name[pl]=Pseudonim opuścił kanał Name[pt]=Alcunha saiu do canal Name[pt_BR]=Apelido deixou o canal Name[ro]=Poreclă părăsește canalul Name[ru]=Пользователь вышел из канала Name[si]=සුරතල් නාමය නාලිකාව හැර යන ලදි Name[sk]=Prezývka opustila kanál Name[sl]=Vzdevek je zapustil kanal Name[sq]=Një pseudonim e la kanalin Name[sr]=Надимак је напустио канал Name[sr@ijekavian]=Надимак је напустио канал Name[sr@ijekavianlatin]=Nadimak je napustio kanal Name[sr@latin]=Nadimak je napustio kanal Name[sv]=Någon med smeknamnet lämnade en kanal Name[tr]=Kişi odadan ayrıldı Name[uk]=Псевдонім залишив канал Name[x-test]=xxNick left channelxx Name[zh_CN]=昵称离开了频道 Name[zh_TW]=有人離開頻道 Comment=A nick left a channel Comment[ar]=غادر شخص ما من قناة Comment[bg]=Псевдонимът напусна канала Comment[bs]=Nadimak je napustio kanal Comment[ca]=Un sobrenom ha deixat un canal Comment[ca@valencia]=Un sobrenom ha deixat un canal Comment[cs]=Přezdívka opustila kanál Comment[da]=Et nick forlod en kanal Comment[de]=Jemand verlässt einen Kanal Comment[el]=Ένα ψευδώνυμο έφυγε από ένα κανάλι Comment[en_GB]=A nickname left a channel Comment[es]=Un usuario ha abandonado un canal Comment[et]=Kasutaja lahkus kanalilt Comment[eu]=Goitizen batek kanal utzi du Comment[fi]=Nimimerkki poistui kanavalta Comment[fr]=Une personne a quitté un canal Comment[ga]=D'fhág leasainm cainéal Comment[gl]=Un alcume abandonou a canle Comment[he]=כינוי עזב את החדר Comment[hu]=Valaki kilépett egy csatornáról Comment[it]=Un nick è uscito dal canale Comment[kk]=Бір бүркеншік ат арнадан шықты Comment[km]=សមត្ថិនាម​ដែល​បាន​ចេញ​ពី​ប៉ុស្ដិ៍ Comment[ko]=한 사람이 채널을 떠남 Comment[lt]=Slapyvardis atsijungė nuo kanalo Comment[nb]=Et kallenavn forlot en kanal Comment[nds]=Een hett en Kanaal verlaten Comment[nl]=Een bijnaam heeft een kanaal verlaten Comment[nn]=Eit kallenamn forlét ein kanal Comment[pa]=ਇੱਕ ਨਾਂ ਨੇ ਚੈਨਲ ਛੱਡਿਆ Comment[pl]=Pseudonim opuścił kanał Comment[pt]=Um utilizador abandonou o canal Comment[pt_BR]=Um apelido deixou um canal Comment[ro]=O poreclă a părăsit canalul Comment[ru]=Пользователь покинул канал Comment[si]=සුරතල් නමක් නාලිකාව හැර යන ලදී Comment[sk]=Prezývka opustila kanál Comment[sl]=Vzdevek je zapustil kanal Comment[sq]=Një pseudonim e la një kanal Comment[sr]=Надимак је напустио канал Comment[sr@ijekavian]=Надимак је напустио канал Comment[sr@ijekavianlatin]=Nadimak je napustio kanal Comment[sr@latin]=Nadimak je napustio kanal Comment[sv]=Någon med ett smeknamn lämnade en kanal Comment[tr]=Bir kişi odadan ayrıldı Comment[uk]=Особа з псевдонімом залишила канал Comment[x-test]=xxA nick left a channelxx Comment[zh_CN]=昵称离开了一个频道 Comment[zh_TW]=有人離開了頻道 Action=None [Event/mode] Name=Mode change Name[ar]=تغيّر الوضع Name[bg]=Смяна на режим Name[bs]=Režim izmijenjen Name[ca]=Canvi de mode Name[ca@valencia]=Canvi de mode Name[cs]=Změna režimu Name[da]=Tilstand ændret Name[de]=Moduswechsel Name[el]=Αλλαγή κατάστασης Name[en_GB]=Mode change Name[es]=Cambio de modo Name[et]=Režiimi muutus Name[eu]=Modu-aldaketa Name[fi]=Tilamuutos Name[fr]=Changement de mode Name[ga]=Athrú móid Name[gl]=Cambio de modo Name[he]=שינוי מצב Name[hu]=Módváltás Name[it]=Cambio di modalità Name[kk]=Күйін өзгерту Name[km]=ផ្លាស់ប្ដូរ​របៀប Name[ko]=모드 변경 Name[lt]=Pasikeitė būsena Name[nb]=Modusendring Name[nds]=Bedriefoort wesselt Name[nl]=Moduswisseling Name[nn]=Endra modus Name[pa]=ਮੋਡ ਬਦਲ Name[pl]=Zmiana trybu Name[pt]=Mudança de modo Name[pt_BR]=Alteração de modo Name[ro]=Schimbare regim Name[ru]=Смена режима Name[si]=ආකාරය වෙනස් කිරීම Name[sk]=Zmeniť režim Name[sl]=Sprememba načina Name[sq]=Ndryshim i mënyrës Name[sr]=Режим измењен Name[sr@ijekavian]=Режим измијењен Name[sr@ijekavianlatin]=Režim izmijenjen Name[sr@latin]=Režim izmenjen Name[sv]=Tillståndsändring Name[tr]=Kip değiştir Name[uk]=Зміна режиму Name[x-test]=xxMode changexx Name[zh_CN]=模式改变 Name[zh_TW]=模式變更 Comment=A user or channel mode was changed Comment[ar]=وضع مستخدم ما أو وضع القناة تغيّر Comment[bg]=Променен е потребителски режим или канал Comment[bs]=Korisnik ili režim kanala je promijenjen Comment[ca]=El mode d'un usuari o d'un canal ha estat canviat Comment[ca@valencia]=El mode d'un usuari o d'un canal ha estat canviat Comment[cs]=Uživatel nebo kanál byl změněn Comment[da]=En bruger- eller kanaltilstand blev ændret Comment[de]=Ein Benutzer- oder Kanal-Modus wurde geändert Comment[el]=Η κατάσταση ενός χρήστης ή καναλιού άλλαξε Comment[en_GB]=A user or channel mode was changed Comment[es]=Un modo de usuario o de canal ha sido modificado Comment[et]=Kasutaja või kanali režiim muudeti Comment[eu]=Erabiltzaile- edo kanal-modua aldatu da Comment[fi]=Käyttäjän tai kanavan tila vaihtui Comment[fr]=Le mode d'un utilisateur ou d'un canal a été changé Comment[ga]=Athraíodh mód úsáideora nó mód cainéil Comment[gl]=Cambiouse un usuario ou modo da canle Comment[he]=משתמש או חדר שינה את המצב שלו Comment[hu]=Egy felhasználó vagy egy csatornamód megváltozott Comment[it]=Una modalità utente o canale è stata cambiata Comment[kk]=Пайдаланушы не арна күйі өзгертілді Comment[km]=អ្នកប្រើ ឬ​របៀប​ប៉ុស្ដិ៍​ត្រូវ​បាន​ផ្លាស់ប្ដូរ Comment[ko]=사용자나 채널 모드가 변경됨 Comment[lt]=Pasikeitė naudotojo arba kanalo būsena Comment[nb]=En bruker- eller kanalmodus ble endret Comment[nds]=En Bruker- oder Klöönruumtyp wöör ännert Comment[nl]=Een gebruiker- of kanaalmodus is gewijzigd Comment[nn]=Modus for brukar eller kanal vart endra Comment[pa]=ਇੱਕ ਯੂਜਰ ਜਾਂ ਚੈਨਲ ਮੋਡ ਬਦਲਿਆ ਗਿਆ ਸੀ Comment[pl]=Zmieniono użytkownika lub tryb kanału Comment[pt]=O modo de um utilizador ou canal foi alterado Comment[pt_BR]=Um usuário ou modo de canal foi alterado Comment[ro]=Regimul unui canal sau utilizator s-a schimbat Comment[ru]=Режим пользователя или канала изменены Comment[si]=පරිශීලකයෙක් හෝ නාලිකා ආකාරය වෙනස් විය Comment[sk]=Používateľ alebo režim kanála sa zmenil Comment[sl]=Način uporabnika ali kanala je bil spremenjen Comment[sq]=Një mënyrë përdoruesi apo kanali u ndryshua Comment[sr]=Режим или корисника канала је измењен Comment[sr@ijekavian]=Режим или корисника канала је измијењен Comment[sr@ijekavianlatin]=Režim ili korisnika kanala je izmijenjen Comment[sr@latin]=Režim ili korisnika kanala je izmenjen Comment[sv]=Tillståndet för en användare eller kanal ändrades Comment[tr]=Bir kullanıcı veya oda kipi değiştirildi Comment[uk]=Було змінено режим користувача або каналу Comment[x-test]=xxA user or channel mode was changedxx Comment[zh_CN]=一个用户或频道的模式已改变 Comment[zh_TW]=某個使用者或頻道的模式被變更了 Action=None [Event/notify] Name=Nick online Name[ar]=شخص متّصل Name[bs]=Nadimak na mreži Name[ca]=Sobrenom en línia Name[ca@valencia]=Sobrenom en línia Name[cs]=Přezdívka online Name[da]=Nick kommet online Name[de]=Spitzname ist online Name[el]=Το ψευδώνυμο είναι σε σύνδεση Name[en_GB]=Nick online Name[es]=Apodo en conexión Name[et]=Kasutaja võrgus Name[fi]=Nimimerkki paikalla Name[fr]=Pseudo en Ligne Name[gl]=Alcume conectado Name[hu]=Becenév elérhető Name[it]=Nick collegato Name[ko]=온라인으로 전환됨 Name[lt]=Slapyvardis prisijungęs Name[nb]=Kallenavn tilkoblet Name[nds]=Ökelnaambruker tokoppelt Name[nl]=Schermnaam online Name[nn]=Kallenamn er tilkopla Name[pl]=Pseudonim w sieci Name[pt]=Alcunha ligada Name[pt_BR]=Apelido conectado Name[ru]=Пользователь в сети Name[sk]=Prezývka online Name[sl]=Vzdevek povezan Name[sr]=Надимак на вези Name[sr@ijekavian]=Надимак на вези Name[sr@ijekavianlatin]=Nadimak na vezi Name[sr@latin]=Nadimak na vezi Name[sv]=Smeknamn uppkopplat Name[tr]=Kişi çevrim içi Name[uk]=Псевдонім у мережі Name[x-test]=xxNick onlinexx Name[zh_CN]=在线昵称 Name[zh_TW]=上線的暱稱 Comment=A user on your watched nicks list has come online Comment[ar]=شخص في قائمة الأسماء المستعارة أصبح متّصلًا Comment[bg]=Потребител от списъка ви с наблюдавани псевдоними влезе в канала Comment[bs]=Korisnik sa vašeg spiska praćenih nadimaka je došao na vezu Comment[ca]=S'ha connectat un usuari de la vostra llista de sobrenoms vigilats Comment[ca@valencia]=S'ha connectat un usuari de la vostra llista de sobrenoms vigilats Comment[cs]=Uživatel z vašeho seznamu je online Comment[da]=En bruger på din liste over overvågede nicks er kommet online Comment[de]=Ein Benutzer aus Ihrer „Beobachten“-Liste ist online Comment[el]=Ένας χρήστης από τη λίστα ψευδώνυμων παρακολούθησης συνδέθηκε στο δίκτυο Comment[en_GB]=A user on your watched nicknames list has come online Comment[es]=Un usuario de su lista de apodos vigilados se ha conectado Comment[et]=Jälgitavate hüüdnimede nimekirjas olev kasutaja tuli võrku Comment[eu]=Zaintzen dituzun goitizenen zerrendako erabiltzaile bat konektatu da Comment[fi]=Seurattu nimimerkki tuli paikalle Comment[fr]=Un utilisateur présent dans votre liste de suivi de pseudo s'est connecté Comment[ga]=Tá úsáideoir ó do liosta faire ar líne anois Comment[gl]=Un usuario na súa lista de alcumes a vixiar acaba de conectarse Comment[he]=משתמש ברשימה תצוגה שלך נכנס לרשת Comment[hu]=Az értesítési listán szereplő egyik felhasználó elérhető módba váltott Comment[it]=Si è collegato un utente nella tua lista di nick sorvegliati Comment[kk]=Бақылауыңыздағы бүркеншік ат желіге кірді Comment[km]=អ្នកប្រើ​នៅ​លើ​បញ្ជី​សមត្ថិនាម​ដែល​បាន​ឃ្លាំមើល​របស់​អ្នក​ បាន​នៅលើ​បណ្ដាញ Comment[ko]=주시하는 별명 목록에 있는 사람이 온라인이 됨 Comment[lt]=Prisijungė naudotojas iš stebimų slapyvardžių sąrašo Comment[nb]=En bruker er tilkoblet som er på din liste over overvåkede kallenavn Comment[nds]=En Bruker op Dien List mit beluurt Ökelnaams hett sik tokoppelt Comment[nl]=Een gebruiker op uw gevolgdebijnamenlijst is online Comment[nn]=Ein brukar på overvakingslista di kopla seg til Comment[pa]=ਤੁਹਾਡੀ ਵਾਚ ਲਿਸਟ ਵਿੱਚੋਂ ਇੱਕ ਯੂਜ਼ਰ ਆਨਲਾਈਨ ਆਇਆ ਹੈ Comment[pl]=Użytkownik z twojej listy obserwowanych pseudonimów stał się dostępny Comment[pt]=Um utilizador da sua lista de notificações ligou-se Comment[pt_BR]=Um usuário de sua lista de apelidos ficou on-line Comment[ro]=Un utilizator de pe lista cu porecle urmărite s-a conectat Comment[ru]=Наблюдаемый пользователь в сети Comment[si]=ඔබ බැලු සුරතල් නම් ලැයිස්තුවේ පරිශීලකයෙක් මාර්ගගත විය Comment[sk]=Používateľ vo vašom zozname sledovaných je online Comment[sl]=Uporabnik na vašem seznamu opazovanih vzdevkov se je povezal Comment[sq]=Një përdorues në listën e pseudonimeve të kanalit tuaj erdhi në linjë Comment[sr]=Корисник са вашег списка надгледаних надимака ступио је на везу Comment[sr@ijekavian]=Корисник са вашег списка надгледаних надимака ступио је на везу Comment[sr@ijekavianlatin]=Korisnik sa vašeg spiska nadgledanih nadimaka stupio je na vezu Comment[sr@latin]=Korisnik sa vašeg spiska nadgledanih nadimaka stupio je na vezu Comment[sv]=En användare i din lista med bevakade smeknamn har kopplat upp Comment[tr]=İzlenen takma adlar listenizdeki bir kullanıcı bağlandı Comment[uk]=Користувач з вашого списку спостереження за псевдо увійшов до мережі Comment[x-test]=xxA user on your watched nicks list has come onlinexx Comment[zh_CN]=您昵称列表里的一个用户上线了 Comment[zh_TW]=在您監看的暱稱清單中的某人上線了 Action=None [Event/query] Name=Query Name[ar]=استعلام Name[bg]=Запитване Name[bs]=Upit Name[ca]=Conversa Name[ca@valencia]=Conversa Name[cs]=Dotaz Name[da]=Forespørgsel Name[de]=Gespräch (Query) Name[el]=Ερώτηση Name[en_GB]=Query Name[es]=Consulta Name[et]=Päring Name[eu]=Kontsulta Name[fi]=Keskustelu Name[fr]=Discussion Name[ga]=Iarratas Name[gl]=Conversa privada Name[he]=שאילתה Name[hi]=क्वैरी Name[hne]=क्वैरी Name[hu]=Felkérés Name[ia]=Requesta +Name[is]=Fyrirspurn Name[it]=Conversazione privata Name[kk]=Жеке әңгіме Name[km]=សំណួរ​ Name[ko]=쿼리 Name[lt]=Pokalbis Name[nb]=Spørring Name[nds]=Anfraag Name[nl]=Aanvraag Name[nn]=Samtalestart Name[oc]=Consulta Name[pa]=ਕਿਊਰੀ Name[pl]=Rozmowa Name[pt]=Procura Name[pt_BR]=Consulta Name[ro]=Interogare Name[ru]=Запрос Name[si]=විමසුම Name[sk]=Otázka Name[sl]=Poizvedba Name[sq]=Kërkesë Name[sr]=Упит Name[sr@ijekavian]=Упит Name[sr@ijekavianlatin]=Upit Name[sr@latin]=Upit Name[sv]=Fråga Name[tr]=Sorgu Name[ug]=سۈرۈشتۈر Name[uk]=Діалог Name[x-test]=xxQueryxx Name[zh_CN]=请求 Name[zh_TW]=通話階段(Query) Comment=Someone started a conversation (query) with you Comment[ar]=بدأ شخص ما محادثة (استعلام) معك Comment[bg]=Някой започна личен разговор с вас Comment[bs]=Neko je započeo razgovor (upit) sa vama Comment[ca]=Algú ha iniciat una conversa (query) amb vós Comment[ca@valencia]=Algú ha iniciat una conversa (query) amb vós Comment[cs]=Někdo s vámi zahájil rozhovor (dotaz) Comment[da]=Nogen startede en samtale (forespørgsel) med dig Comment[de]=Jemand hat ein Gespräch (Query) mit Ihnen begonnen Comment[el]=Κάποιος ξεκίνησε μια συζήτηση (ερώτηση) μαζί σας Comment[en_GB]=Someone started a conversation (query) with you Comment[es]=Alguien empezó una conversación (consulta) con usted Comment[et]=Keegi alustas sinuga vestlust (esitas päringu) Comment[eu]=Norbait zurekin elkarrizketan (kontsulta) hasi da Comment[fi]=Joku aloitti keskustelun kanssasi Comment[fr]=Une personne a commencé une discussion (query) avec vous Comment[ga]=Thosaigh duine éigin comhrá (iarratas) leat Comment[gl]=Alguén comezou unha conversa privada contigo Comment[he]=מישהו יזם שיחה אתך (query) Comment[hu]=Valaki beszélgetést kezdeményezett Önnel Comment[it]=Qualcuno ha avviato una conversazione privata (query) con te Comment[kk]=Біреу Сізбен (жеке) әңгіме бастады Comment[km]=មាន​នរណា​ម្នាក់​បាន​ចាប់ផ្ដើម​ការ​សន្ទនា (សំណួរ) ជាមួយ​អ្នក Comment[ko]=누군가가 쿼리 메시지를 보내 옴 Comment[lt]=Kažkas pradėjo su jumis pokalbį Comment[nb]=Noen startet en samtale (spørring) med deg Comment[nds]=Een hett en Klöönsnack mit Di anfungen ("query") Comment[nl]=Iemand begon een conversatie (aanvraag) met u Comment[nn]=Nokon starta ei samtale (ei spørjing) med deg Comment[pa]=ਕੋਈ ਤੁਹਾਡੇ ਨਾਲ ਗੱਲ (ਕਿਊਰੀ) ਸ਼ੁਰੂ ਕਰਨੀ ਚਾਹੁੰਦਾ ਹੈ Comment[pl]=Ktoś rozpoczął konwersację (rozmowę) z tobą Comment[pt]=Alguém iniciou uma conversa (procura) consigo Comment[pt_BR]=Alguém começou a conversa (consulta) com você Comment[ro]=Cineva a pornit o conversație (interogare) cu dumneavoastră Comment[ru]=Кто-то начал диалог с вами Comment[si]=යමෙක් ඔබ සමග කතා බහක් (විමසුමක්) අරඹන ලදී Comment[sk]=Niekto začal s vami konverzáciu Comment[sl]=Nekdo je začel pogovor (poizvedbo) z vami Comment[sq]=Dikush ka nisur një bisedim (kërkesë) për ju Comment[sr]=Неко је започео разговор (упит) са вама Comment[sr@ijekavian]=Неко је започео разговор (упит) са вама Comment[sr@ijekavianlatin]=Neko je započeo razgovor (upit) sa vama Comment[sr@latin]=Neko je započeo razgovor (upit) sa vama Comment[sv]=Någon startade en konversation med dig (ställde en fråga till dig) Comment[tr]=Birisi sizinle sohbet başlattı Comment[uk]=Хтось почав розмову (діалог) з вами Comment[x-test]=xxSomeone started a conversation (query) with youxx Comment[zh_CN]=有人向您发起了会话(请求) Comment[zh_TW]=有人啟動了一個與您的通話階段 Action=None [Event/kick] Name=Kick Name[ar]=طرد Name[bg]=Изритване Name[bs]=Izbaci Name[ca]=Expulsió Name[ca@valencia]=Expulsió Name[cs]=Vykopnutí Name[da]=Spark ud Name[de]=Kick Name[el]=Απομάκρυνση Name[en_GB]=Kick Name[es]=Expulsar Name[et]=Väljaviskamine Name[eu]=Kanporatu Name[fi]=Ulosheitto Name[fr]=Expulser Name[ga]=Ciceáil Name[gl]=Expulsión Name[he]=בעיטה Name[hi]=किक Name[hne]=किक Name[hu]=Kirúgás +Name[is]=Spark Name[it]=Espulsione Name[kk]=Тепкін Name[km]=ទាត់ចេញ Name[ko]=킥 Name[lt]=Išspirtas Name[nb]=Spark Name[nds]=Rutsmeten Name[nl]=Kick Name[nn]=Utsparking Name[oc]=Kick Name[pa]=ਕਿੱਕ Name[pl]=Wyrzuć Name[pt]=Kick Name[pt_BR]=Expulsar Name[ro]=Dat afară Name[ru]=Выкинуть Name[si]=පාපහර Name[sk]=Vykopnúť Name[sl]=Brca Name[sq]=Përzëre Name[sr]=Избачени Name[sr@ijekavian]=Избачени Name[sr@ijekavianlatin]=Izbačeni Name[sr@latin]=Izbačeni Name[sv]=Sparka ut Name[tr]=Kov Name[uk]=Стусан Name[x-test]=xxKickxx Name[zh_CN]=驱逐 Name[zh_TW]=踢出 Comment=Someone kicked you out of a channel Comment[ar]=طُرِد شخص ما من قناة Comment[bg]=Някой ви изрита от канала Comment[bs]=Neko vas je izbacio sa kanala Comment[ca]=Algú us ha expulsat d'un canal Comment[ca@valencia]=Algú vos ha expulsat d'un canal Comment[cs]=Někdo vás vykopl z kanálu Comment[da]=Nogen sparkede dig ud af kanalen Comment[de]=Jemand hat Sie aus einem Kanal geworfen Comment[el]=Κάποιος σας απομάκρυνε από ένα κανάλι Comment[en_GB]=Someone kicked you out of a channel Comment[es]=Alguien le ha expulsado de un canal Comment[et]=Keegi viskas su kanalilt välja Comment[eu]=Norbaitek kanal batetik kanporatu zaitu Comment[fi]=Joku heitti sinut kanavalta ulos Comment[fr]=Une personne vous a expulsé du canal Comment[ga]=Chiceáil duine éigin thú amach as cainéal Comment[gl]=Foi expulsado da canle por alguén Comment[he]=מישהו בעט אותך מערוץ Comment[hu]=Valaki kirúgta önt egy csatornáról +Comment[is]=Einhver sparkaði þér út af rás Comment[it]=Qualcuno ti ha espulso da un canale Comment[kk]=Біреу Сізді арнадан шығарып жіберді Comment[km]=មាន​នរណាម្នាក់​បាន​ទាត់អ្នក​ចេញ​ពី​ប៉ុស្ដិ៍ Comment[ko]=채널에서 킥당함 Comment[lt]=Kažkas jus išspyrė iš kanalo Comment[nb]=Noen sparket deg ut av en kanal Comment[nds]=Een hett Di ut en Kanaal smeten Comment[nl]=Iemand heeft u van het kanaal geknikkerd Comment[nn]=Noko sparka deg ut av ein kanal Comment[pa]=ਕਿਸੇ ਨੇ ਤੁਹਾਨੂੰ ਇੱਕ ਚੈਨਲ ਵਿੱਚੋਂ ਕਿੱਕ ਮਾਰੀ ਹੈ Comment[pl]=Ktoś wyrzucił cię z kanału Comment[pt]=Alguém o expulsou de um canal Comment[pt_BR]=Alguém expulsou você de um canal Comment[ro]=Cineva v-a dat afară dintr-un canal Comment[ru]=Кто-то выкинул вас с канала Comment[si]=නාලිකාවෙන් එලියට යැවීමට යමෙක් ඔබට පාපහරක් දෙන ලදී Comment[sk]=Niekto vás vykopol z kanála Comment[sl]=Nekdo vas je brcnil iz kanala Comment[sq]=Dikush ju nxorri jashtë një kanali Comment[sr]=Неко вас је избацио са канала Comment[sr@ijekavian]=Неко вас је избацио са канала Comment[sr@ijekavianlatin]=Neko vas je izbacio sa kanala Comment[sr@latin]=Neko vas je izbacio sa kanala Comment[sv]=Någon sparkade ut dig från en kanal Comment[tr]=Birisi sizi odadan kovdu Comment[uk]=Хтось виштурхав вас з каналу Comment[x-test]=xxSomeone kicked you out of a channelxx Comment[zh_CN]=有人将您驱逐出了一个频道 Comment[zh_TW]=有人把您踢出了頻道 Action=None [Event/connectionFailure] Name=Connection failure Name[ar]=فشل الاتّصال Name[bg]=Неуспешно свързване Name[bs]=Greška veze Name[ca]=Error de connexió Name[ca@valencia]=Error de connexió Name[cs]=Selhání připojení Name[da]=Forbindelsesfejl Name[de]=Verbindungsfehler Name[el]=Αποτυχία σύνδεσης Name[en_GB]=Connection failure Name[es]=Fallo de la conexión Name[et]=Ühenduse viga Name[eu]=Konexioak huts egin du Name[fi]=Yhteysvirhe Name[fr]=Échec de connexion Name[ga]=Theip ar cheangal Name[gl]=Fallo na conexión Name[he]=שגיאת התחברות Name[hne]=कनेक्सन फेल Name[hu]=Kapcsolódási hiba Name[ia]=fallimento de connexion +Name[is]=Tengivilla Name[it]=Errore di connessione Name[kk]=Қосылым жаңылысы Name[km]=បរាជ័យ​ការ​តភ្ជាប់ Name[ko]=연결 실패 Name[lt]=Nepavyko prisijungti Name[nb]=Tilkobling mislykket Name[nds]=Tokoppelfehler Name[nl]=Verbindingsfout Name[nn]=Feil ved tilkopling Name[pa]=ਕੁਨੈਕਸ਼ਨ ਫੇਲ੍ਹ ਹੋਇਆ Name[pl]=Nieudane połączenie Name[pt]=Erro na ligação Name[pt_BR]=Falha na conexão Name[ro]=Eșec conexiune Name[ru]=Ошибка соединения Name[si]=සබඳතාව දෝශ සහගතය Name[sk]=Pripojenie zlyhalo Name[sl]=Napaka povezave Name[sq]=Dështim i lidhjes Name[sr]=Грешка везе Name[sr@ijekavian]=Грешка везе Name[sr@ijekavianlatin]=Greška veze Name[sr@latin]=Greška veze Name[sv]=Uppkopplingsfel Name[tr]=Bağlantı hatası Name[ug]=باغلىنىش مەغلۇپ بولدى Name[uk]=Невдала спроба зв’язку Name[x-test]=xxConnection failurexx Name[zh_CN]=连接失败 Name[zh_TW]=連線失敗 Comment=Failed to connect to server Comment[ar]=خطأ في الاتّصال إلى الخادوم Comment[bg]=Неуспех при свързване към сървър Comment[bs]=Neuspjelo povezivanje sa serverom Comment[ca]=Ha fallat en connectar al servidor Comment[ca@valencia]=Ha fallat en connectar al servidor Comment[cs]=Chyba při připojení k serveru Comment[da]=Forbindelse til server mislykkedes Comment[de]=Fehler beim Verbinden zum Server Comment[el]=Η σύνδεση με τον εξυπηρετητή απέτυχε Comment[en_GB]=Failed to connect to server Comment[es]=Ha fallado la conexión al servidor Comment[et]=Ühendumine serveriga nurjus Comment[eu]=Huts egin du zerbitzariarekin konektatzean Comment[fi]=Palvelimeen yhdistäminen epäonnistui Comment[fr]=Échec de la connexion au serveur Comment[ga]=Theip ar cheangal le freastalaí Comment[gl]=Non foi posíbel conectar co servidor Comment[he]=החיבור לשרת נכשל Comment[hne]=सर्वर से जुड़े मं फेल Comment[hu]=Nem sikerült csatlakozni a kiszolgálóhoz +Comment[is]=Gat ekki tengst þjóninum Comment[it]=Connessione al server non riuscita Comment[kk]=Серверіне қосылу болмады Comment[km]=បរាជ័យ​ក្នុង​ការ​តភ្ជាប់​ទៅ​ម៉ាស៊ីន​បម្រើ Comment[ko]=서버에 연결할 수 없음 Comment[lt]=Nepavyko prisijungti prie serverio Comment[nb]=Klaarte ikke å koble til tjener Comment[nds]=Tokoppeln na Server is fehlslaan Comment[nl]=Verbinden met de server is mislukt Comment[nn]=Klarte ikkje kopla til tenaren Comment[pa]=ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ Comment[pl]=Nieudane połączenie z serwerem Comment[pt]=Não foi possível ligar ao servidor Comment[pt_BR]=Falha ao conectar-se ao servidor Comment[ro]=Imposibil de conectat la server Comment[ru]=Ошибка соединения с сервером. Comment[si]=සේවාදායකයට සම්බන්ධ වීමට නොහැකි විය Comment[sk]=Zlyhalo pripojenie na server Comment[sl]=Ni se bilo mogoče povezati s strežnikom Comment[sq]=Dështuam në lidhjen me serverin Comment[sr]=Неуспело повезивање са сервером Comment[sr@ijekavian]=Неуспјело повезивање са сервером Comment[sr@ijekavianlatin]=Neuspjelo povezivanje sa serverom Comment[sr@latin]=Neuspelo povezivanje sa serverom Comment[sv]=Misslyckades koppla upp till server Comment[tr]=Sunucuya bağlanılamadı Comment[uk]=Не вдалося з’єднатися з сервером Comment[x-test]=xxFailed to connect to serverxx Comment[zh_CN]=连接服务器失败 Comment[zh_TW]=連線到伺服器失敗 Action=Taskbar [Event/channelJoin] Name=You joined a channel Name[ar]=انضممت إلى قناة Name[bg]=Вие се присъединихте към канал Name[bs]=Pridružili ste se kanalu Name[ca]=Heu entrat a un canal Name[ca@valencia]=Heu entrat a un canal Name[cs]=Připojili jste se ke kanálu Name[da]=Du gik med i en kanal Name[de]=Sie haben einen Kanal betreten Name[el]=Συνδεθήκατε σε ένα κανάλι Name[en_GB]=You joined a channel Name[es]=Se ha unido a un canal Name[et]=Sa ühinesid kanaliga Name[eu]=Kanal batekin bat egin duzu Name[fi]=Liityit kanavalle Name[fr]=Vous avez rejoint un canal Name[ga]=Chuaigh tú le cainéal Name[gl]=Uniuse a unha canle Name[he]=אתה הצטרפת אל חדר Name[hu]=Ön belépett egy csatornába +Name[is]=Þú tengdist rás Name[it]=Sei entrato in un canale Name[kk]=Арнаға кірдіңіз Name[km]=អ្នក​បាន​ចូល​រួម​ប៉ុស្ដិ៍ Name[ko]=채널에 입장함 Name[lt]=Prisijungėte prie kanalo Name[nb]=Du ble med i en kanal Name[nds]=Du büst na en Kanaal tokamen Name[nl]=U nam deel aan een kanaal Name[nn]=Du vart med i ein kanal Name[pa]=ਤੁਸੀਂ ਇੱਕ ਚੈਨਲ ਵਿੱਚ ਦਾਖਲ ਹੋਏ Name[pl]=Dołączono do kanału Name[pt]=Você juntou-se a um canal Name[pt_BR]=Você entrou em um canal Name[ro]=V-ați alăturat unui canal Name[ru]=Вы зашли на канал Name[si]=ඔබ නාලිකාවකට සම්බන්ධ විය Name[sk]=Pripojili ste sa do kanála Name[sl]=Pridružili ste se kanalu Name[sq]=Ju hytë në një kanal Name[sr]=Придружили сте се каналу Name[sr@ijekavian]=Придружили сте се каналу Name[sr@ijekavianlatin]=Pridružili ste se kanalu Name[sr@latin]=Pridružili ste se kanalu Name[sv]=Du gick med i en kanal Name[tr]=Bir odaya girdiniz Name[uk]=Ви увійшли на канал Name[x-test]=xxYou joined a channelxx Name[zh_CN]=您加入了一个频道 Name[zh_TW]=您加入了一個頻道 Comment=You joined a channel Comment[ar]=انضممت إلى قناة Comment[bg]=Вие се присъединихте към канал Comment[bs]=Pridružili ste se kanalu Comment[ca]=Heu entrat a un canal Comment[ca@valencia]=Heu entrat a un canal Comment[cs]=Připojili jste se ke kanálu Comment[da]=Du gik med i en kanal Comment[de]=Sie haben einen Kanal betreten Comment[el]=Συνδεθήκατε σε ένα κανάλι Comment[en_GB]=You joined a channel Comment[es]=Se ha unido a un canal Comment[et]=Sa ühinesid kanaliga Comment[eu]=Kanal batekin bat egin duzu Comment[fi]=Liityit kanavalle Comment[fr]=Vous avez rejoint un canal Comment[ga]=Chuaigh tú le cainéal Comment[gl]=Uniuse a unha canle Comment[he]=אתה הצטרפת אל חדר Comment[hu]=Ön belépett egy csatornába +Comment[is]=Þú tengdist rás Comment[it]=Sei entrato in un canale Comment[kk]=Арнаға кірдіңіз Comment[km]=អ្នក​បាន​ចូល​រួម​ប៉ុស្ដិ៍ Comment[ko]=채널에 입장함 Comment[lt]=Prisijungėte prie kanalo Comment[nb]=Du ble med i en kanal Comment[nds]=Du büst na en Kanaal tokamen Comment[nl]=U nam deel aan een kanaal Comment[nn]=Du vart med i ein kanal Comment[pa]=ਤੁਸੀਂ ਚੈਨਲ ਵਿੱਚ ਦਾਖਲ ਹੋਏ Comment[pl]=Dołączono do kanału Comment[pt]=Você juntou-se a um canal Comment[pt_BR]=Você entrou em um canal Comment[ro]=V-ați alăturat unui canal Comment[ru]=Вы зашли на канал Comment[si]=ඔබ නාලිකාවකට සම්බන්ධ විය Comment[sk]=Pripojili ste sa do kanála Comment[sl]=Pridružili ste se kanalu Comment[sq]=Ju hytë në një kanal Comment[sr]=Придружили сте се каналу Comment[sr@ijekavian]=Придружили сте се каналу Comment[sr@ijekavianlatin]=Pridružili ste se kanalu Comment[sr@latin]=Pridružili ste se kanalu Comment[sv]=Du gick med i en kanal Comment[tr]=Bir odaya girdiniz Comment[uk]=Ви увійшли на канал Comment[x-test]=xxYou joined a channelxx Comment[zh_CN]=您加入了一个频道 Comment[zh_TW]=您加入了一個頻道 Action=Taskbar [Event/dccChat] Name=DCC Chat Name[ar]=محادثة دي​سي​سي Name[bg]=DCC разговор Name[bs]=DCC Chat Name[ca]=Xat DCC Name[ca@valencia]=Xat DCC Name[cs]=DCC pokec Name[da]=DCC-chat Name[de]=DCC-Chat Name[el]=Συζήτηση DCC Name[en_GB]=DCC Chat Name[es]=Charla DCC Name[et]=DCC vestlus Name[eu]=DCC txata Name[fi]=DCC-keskustelu Name[fr]=Conversation « DCC » Name[ga]=Comhrá DCC Name[gl]=Conversa DCC Name[he]=שיחת DCC Name[hi]=डीसीसी गपशप Name[hne]=डीसीसी गपसप Name[hu]=DCC-csevegés +Name[is]=DCC-spjall Name[it]=Chat DCC Name[kk]=DCC чат-әңгімесі Name[km]=ជជែក​កំសាន្ត DCC Name[ko]=DCC 대화 Name[lt]=DCC pokalbis Name[nb]=DCC-prat Name[nds]=DCC-Klönen Name[nl]=DCC-gesprek Name[nn]=DCC-prat Name[pa]=DCC ਗੱਲਬਾਤ Name[pl]=Rozmowa DCC Name[pt]=Conversa DCC Name[pt_BR]=Bate-papo DCC Name[ro]=Discuție DCC Name[ru]=Чат DCC Name[si]=DCC පිළිසඳර Name[sk]=DCC Chat Name[sl]=Klepet DCC Name[sq]=DCC Chat Name[sr]=ДЦЦ ћаскање Name[sr@ijekavian]=ДЦЦ ћаскање Name[sr@ijekavianlatin]=DCC ćaskanje Name[sr@latin]=DCC ćaskanje Name[sv]=Chatt via direktkommunikation Name[tr]=DCC Sohbeti Name[uk]=DCC-балачка Name[x-test]=xxDCC Chatxx Name[zh_CN]=DCC 聊天 Name[zh_TW]=DCC 聊天階段 Comment=Someone started a DCC chat with you Comment[ar]=بدأ شخص ما محادثة دي​سي​سي معك Comment[bg]=Някой е започнал разговор с вас в DCC Comment[bs]=Neko je započeo DCC ćaskanje sa vama Comment[ca]=Algú ha iniciat un xat DCC amb vós Comment[ca@valencia]=Algú ha iniciat un xat DCC amb vós Comment[cs]=Někdo si s vámi chce pokecat přes DCC Comment[da]=Nogen startede en DCC-chat med dig Comment[de]=Jemand hat einen DCC-Chat mit Ihnen begonnen Comment[el]=Κάποιος ξεκίνησε μια συζήτηση DCC μαζί σας Comment[en_GB]=Someone started a DCC chat with you Comment[es]=Alguien empezó una charla de tipo DCC con usted Comment[et]=Keegi alustas sinuga DCC vestlust Comment[eu]=Norbait zurekin DCC txatean hasi da Comment[fi]=Joku aloitti DCC-keskustelun kanssasi Comment[fr]=Une personne a démarré une conversation « DCC » avec vous Comment[ga]=Thosaigh duine éigin comhrá DCC leat Comment[gl]=Alguén comezou unha conversa DCC contigo Comment[he]=מישהו התחיל שיחת DCC אתך Comment[hu]=Valaki DCC-csevegést kezdeményezett Önnel Comment[it]=Qualcuno ha avviato una conversazione DCC con te Comment[kk]=Біреу Сізбен DCC әңгімені бастады Comment[km]=មាន​នរណា​ម្នាក់​បាន​ចាប់ផ្ដើម​ការ​ជជែក​កំសាន្ដ DCC ជាមួយ​អ្នក Comment[ko]=누군가가 DCC 대화를 시작함 Comment[lt]=Kažkas su jumis pradėjo DCC pokalbį Comment[nb]=Noen startet en DCC-prat med deg Comment[nds]=Een hett en DCC-Klöönsnack mit Di anfungen Comment[nl]=Iemand begon een DCC-gesprek met u Comment[nn]=Nokon starta ein DCC-prat med deg Comment[pl]=Ktoś rozpoczął rozmowę DCC z tobą Comment[pt]=Alguém iniciou uma conversa DCC consigo Comment[pt_BR]=Alguém iniciou um bate-papo DCC com você Comment[ro]=Cineva a pornit o discuție DCC cu dumneavoastră Comment[ru]=Кто-то начал DCC-разговор с вами. Comment[si]=යමෙක් ඔබත් සමග DCC පිළිසඳරක් අරඹන ලදී Comment[sk]=Niekto spustil DCC chat s vami Comment[sl]=Nekdo je z vami začel klepet DCC Comment[sq]=Dikush nisi një bisedë DCC me ju Comment[sr]=Неко је започео ДЦЦ ћаскање са вама Comment[sr@ijekavian]=Неко је започео ДЦЦ ћаскање са вама Comment[sr@ijekavianlatin]=Neko je započeo DCC ćaskanje sa vama Comment[sr@latin]=Neko je započeo DCC ćaskanje sa vama Comment[sv]=Någon startade en chatt via direktkommunikation med dig Comment[tr]=Birisi sizinle DCC sohbeti başlattı Comment[uk]=Хтось розпочав DCC-балачку з вами Comment[x-test]=xxSomeone started a DCC chat with youxx Comment[zh_CN]=有人与您开始了一个 DCC 聊天会话 Comment[zh_TW]=有人啟動了與您的 DCC 聊天階段 Action=None diff --git a/data/org.kde.konversation.desktop b/data/org.kde.konversation.desktop index 709d1149..57c8b618 100755 --- a/data/org.kde.konversation.desktop +++ b/data/org.kde.konversation.desktop @@ -1,121 +1,123 @@ [Desktop Entry] Type=Application Exec=konversation -qwindowtitle %c %u Icon=konversation X-DocPath=konversation/index.html MimeType=x-scheme-handler/irc;x-scheme-handler/ircs; GenericName=IRC Client GenericName[ar]=عميل آي‌آر‌سي GenericName[be]=Кліент IRC GenericName[bg]=IRC клиент GenericName[bs]=IRC klijent GenericName[ca]=Client d'IRC GenericName[ca@valencia]=Client d'IRC GenericName[cs]=IRC klient GenericName[da]=IRC-klient GenericName[de]=IRC-Programm GenericName[el]=Πελάτης IRC GenericName[en_GB]=IRC Client GenericName[es]=Cliente de IRC GenericName[et]=IRC klient GenericName[eu]=IRC bezeroa GenericName[fi]=IRC-keskustelu GenericName[fr]=Client IRC GenericName[ga]=Cliant IRC GenericName[gl]=Cliente de IRC GenericName[he]=לקוח IRC GenericName[hne]=आईआरसी क्लायंट GenericName[hu]=IRC-kliens +GenericName[is]=IRC-forrit GenericName[it]=Client IRC GenericName[kk]=IRC клиенті GenericName[km]=ម៉ាស៊ីន​ភ្ញៀវ IRC GenericName[ko]=IRC 클라이언트 GenericName[lt]=IRC klientas GenericName[mr]=IRC ग्राहक GenericName[nb]=IRC-klient GenericName[nds]=IRC-Client GenericName[nl]=IRC-client GenericName[nn]=IRC-klient GenericName[pa]=IRC ਕਲਾਇਟ GenericName[pl]=Klient IRC GenericName[pt]=Cliente de IRC GenericName[pt_BR]=Cliente IRC GenericName[ro]=Client IRC GenericName[ru]=Клиент IRC GenericName[si]=IRC GenericName[sk]=IRC Client GenericName[sl]=Odjemalec za IRC GenericName[sq]=IRC Klient GenericName[sr]=ИРЦ клијент GenericName[sr@ijekavian]=ИРЦ клијент GenericName[sr@ijekavianlatin]=IRC klijent GenericName[sr@latin]=IRC klijent GenericName[sv]=IRC-klient GenericName[tr]=IRC İstemcisi GenericName[ug]=IRC خېرىدارى GenericName[uk]=Клієнт IRC GenericName[x-test]=xxIRC Clientxx GenericName[zh_CN]=IRC 客户端 GenericName[zh_TW]=IRC 客戶端程式 Terminal=false Name=Konversation Name[ar]=محادثك Name[be]=Konversation Name[bg]=Konversation Name[bs]=Konverzacija Name[ca]=Konversation Name[ca@valencia]=Konversation Name[cs]=Konversation Name[da]=Konversation Name[de]=Konversation Name[el]=Konversation Name[en_GB]=Konversation Name[eo]=Konversation Name[es]=Konversation Name[et]=Konversation Name[eu]=Konversation Name[fi]=Konversation Name[fr]=Konversation Name[ga]=Konversation Name[gl]=Konversation Name[he]=Konversation Name[hi]=कनवर्सेसन Name[hne]=कनवर्सेसन Name[hr]=Konversation Name[hu]=Konversation +Name[is]=Konversation Name[it]=Konversation Name[kk]=Konversation Name[km]=Konversation Name[ko]=Konversation Name[lt]=Konversation Name[mr]=कंव्हर्झेशन Name[nb]=Konversation Name[nds]=Konversation Name[nl]=Konversation Name[nn]=Konversation Name[pa]=ਕੰਨਵਰਸ਼ੇਸ਼ਨ Name[pl]=Konversation Name[pt]=Konversation Name[pt_BR]=Konversation Name[ro]=Konversație Name[ru]=Konversation Name[si]=සාකච්ඡාව Name[sk]=Konversation Name[sl]=Konversation Name[sq]=Konversation Name[sr]=Конверзација Name[sr@ijekavian]=Конверзација Name[sr@ijekavianlatin]=Konverzacija Name[sr@latin]=Konverzacija Name[sv]=Konversation Name[tr]=Konversation Name[ug]=Konversation Name[uk]=Konversation Name[x-test]=xxKonversationxx Name[zh_CN]=Konversation Name[zh_TW]=Konversation Categories=Qt;KDE;Network;IRCClient; X-KDE-ServiceTypes=DBUS/InstantMessenger X-DBUS-StartupType=Unique X-DBUS-ServiceName=org.kde.konversation StartupNotify=true diff --git a/src/commit.h b/src/commit.h index de4af98a..a37c073e 100644 --- a/src/commit.h +++ b/src/commit.h @@ -1,4 +1,4 @@ // This COMMIT number is added to version string to be used as "patch level" #ifndef COMMIT -#define COMMIT 5105 +#define COMMIT 5106 #endif diff --git a/src/connectionmanager.cpp b/src/connectionmanager.cpp index d2e5e7af..bf470774 100644 --- a/src/connectionmanager.cpp +++ b/src/connectionmanager.cpp @@ -1,709 +1,712 @@ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ /* Copyright (C) 2008 Eike Hein <hein@kde.org> */ #include "connectionmanager.h" #include "connectionsettings.h" #include "serversettings.h" #include "servergroupsettings.h" #include "config/preferences.h" #include "application.h" #include "mainwindow.h" #include "statuspanel.h" #include <QRegExp> #include <QDebug> #include <KLocalizedString> #include <KMessageBox> ConnectionManager::ConnectionManager(QObject* parent) : QObject(parent), m_overrideAutoReconnect (false) { // Reenable the check again when it works reliably for all backends // if (Solid::Networking::status() != Solid::Networking::Connected) // m_overrideAutoReconnect = true; connect(this, &ConnectionManager::requestReconnect, this, &ConnectionManager::handleReconnect); } ConnectionManager::~ConnectionManager() { } void ConnectionManager::connectTo(Konversation::ConnectionFlag flag, const QString& target, const QString& port, const QString& password, const QString& nick, const QString& channel, bool useSSL) { ConnectionSettings settings; if (target.startsWith(QLatin1String("irc://")) || target.startsWith(QLatin1String("ircs://"))) decodeIrcUrl(target, settings); else { decodeAddress(target, settings); Konversation::ServerSettings server = settings.server(); if (!port.isEmpty()) server.setPort(port.toInt()); if (!password.isEmpty()) server.setPassword(password); if (useSSL) server.setSSLEnabled(true); settings.setServer(server); if (!nick.isEmpty()) settings.setInitialNick(nick); if (!channel.isEmpty()) { Konversation::ChannelSettings channelSettings(channel); Konversation::ChannelList cl; cl << channelSettings; settings.setOneShotChannelList(cl); } } connectTo(flag, settings); } void ConnectionManager::connectTo(Konversation::ConnectionFlag flag, int serverGroupId) { ConnectionSettings settings; Konversation::ServerGroupSettingsPtr serverGroup; serverGroup = Preferences::serverGroupById(serverGroupId); if (serverGroup) { settings.setServerGroup(serverGroup); if (serverGroup->serverList().size() > 0) settings.setServer(serverGroup->serverList()[0]); } connectTo(flag, settings); } void ConnectionManager::connectTo(Konversation::ConnectionFlag flag, const QList<QUrl>& list) { QMap<QString,Konversation::ChannelList> serverChannels; QMap<QString,ConnectionSettings> serverConnections; QList<QUrl>::ConstIterator it = list.constBegin(); QList<QUrl>::ConstIterator end = list.constEnd(); for (; it != end; ++it) { ConnectionSettings settings; decodeIrcUrl(it->url(), settings); qDebug() << settings.name() << " - " << settings.server().host() << settings.server().port() << settings.server().password() << " - " << (settings.serverGroup()?settings.serverGroup()->name():QString()); QString sname = (settings.serverGroup() ? settings.serverGroup()->name() : (settings.server().host() + QLatin1Char(':') + QString::number(settings.server().port()))); if (!serverChannels.contains(sname)) serverConnections[sname] = settings; serverChannels[sname] += settings.oneShotChannelList(); } // Perform the connection. QMap<QString,Konversation::ChannelList>::ConstIterator s_i = serverChannels.constBegin(); for (; s_i != serverChannels.constEnd(); ++s_i) { serverConnections[s_i.key()].setOneShotChannelList(s_i.value()); connectTo(flag, serverConnections[s_i.key()]); } } void ConnectionManager::connectTo(Konversation::ConnectionFlag flag, ConnectionSettings settings) { if (!settings.isValid()) return; emit closeServerList(); if (flag != Konversation::CreateNewConnection && reuseExistingConnection(settings, (flag == Konversation::PromptToReuseConnection))) { return; } IdentityPtr identity = settings.identity(); if (!identity || !validateIdentity(identity)) return; Application* konvApp = Application::instance(); MainWindow* mainWindow = konvApp->getMainWindow(); Server* server = new Server(this, settings); enlistConnection(server->connectionId(), server); connect(server, &Server::destroyed, this, &ConnectionManager::delistConnection); connect(server, SIGNAL(connectionStateChanged(Server*,Konversation::ConnectionState)), this, SLOT(handleConnectionStateChange(Server*,Konversation::ConnectionState))); connect(server, &Server::awayState, this, &ConnectionManager::connectionChangedAwayState); connect(server, SIGNAL(nicksNowOnline(Server*,QStringList,bool)), mainWindow, SLOT(setOnlineList(Server*,QStringList,bool))); connect(server, SIGNAL(awayInsertRememberLine(Server*)), mainWindow, SIGNAL(triggerRememberLines(Server*))); connect(server, SIGNAL(multiServerCommand(QString,QString)), konvApp, SLOT(sendMultiServerCommand(QString,QString))); } void ConnectionManager::enlistConnection(int connectionId, Server* server) { m_connectionList.insert(connectionId, server); emit connectionListChanged(); } void ConnectionManager::delistConnection(int connectionId) { m_connectionList.remove(connectionId); emit connectionListChanged(); } void ConnectionManager::handleConnectionStateChange(Server* server, Konversation::ConnectionState state) { emit connectionChangedState(server, state); int identityId = server->getIdentity()->id(); if (state == Konversation::SSConnected) { m_overrideAutoReconnect = false; if (!m_activeIdentities.contains(identityId)) { m_activeIdentities.insert(identityId); emit identityOnline(identityId); } } else if (state != Konversation::SSConnecting) { if (m_activeIdentities.contains(identityId)) { m_activeIdentities.remove(identityId); emit identityOffline(identityId); } } if (state == Konversation::SSInvoluntarilyDisconnected && !m_overrideAutoReconnect) { // The asynchronous invocation of handleReconnect() makes sure that // connectionChangedState() is emitted and delivered before it runs // (and causes the next connection state change to occur). emit requestReconnect(server); } else if (state == Konversation::SSInvoluntarilyDisconnected && m_overrideAutoReconnect) { server->getStatusView()->appendServerMessage(i18n("Info"), i18n ("Network is down, will reconnect automatically when it is back up.")); } } void ConnectionManager::handleReconnect(Server* server) { if (!Preferences::self()->autoReconnect() || m_overrideAutoReconnect) return; ConnectionSettings settings = server->getConnectionSettings(); uint reconnectCount = Preferences::self()->reconnectCount(); // For server groups, one iteration over their server list shall count as one // connection attempt. if (settings.serverGroup()) reconnectCount = reconnectCount * settings.serverGroup()->serverList().size(); if (reconnectCount == 0 || settings.reconnectCount() < reconnectCount) { if (settings.serverGroup() && settings.serverGroup()->serverList().size() > 1) { Konversation::ServerList serverList = settings.serverGroup()->serverList(); int index = serverList.indexOf(settings.server()); int size = serverList.size(); if (index == size - 1 || index == -1) settings.setServer(serverList[0]); else if (index < size - 1) settings.setServer(serverList[index+1]); server->setConnectionSettings(settings); server->getStatusView()->appendServerMessage(i18n("Info"), i18np( "Trying to connect to %2 (port %3) in 1 second.", "Trying to connect to %2 (port %3) in %1 seconds.", Preferences::self()->reconnectDelay(), settings.server().host(), QString::number(settings.server().port()))); } else { server->getStatusView()->appendServerMessage(i18n("Info"), i18np( "Trying to reconnect to %2 (port %3) in 1 second.", "Trying to reconnect to %2 (port %3) in %1 seconds.", Preferences::self()->reconnectDelay(), settings.server().host(), QString::number(settings.server().port()))); } server->getConnectionSettings().incrementReconnectCount(); server->connectToIRCServerIn(Preferences::self()->reconnectDelay()); } else { server->getConnectionSettings().setReconnectCount(0); server->getStatusView()->appendServerMessage(i18n("Error"), i18n("Reconnection attempts exceeded.")); } } void ConnectionManager::quitServers() { QMap<int, Server*>::ConstIterator it; for (it = m_connectionList.constBegin(); it != m_connectionList.constEnd(); ++it) it.value()->quitServer(); } void ConnectionManager::reconnectServers() { QMap<int, Server*>::ConstIterator it; for (it = m_connectionList.constBegin(); it != m_connectionList.constEnd(); ++it) it.value()->reconnectServer(); } void ConnectionManager::decodeIrcUrl(const QString& url, ConnectionSettings& settings) { if (!url.startsWith(QLatin1String("irc://")) && !url.startsWith(QLatin1String("ircs://"))) return; QString mangledUrl = url; mangledUrl.remove(QRegExp(QStringLiteral("^ircs?:/+"))); if (mangledUrl.isEmpty()) return; // Parsing address and channel. QStringList mangledUrlSegments; mangledUrlSegments = mangledUrl.split(QLatin1Char('/'), QString::KeepEmptyParts); // Check for ",isserver". if (mangledUrlSegments[0].contains(QLatin1Char(','))) { QStringList addressSegments; bool checkIfServerGroup = true; addressSegments = mangledUrlSegments[0].split(QLatin1Char(','), QString::KeepEmptyParts); if (addressSegments.filter(QStringLiteral("isserver")).size() > 0) checkIfServerGroup = false; decodeAddress(addressSegments[0], settings, checkIfServerGroup); } else decodeAddress(mangledUrlSegments[0], settings); QString channel; Konversation::ChannelSettings channelSettings; // Grabbing channel from in front of potential ?key=value parameters. if (mangledUrlSegments.size() > 1) channel = mangledUrlSegments[1].section(QLatin1Char('?'), 0, 0); if (!channel.isEmpty()) { // Add default prefix to channel if necessary. if (!channel.contains(QRegExp(QStringLiteral("^[#+&]{1}")))) channel = QLatin1Char('#') + channel; + // Qt already encoded |, we've forced # as well + channel = QUrl::fromPercentEncoding(channel.toUtf8()); + channelSettings.setName(channel); } // Parsing ?key=value parameters. QString parameterString; if (mangledUrlSegments.size() > 1) parameterString = mangledUrlSegments[1].section(QLatin1Char('?'), 1); if (parameterString.isEmpty() && mangledUrlSegments.size() > 2) parameterString = mangledUrlSegments[2]; if (!parameterString.isEmpty()) { QRegExp parameterCatcher; parameterCatcher.setPattern(QStringLiteral("pass=([^&]+)")); if (parameterCatcher.indexIn(parameterString) != -1) { Konversation::ServerSettings server = settings.server(); server.setPassword(parameterCatcher.cap(1)); settings.setServer(server); } parameterCatcher.setPattern(QStringLiteral("key=([^&]+)")); if (parameterCatcher.indexIn(parameterString) != -1) channelSettings.setPassword(parameterCatcher.cap(1)); } // Assigning channel. if (!channelSettings.name().isEmpty()) { Konversation::ChannelList cl; cl << channelSettings; settings.setOneShotChannelList(cl); } // Override SSL setting state with directive from URL. if (url.startsWith(QLatin1String("ircs://"))) { Konversation::ServerSettings server = settings.server(); server.setSSLEnabled(true); settings.setServer(server); } } void ConnectionManager::decodeAddress(const QString& address, ConnectionSettings& settings, bool checkIfServerGroup) { QString host; QString port = QStringLiteral("6667"); // Full-length IPv6 address with port // Example: RFC 2732 notation: [2001:0DB8:0000:0000:0000:0000:1428:57ab]:6666 // Example: Non-RFC 2732 notation: 2001:0DB8:0000:0000:0000:0000:1428:57ab:6666 if (address.count(QLatin1Char(':'))==8) { host = address.section(QLatin1Char(':'),0,-2).remove(QLatin1Char('[')).remove(QLatin1Char(']')); port = address.section(QLatin1Char(':'),-1); } // Full-length IPv6 address without port or not-full-length IPv6 address with port // Example: Without port, RFC 2732 notation: [2001:0DB8:0000:0000:0000:0000:1428:57ab] // Example: Without port, Non-RFC 2732 notation: 2001:0DB8:0000:0000:0000:0000:1428:57ab // Example: With port, RFC 2732 notation: [2001:0DB8::1428:57ab]:6666 else if (address.count(QLatin1Char(':'))>=4) { // Last segment does not end with ], but the next to last does; // Assume not-full-length IPv6 address with port // Example: [2001:0DB8::1428:57ab]:6666 if (address.section(QLatin1Char(':'),0,-2).endsWith(QLatin1Char(']')) && !address.section(QLatin1Char(':'),-1).endsWith(QLatin1Char(']'))) { host = address.section(QLatin1Char(':'),0,-2).remove(QLatin1Char('[')).remove(QLatin1Char(']')); port = address.section(QLatin1Char(':'),-1); } else { QString addressCopy = address; host = addressCopy.remove(QLatin1Char('[')).remove(QLatin1Char(']')); } } // IPv4 address or ordinary hostname with port // Example: IPv4 address with port: 123.123.123.123:6666 // Example: Hostname with port: irc.bla.org:6666 else if (address.count(QLatin1Char(':'))==1) { host = address.section(QLatin1Char(':'),0,-2); port = address.section(QLatin1Char(':'),-1); } else host = address; // Try to assign server group. if (checkIfServerGroup && Preferences::isServerGroup(host)) { // If host is found to be the name of a server group. int serverGroupId = Preferences::serverGroupIdsByName(host).first(); Konversation::ServerGroupSettingsPtr serverGroup; serverGroup = Preferences::serverGroupById(serverGroupId); settings.setServerGroup(serverGroup); if (serverGroup->serverList().size() > 0) settings.setServer(serverGroup->serverList()[0]); } else { QList<Konversation::ServerGroupSettingsPtr> groups = Preferences::serverGroupsByServer(host); if (!groups.isEmpty()) { // If the host is found to be part of a server group's server list. Konversation::ServerGroupSettingsPtr serverGroup = groups.first(); settings.setServerGroup(serverGroup); } Konversation::ServerSettings server; server.setHost(host); server.setPort(port.toInt()); settings.setServer(server); } } bool ConnectionManager::reuseExistingConnection(ConnectionSettings& settings, bool interactive) { Server* dupe = 0; ConnectionDupe dupeType; bool doReuse = true; Application* konvApp = Application::instance(); MainWindow* mainWindow = konvApp->getMainWindow(); QMap<int, Server*>::ConstIterator it; for (it = m_connectionList.constBegin(); it != m_connectionList.constEnd(); ++it) { if (it.value()->getServerGroup() && settings.serverGroup() && it.value()->getServerGroup() == settings.serverGroup()) { dupe = it.value(); dupeType = SameServerGroup; break; } } if (!dupe) { for (it = m_connectionList.constBegin(); it != m_connectionList.constEnd(); ++it) { if (it.value()->getConnectionSettings().server() == settings.server()) { dupe = it.value(); dupeType = SameServer; break; } } } if (dupe && interactive) { int result = KMessageBox::warningContinueCancel( mainWindow, i18n("You are already connected to %1. Do you want to open another connection?", dupe->getDisplayName()), i18n("Already connected to %1", dupe->getDisplayName()), KGuiItem(i18n("Create connection")), KStandardGuiItem::cancel(), QStringLiteral("ReuseExistingConnection")); if (result == KMessageBox::Continue) doReuse = false; } if (dupe && doReuse) { if (interactive && dupeType == SameServerGroup && !(dupe->getConnectionSettings().server() == settings.server())) { int result = KMessageBox::warningContinueCancel( mainWindow, i18n("You are presently connected to %1 via '%2' (port %3). Do you want to switch to '%4' (port %5) instead?", dupe->getDisplayName(), dupe->getServerName(), QString::number(dupe->getPort()), settings.server().host(), QString::number(settings.server().port())), i18n("Already connected to %1", dupe->getDisplayName()), KGuiItem(i18n("Switch Server")), KStandardGuiItem::cancel(), QStringLiteral("ReconnectWithDifferentServer")); if (result == KMessageBox::Continue) { dupe->disconnectServer(); dupe->setConnectionSettings(settings); } } if (!dupe->isConnected()) { if (!settings.oneShotChannelList().isEmpty()) dupe->updateAutoJoin(settings.oneShotChannelList()); if (!dupe->isConnecting()) dupe->reconnectServer(); } else { if (!settings.oneShotChannelList().isEmpty()) { Konversation::ChannelList::ConstIterator it = settings.oneShotChannelList().constBegin(); Konversation::ChannelList::ConstIterator itend = settings.oneShotChannelList().constEnd(); for ( ; it != itend; ++it ) { dupe->sendJoinCommand((*it).name(), (*it).password()); } settings.clearOneShotChannelList(); } } } return (dupe && doReuse); } bool ConnectionManager::validateIdentity(IdentityPtr identity, bool interactive) { Application* konvApp = Application::instance(); MainWindow* mainWindow = konvApp->getMainWindow(); QString errors; if (identity->getIdent().isEmpty()) errors+=i18n("Please fill in your <b>Ident</b>.<br/>"); if (identity->getRealName().isEmpty()) errors+=i18n("Please fill in your <b>Real name</b>.<br/>"); if (identity->getNickname(0).isEmpty()) errors+=i18n("Please provide at least one <b>Nickname</b>.<br/>"); if (!errors.isEmpty()) { if (interactive) { int result = KMessageBox::warningContinueCancel( mainWindow, i18n("<qt>Your identity \"%1\" is not set up correctly:<br/>%2</qt>", identity->getName(), errors), i18n("Identity Settings"), KGuiItem(i18n("Edit Identity...")), KStandardGuiItem::cancel()); if (result == KMessageBox::Continue) { identity = mainWindow->editIdentity(identity); if (identity && validateIdentity(identity, false)) return true; else return false; } else return false; } return false; } return true; } QList<Server*> ConnectionManager::getServerList() const { QList<Server*> serverList; QMap<int, Server*>::ConstIterator it; for (it = m_connectionList.constBegin(); it != m_connectionList.constEnd(); ++it) serverList.append(it.value()); return serverList; } Server* ConnectionManager::getServerByConnectionId(int connectionId) { if (m_connectionList.contains(connectionId)) return m_connectionList[connectionId]; else return 0; } Server* ConnectionManager::getServerByName(const QString& name, NameMatchFlags flags) { if (flags == MatchByIdThenName) { bool conversion = false; const int connectionId = name.toInt(&conversion); if (conversion) { Server* const server = this->getServerByConnectionId(connectionId); if (server) return server; } } QMap<int, Server*>::ConstIterator it; for (it = m_connectionList.constBegin(); it != m_connectionList.constEnd(); ++it) { if (it.value()->getDisplayName() == name || it.value()->getServerName() == name) return it.value(); } return 0; } void ConnectionManager::involuntaryQuitServers() { m_overrideAutoReconnect = true; QMap<int, Server*>::ConstIterator it; for (it = m_connectionList.constBegin(); it != m_connectionList.constEnd(); ++it) it.value()->involuntaryQuit(); } void ConnectionManager::reconnectInvoluntary() { m_overrideAutoReconnect = false; QMap<int, Server*>::ConstIterator it; for (it = m_connectionList.constBegin(); it != m_connectionList.constEnd(); ++it) it.value()->reconnectInvoluntary(); } void ConnectionManager::onOnlineStateChanged(bool isOnline) { if (isOnline) { reconnectInvoluntary(); } else { involuntaryQuitServers(); } } diff --git a/src/viewer/chatwindow.cpp b/src/viewer/chatwindow.cpp index 31a7f24c..848d30d0 100644 --- a/src/viewer/chatwindow.cpp +++ b/src/viewer/chatwindow.cpp @@ -1,758 +1,762 @@ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ /* Copyright (C) 2002 Dario Abatianni <eisfuchs@tigress.com> Copyright (C) 2006-2008 Eike Hein <hein@kde.org> */ #include "chatwindow.h" #include "channel.h" #include "query.h" #include "ircview.h" #include "ircinput.h" #include "server.h" #include "application.h" #include "logfilereader.h" #include "viewcontainer.h" #include <QDateTime> #include <QDir> #include <QTextCodec> #include <QKeyEvent> #include <QScrollBar> #include <KUser> #include <QLocale> ChatWindow::ChatWindow(QWidget* parent) : QWidget(parent) { QVBoxLayout* mainLayout = new QVBoxLayout(this); mainLayout->setMargin(margin()); mainLayout->setSpacing(spacing()); setName("ChatWindowObject"); setTextView(0); setInputBar(0); firstLog = true; m_server = 0; m_recreationScheduled = false; m_isTopLevelView = true; m_notificationsEnabled = true; m_channelEncodingSupported = false; m_currentTabNotify = Konversation::tnfNone; } ChatWindow::~ChatWindow() { if (getInputBar() && getServer()) { const QString& language = getInputBar()->spellCheckingLanguage(); if (!language.isEmpty()) { Konversation::ServerGroupSettingsPtr serverGroup = getServer()->getConnectionSettings().serverGroup(); if (serverGroup) Preferences::setSpellCheckingLanguage(serverGroup, getName(), language); else Preferences::setSpellCheckingLanguage(getServer()->getDisplayName(), getName(), language); } } emit closing(this); m_server=0; } void ChatWindow::childEvent(QChildEvent* event) { if(event->type() == QChildEvent::ChildAdded) { if(event->child()->isWidgetType()) { layout()->addWidget(qobject_cast< QWidget* >(event->child())); } } else if(event->type() == QChildEvent::ChildRemoved) { if(event->child()->isWidgetType()) { layout()->removeWidget(qobject_cast<QWidget*>(event->child())); } } } // reimplement this if your window needs special close treatment bool ChatWindow::closeYourself(bool /* askForConfirmation */) { deleteLater(); return true; } void ChatWindow::cycle() { m_recreationScheduled = true; closeYourself(false); } void ChatWindow::updateAppearance() { if (getTextView()) getTextView()->updateAppearance(); // The font size of the KTabWidget container may be inappropriately // small due to the "Tab bar" font size setting. setFont(QFontDatabase::systemFont(QFontDatabase::GeneralFont)); } void ChatWindow::setName(const QString& newName) { name=newName; emit nameChanged(this,newName); } QString ChatWindow::getName() const { return name; } QString ChatWindow::getTitle() const { QString title; if (getType() == Channel) { title = QString("%1 (%2)") .arg(getName()) .arg(getServer()->getDisplayName()); } else { title = getName(); } return title; } QString ChatWindow::getURI(bool passNetwork) { QString protocol; QString url; QString port; QString server; QString channel; if (getServer()->getUseSSL()) protocol = "ircs://"; else protocol = "irc://"; if (getType() == Channel) + { channel = getName().replace(QRegExp("^#"), QString()); + // must protect second #, but might as well protect all of them + channel.replace("#", "%23"); + } if (passNetwork) { server = getServer()->getDisplayName(); QUrl test(protocol+server); // QUrl (ultimately used by the bookmark system, which is the // primary consumer here) doesn't like spaces in hostnames as // well as other things which are possible in user-chosen net- // work names, so let's fall back to the hostname if we can't // get the network name by it. if (!test.isValid()) passNetwork = false; } if (!passNetwork) { server = getServer()->getServerName(); port = ':'+QString::number(getServer()->getPort()); } if (server.contains(':')) // IPv6 server = '['+server+']'; url = protocol+server+port+'/'+channel; return url; } void ChatWindow::setType(WindowType newType) { type=newType; } ChatWindow::WindowType ChatWindow::getType() const { return type; } bool ChatWindow::isTopLevelView() const { return m_isTopLevelView; } void ChatWindow::setServer(Server* newServer) { if (!newServer) { qDebug() << "ChatWindow::setServer(0)!"; } else { m_server=newServer; connect(m_server, &Server::serverOnline, this, &ChatWindow::serverOnline); // check if we need to set up the signals if(getType() != ChannelList) { if(textView) textView->setServer(newServer); else qDebug() << "textView==0!"; } serverOnline(m_server->isConnected()); } if (getInputBar()) { QString language; Konversation::ServerGroupSettingsPtr serverGroup = newServer->getConnectionSettings().serverGroup(); if (serverGroup) language = Preferences::spellCheckingLanguage(serverGroup, getName()); else language = Preferences::spellCheckingLanguage(newServer->getDisplayName(), getName()); if (!language.isEmpty()) getInputBar()->setSpellCheckingLanguage(language); } } Server* ChatWindow::getServer() const { return m_server; } void ChatWindow::serverOnline(bool /* state */) { //emit online(this,state); } void ChatWindow::setTextView(IRCView* newView) { textView = newView; if(!textView) { return; } textView->setVerticalScrollBarPolicy(Preferences::self()->showIRCViewScrollBar() ? Qt::ScrollBarAlwaysOn : Qt::ScrollBarAlwaysOff); textView->setChatWin(this); connect(textView, &IRCView::textToLog, this, &ChatWindow::logText); connect(textView, &IRCView::setStatusBarTempText, this, &ChatWindow::setStatusBarTempText); connect(textView, &IRCView::clearStatusBarTempText, this, &ChatWindow::clearStatusBarTempText); } void ChatWindow::appendRaw(const QString& message, bool self) { if(!textView) return; textView->appendRaw(message, self); } void ChatWindow::appendLog(const QString& message) { if(!textView) return; textView->appendLog(message); } void ChatWindow::append(const QString& nickname, const QString& message, const QHash<QString, QString> &messageTags, const QString& label) { if(!textView) return; textView->append(nickname, message, messageTags, label); } void ChatWindow::appendQuery(const QString& nickname, const QString& message, const QHash<QString, QString> &messageTags, bool inChannel) { if(!textView) return ; textView->appendQuery(nickname, message, messageTags, inChannel); } void ChatWindow::appendAction(const QString& nickname, const QString& message, const QHash<QString, QString> &messageTags) { if(!textView) return; if (getType() == Query || getType() == DccChat) textView->appendQueryAction(nickname, message, messageTags); else textView->appendChannelAction(nickname, message, messageTags); } void ChatWindow::appendServerMessage(const QString& type, const QString& message, const QHash<QString, QString> &messageTags, bool parseURL) { if(!textView) return ; textView->appendServerMessage(type, message, messageTags, parseURL); } void ChatWindow::appendCommandMessage(const QString& command, const QString& message, const QHash<QString, QString> &messageTags, bool parseURL, bool self) { if(!textView) return ; textView->appendCommandMessage(command, message, messageTags, parseURL, self); } void ChatWindow::appendBacklogMessage(const QString& firstColumn,const QString& message) { if(!textView) return ; textView->appendBacklogMessage(firstColumn,Konversation::sterilizeUnicode(message)); } void ChatWindow::clear() { if (!textView) return; textView->clear(); resetTabNotification(); if (m_server) m_server->getViewContainer()->unsetViewNotification(this); } void ChatWindow::cdIntoLogPath() { QString home = KUser(KUser::UseRealUserID).homeDir(); QUrl logUrl = Preferences::self()->logfilePath(); if(!logUrl.isLocalFile()) { return; } QString logPath = logUrl.toLocalFile(); QDir logDir(home); // Try to "cd" into the logfile path. if (!logDir.cd(logPath)) { // Only create log path if logging is enabled. if (log()) { // Try to create the logfile path and "cd" into it again. logDir.mkpath(logPath); logDir.cd(logPath); } } // Add the logfile name to the path. logfile.setFileName(logDir.path() + '/' + logName); } void ChatWindow::setLogfileName(const QString& name) { // Only change name of logfile if the window was new. if(firstLog) { if (getTextView()) getTextView()->setContextMenuOptions(IrcContextMenus::ShowLogAction, true); // status panels get special treatment here, since they have no server at the beginning if (getType() == Status || getType() == DccChat) { logName = name + ".log"; } else if (m_server) { // make sure that no path delimiters are in the name logName = QString(m_server->getDisplayName().toLower()).append('_').append(name).append(".log").replace('/','_'); } // load backlog to show if(Preferences::self()->showBacklog()) { // "cd" into log path or create path, if it's not there cdIntoLogPath(); // Show last log lines. This idea was stole ... um ... inspired by PMP :) // Don't do this for the server status windows, though if((getType() != Status) && logfile.open(QIODevice::ReadOnly)) { qint64 filePosition; QString backlogLine; QTextStream backlog(&logfile); backlog.setCodec(QTextCodec::codecForName("UTF-8")); backlog.setAutoDetectUnicode(true); QStringList firstColumns; QStringList messages; int offset = 0; qint64 lastPacketHeadPosition = backlog.device()->size(); const unsigned int packetSize = 4096; while(messages.count() < Preferences::self()->backlogLines() && backlog.device()->size() > packetSize * offset) { QStringList firstColumnsInPacket; QStringList messagesInPacket; // packetSize * offset < size <= packetSize * ( offset + 1 ) // Check if the log is bigger than packetSize * ( offset + 1 ) if(backlog.device()->size() > packetSize * ( offset + 1 )) { // Set file pointer to the packet size above the offset backlog.seek(backlog.device()->size() - packetSize * ( offset + 1 )); // Skip first line, since it may be incomplete backlog.readLine(); } else { // Set file pointer to the head // Qt 4.5 Doc: Note that when using a QTextStream on a // QFile, calling reset() on the QFile will not have the // expected result because QTextStream buffers the file. // Use the QTextStream::seek() function instead. // backlog.device()->reset(); backlog.seek( 0 ); } // remember actual file position to check for deadlocks filePosition = backlog.pos(); qint64 currentPacketHeadPosition = filePosition; // Loop until end of file reached while(!backlog.atEnd() && filePosition < lastPacketHeadPosition) { backlogLine = backlog.readLine(); // check for deadlocks if(backlog.pos() == filePosition) { backlog.seek(filePosition + 1); } // if a tab character is present in the line, meaning it is a valid chatline if (backlogLine.contains('\t')) { // extract first column from log QString backlogFirst = backlogLine.left(backlogLine.indexOf('\t')); // cut first column from line backlogLine = backlogLine.mid(backlogLine.indexOf('\t') + 1); // Logfile is in utf8 so we don't need to do encoding stuff here // append backlog with time and first column to text view firstColumnsInPacket << backlogFirst; messagesInPacket << backlogLine; } // remember actual file position to check for deadlocks filePosition = backlog.pos(); } // while // remember the position not to read the same lines again lastPacketHeadPosition = currentPacketHeadPosition; ++offset; firstColumns = firstColumnsInPacket + firstColumns; messages = messagesInPacket + messages; } backlog.setDevice(0); logfile.close(); // trim int surplus = messages.count() - Preferences::self()->backlogLines(); // "surplus" can be a minus value. (when the backlog is too short) if(surplus > 0) { for(int i = 0 ; i < surplus ; ++i) { firstColumns.pop_front(); messages.pop_front(); } } QStringList::Iterator itFirstColumn = firstColumns.begin(); QStringList::Iterator itMessage = messages.begin(); for( ; itFirstColumn != firstColumns.end() ; ++itFirstColumn, ++itMessage ) appendBacklogMessage(*itFirstColumn, *itMessage); } } // if(Preferences::showBacklog()) } } void ChatWindow::logText(const QString& text) { if(log()) { // "cd" into log path or create path, if it's not there cdIntoLogPath(); if(logfile.open(QIODevice::WriteOnly | QIODevice::Append)) { // wrap the file into a stream QTextStream logStream(&logfile); // write log in utf8 to help i18n logStream.setCodec(QTextCodec::codecForName("UTF-8")); logStream.setAutoDetectUnicode(true); if(firstLog) { QString intro(i18n("\n*** Logfile started\n*** on %1\n\n", QDateTime::currentDateTime().toString())); logStream << intro; firstLog=false; } QDateTime dateTime = QDateTime::currentDateTime(); QString logLine(QString("[%1] [%2] %3\n").arg(QLocale().toString(dateTime.date(), QLocale::LongFormat)). arg(QLocale().toString(dateTime.time(), QLocale::LongFormat)).arg(text)); logStream << logLine; // detach stream from file logStream.setDevice(0); // close file logfile.close(); } else qWarning() << "open(QIODevice::Append) for " << logfile.fileName() << " failed!"; } } void ChatWindow::setChannelEncodingSupported(bool enabled) { m_channelEncodingSupported = enabled; } bool ChatWindow::isChannelEncodingSupported() const { return m_channelEncodingSupported; } int ChatWindow::spacing() { if(Preferences::self()->useSpacing()) return Preferences::self()->spacing(); else return style()->layoutSpacing(QSizePolicy::DefaultType, QSizePolicy::DefaultType, Qt::Vertical); } int ChatWindow::margin() { if(Preferences::self()->useSpacing()) return Preferences::self()->margin(); else return 0; } // Accessors IRCView* ChatWindow::getTextView() const { return textView; } bool ChatWindow::log() { return Preferences::self()->log(); } // reimplement this in all panels that have user input QString ChatWindow::getTextInLine() { if (m_inputBar) return m_inputBar->toPlainText(); else return QString(); } bool ChatWindow::canBeFrontView() { return false; } bool ChatWindow::searchView() { return false; } // reimplement this in all panels that have user input void ChatWindow::indicateAway(bool) { } // reimplement this in all panels that have user input void ChatWindow::appendInputText(const QString& text, bool fromCursor) { if (!fromCursor) m_inputBar->append(text); else { const int position = m_inputBar->textCursor().position(); m_inputBar->textCursor().insertText(text); QTextCursor cursor = m_inputBar->textCursor(); cursor.setPosition(position + text.length()); m_inputBar->setTextCursor(cursor); } } bool ChatWindow::eventFilter(QObject* watched, QEvent* e) { if(e->type() == QEvent::KeyPress) { QKeyEvent* ke = static_cast<QKeyEvent*>(e); bool scrollMod = (Preferences::self()->useMultiRowInputBox() ? false : (ke->modifiers() == Qt::ShiftModifier)); if(ke->key() == Qt::Key_Up && scrollMod) { if(textView) { QScrollBar* sbar = textView->verticalScrollBar(); sbar->setValue(sbar->value() - sbar->singleStep()); } return true; } else if(ke->key() == Qt::Key_Down && scrollMod) { if(textView) { QScrollBar* sbar = textView->verticalScrollBar(); sbar->setValue(sbar->value() + sbar->singleStep()); } return true; } else if(ke->modifiers() == Qt::NoModifier && ke->key() == Qt::Key_PageUp) { if(textView) { QScrollBar* sbar = textView->verticalScrollBar(); sbar->setValue(sbar->value() - sbar->pageStep()); } return true; } else if(ke->modifiers() == Qt::NoModifier && ke->key() == Qt::Key_PageDown) { if(textView) { QScrollBar* sbar = textView->verticalScrollBar(); sbar->setValue(sbar->value() + sbar->pageStep()); } return true; } } return QWidget::eventFilter(watched, e); } void ChatWindow::adjustFocus() { childAdjustFocus(); } void ChatWindow::emitUpdateInfo() { QString info = getName(); emit updateInfo(info); } QColor ChatWindow::highlightColor() { return getTextView()->highlightColor(); } void ChatWindow::activateTabNotification(Konversation::TabNotifyType type) { if (!notificationsEnabled()) return; if(type > m_currentTabNotify) return; m_currentTabNotify = type; emit updateTabNotification(this,type); } void ChatWindow::resetTabNotification() { m_currentTabNotify = Konversation::tnfNone; } void ChatWindow::msgHelper(const QString& recipient, const QString& message) { // A helper method for handling the 'msg' and 'query' (with a message // payload) commands. When the user uses either, we show a visualiza- // tion of what he/she has sent in the form of '<-> target> message>' // in the chat view of the tab the command was issued in, as well as // add the resulting message to the target view (if present), in that // order. The order is especially important as the origin and target // views may be the same, and the two messages may thus appear toge- // ther and should be sensibly ordered. if (recipient.isEmpty() || message.isEmpty()) return; bool isAction = false; QString result = message; QString visualization; if (result.startsWith(Preferences::self()->commandChar() + "me")) { isAction = true; result = result.mid(4); visualization = QString("* %1 %2").arg(m_server->getNickname()).arg(result); } else visualization = result; appendQuery(recipient, visualization, QHash<QString, QString>(), true); if (!getServer()) return; ::Query* query = m_server->getQueryByName(recipient); if (query) { if (isAction) query->appendAction(m_server->getNickname(), result); else query->appendQuery(m_server->getNickname(), result); return; } ::Channel* channel = m_server->getChannelByName(recipient); if (channel) { if (isAction) channel->appendAction(m_server->getNickname(), result); else channel->append(m_server->getNickname(), result); } } void ChatWindow::activateView() { for(QWidget* widget = this; widget; widget = widget->parentWidget()) { if (widget->window()) { widget->show(); widget->activateWindow(); widget->raise(); } } } diff --git a/src/viewer/irccontextmenus.cpp b/src/viewer/irccontextmenus.cpp index 271fee80..0039fd2f 100644 --- a/src/viewer/irccontextmenus.cpp +++ b/src/viewer/irccontextmenus.cpp @@ -1,897 +1,904 @@ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License or (at your option) version 3 or any later version accepted by the membership of KDE e.V. (or its successor appro- ved by the membership of KDE e.V.), which shall act as a proxy defined in Section 14 of version 3 of the license. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ /* Copyright (C) 2010 Eike Hein <hein@kde.org> */ #include "irccontextmenus.h" #include "application.h" #include "nick.h" #include "server.h" #include "ircinput.h" #include <QClipboard> #include <KActionCollection> #include <KAuthorized> #include <KBookmarkDialog> #include <KBookmarkManager> #include <QFileDialog> #include <KIO/CopyJob> #include <QMenu> #include <KMessageBox> #include <KRun> #include <KStandardAction> #include <KStringHandler> #include <KToggleAction> // For the Web Shortcuts context menu sub-menu. #include <KToolInvocation> #include <KUriFilter> class IrcContextMenusPrivate { public: IrcContextMenusPrivate(); ~IrcContextMenusPrivate(); IrcContextMenus instance; }; Q_GLOBAL_STATIC(IrcContextMenusPrivate, s_ircContextMenusPrivate) IrcContextMenusPrivate::IrcContextMenusPrivate() { } IrcContextMenusPrivate::~IrcContextMenusPrivate() { } IrcContextMenus::IrcContextMenus() { createSharedBasicNickActions(); createSharedNickSettingsActions(); createSharedDccActions(); - setupChannelMenu(); setupQuickButtonMenu(); setupNickMenu(); - setupTextMenu(); + setupTextMenu(); // creates m_textCopyAction needed by the channel menu + setupChannelMenu(); setupTopicHistoryMenu(); updateQuickButtonMenu(); } IrcContextMenus::~IrcContextMenus() { - delete m_textMenu; delete m_channelMenu; + delete m_textMenu; delete m_nickMenu; delete m_quickButtonMenu; delete m_topicHistoryMenu; delete m_modesMenu; delete m_kickBanMenu; delete m_webShortcutsMenu; } IrcContextMenus* IrcContextMenus::self() { return &s_ircContextMenusPrivate->instance; } void IrcContextMenus::setupQuickButtonMenu() { //NOTE: if we depend on m_nickMenu we get an we an cyclic initialising m_quickButtonMenu = new QMenu(); m_quickButtonMenu->setTitle(i18n("Quick Buttons")); connect(Application::instance(), SIGNAL(appearanceChanged()), this, SLOT(updateQuickButtonMenu())); } bool IrcContextMenus::shouldShowQuickButtonMenu() { return Preferences::self()->showQuickButtonsInContextMenu() && !m_quickButtonMenu->isEmpty(); } void IrcContextMenus::updateQuickButtonMenu() { m_quickButtonMenu->clear(); QAction * action; QString pattern; foreach(const QString& button, Preferences::quickButtonList()) { pattern = button.section(',', 1); if (pattern.contains("%u")) { action = new QAction(button.section(',', 0, 0), m_quickButtonMenu); action->setData(pattern); m_quickButtonMenu->addAction(action); } } } void IrcContextMenus::processQuickButtonAction(QAction* action, Server* server, const QString& context, const QStringList nicks) { ChatWindow* chatWindow = server->getChannelOrQueryByName(context); QString line = server->parseWildcards(action->data().toString(), chatWindow, nicks); if (line.contains('\n')) chatWindow->sendText(line); else { if (chatWindow->getInputBar()) chatWindow->getInputBar()->setText(line, true); } } void IrcContextMenus::setupTextMenu() { m_textMenu = new QMenu(); m_textMenu->addSeparator(); m_linkActions << createAction(m_textMenu, LinkCopy, QIcon::fromTheme("edit-copy"), i18n("Copy Link Address")); // Not using KStandardAction is intentional here since the Ctrl+B // shortcut it would show in the menu is already used by our IRC- // wide bookmarking feature. m_linkActions << createAction(m_textMenu, LinkBookmark, QIcon::fromTheme("bookmark-new"), i18n("Add to Bookmarks")); m_linkActions << createAction(m_textMenu, LinkOpenWith, i18n("Open With...")); m_linkActions << createAction(m_textMenu, LinkSaveAs, QIcon::fromTheme("document-save"), i18n("Save Link As...")); m_textMenu->addSeparator(); m_textCopyAction = KStandardAction::copy(0, 0, this); m_textCopyAction->setData(TextCopy); m_textMenu->addAction(m_textCopyAction); m_textCopyAction->setEnabled(false); QAction* action = KStandardAction::selectAll(0, 0, this); action->setData(TextSelectAll); m_textMenu->addAction(action); m_webShortcutsMenu = new QMenu(); m_webShortcutsMenu->menuAction()->setIcon(QIcon::fromTheme("preferences-web-browser-shortcuts")); m_webShortcutsMenu->menuAction()->setVisible(false); m_textMenu->addMenu(m_webShortcutsMenu); m_textActionsSeparator = m_textMenu->addSeparator(); foreach(QAction* action, m_sharedBasicNickActions) m_textMenu->addAction(action); m_textMenu->addSeparator(); m_textMenu->addMenu(m_quickButtonMenu); m_textMenu->addSeparator(); foreach(QAction* action, m_sharedNickSettingsActions) m_textMenu->addAction(action); m_textMenu->addSeparator(); foreach(QAction* action, m_sharedDccActions) m_textMenu->addAction(action); m_textMenu->addSeparator(); } int IrcContextMenus::textMenu(const QPoint& pos, MenuOptions options, Server* server, const QString& selectedText, const QString& link, const QString& nick) { QMenu* textMenu = self()->m_textMenu; KActionCollection* actionCollection = Application::instance()->getMainWindow()->actionCollection(); KToggleAction* toggleMenuBarAction = static_cast<KToggleAction*>(actionCollection->action("options_show_menubar")); if (toggleMenuBarAction && !toggleMenuBarAction->isChecked()) textMenu->insertAction(textMenu->actions().first(), toggleMenuBarAction); bool showLinkActions = options.testFlag(ShowLinkActions); foreach(QAction* action, self()->m_linkActions) action->setVisible(showLinkActions); self()->m_textCopyAction->setEnabled(!selectedText.isEmpty()); self()->updateWebShortcutsMenu(selectedText); bool showNickActions = options.testFlag(ShowNickActions); foreach(QAction* action, self()->m_sharedBasicNickActions) action->setVisible(showNickActions); self()->m_quickButtonMenu->menuAction()->setVisible(showNickActions && self()->shouldShowQuickButtonMenu()); if (showNickActions) { bool connected = server->isConnected(); foreach(QAction* action, self()->m_sharedBasicNickActions) action->setEnabled(connected); updateSharedNickSettingsActions(server, QStringList() << nick); foreach(QAction* action, self()->m_sharedDccActions) action->setEnabled(connected); } else { foreach(QAction* action, self()->m_sharedNickSettingsActions) action->setVisible(false); } foreach(QAction* action, self()->m_sharedDccActions) action->setVisible(showNickActions); if (options.testFlag(ShowFindAction)) textMenu->insertAction(self()->m_textActionsSeparator, actionCollection->action(KStandardAction::name(KStandardAction::Find))); if (options.testFlag(ShowLogAction)) textMenu->addAction(actionCollection->action("open_logfile")); if (options.testFlag(ShowChannelActions)) textMenu->addAction(actionCollection->action("channel_settings")); QAction* action = textMenu->exec(pos); int actionId = extractActionId(action); if (showLinkActions) processLinkAction(actionId, link); if (self()->m_quickButtonMenu->actions().contains(action)) processQuickButtonAction(action, server, nick, QStringList() << nick); textMenu->removeAction(toggleMenuBarAction); textMenu->removeAction(actionCollection->action(KStandardAction::name(KStandardAction::Find))); textMenu->removeAction(actionCollection->action("open_logfile")); textMenu->removeAction(actionCollection->action("channel_settings")); return actionId; } void IrcContextMenus::updateWebShortcutsMenu(const QString& selectedText) { m_webShortcutsMenu->menuAction()->setVisible(false); m_webShortcutsMenu->clear(); if (selectedText.isEmpty()) return; QString searchText = selectedText; searchText = searchText.replace('\n', ' ').replace('\r', ' ').simplified(); if (searchText.isEmpty()) return; KUriFilterData filterData(searchText); filterData.setSearchFilteringOptions(KUriFilterData::RetrievePreferredSearchProvidersOnly); if (KUriFilter::self()->filterSearchUri(filterData, KUriFilter::NormalTextFilter)) { const QStringList searchProviders = filterData.preferredSearchProviders(); if (!searchProviders.isEmpty()) { m_webShortcutsMenu->setTitle(i18n("Search for '%1' with", KStringHandler::rsqueeze(searchText, 21))); QAction * action = 0; foreach(const QString& searchProvider, searchProviders) { action = new QAction(searchProvider, m_webShortcutsMenu); action->setIcon(QIcon::fromTheme(filterData.iconNameForPreferredSearchProvider(searchProvider))); action->setData(filterData.queryForPreferredSearchProvider(searchProvider)); connect(action, &QAction::triggered, this, &IrcContextMenus::processWebShortcutAction); m_webShortcutsMenu->addAction(action); } m_webShortcutsMenu->addSeparator(); action = new QAction(i18n("Configure Web Shortcuts..."), m_webShortcutsMenu); action->setIcon(QIcon::fromTheme("configure")); connect(action, &QAction::triggered, this, &IrcContextMenus::configureWebShortcuts); m_webShortcutsMenu->addAction(action); m_webShortcutsMenu->menuAction()->setVisible(true); } } } void IrcContextMenus::processWebShortcutAction() { QAction * action = qobject_cast<QAction*>(sender()); if (action) { KUriFilterData filterData(action->data().toString()); if (KUriFilter::self()->filterSearchUri(filterData, KUriFilter::WebShortcutFilter)) Application::instance()->openUrl(filterData.uri().url()); } } void IrcContextMenus::configureWebShortcuts() { KToolInvocation::kdeinitExec("kcmshell5", QStringList() << "webshortcuts"); } void IrcContextMenus::setupChannelMenu() { m_channelMenu = new QMenu(); QAction* defaultAction = createAction(m_channelMenu, Join, QIcon::fromTheme("irc-join-channel"), i18n("&Join Channel...")); m_channelMenu->setDefaultAction(defaultAction); createAction(m_channelMenu, Topic, i18n("Get &topic")); createAction(m_channelMenu, Names, i18n("Get &user list")); + + m_channelMenu->addAction(m_textCopyAction); } void IrcContextMenus::channelMenu(const QPoint& pos, Server* server, const QString& channel) { QMenu* channelMenu = self()->m_channelMenu; if (!channel.isEmpty()) channelMenu->setTitle(KStringHandler::rsqueeze(channel, 15)); bool connected = server->isConnected(); foreach(QAction* action, channelMenu->actions()) action->setEnabled(connected); QAction* action = channelMenu->exec(pos); + self()->m_textCopyAction->setEnabled(false); + switch (extractActionId(action)) { case Join: commandToServer(server, "join " + channel); break; case Topic: server->requestTopic(channel); break; case Names: commandToServer(server, "names " + channel); break; + case TextCopy: + qApp->clipboard()->setText(channel, QClipboard::Clipboard); + break; default: break; } } void IrcContextMenus::setupNickMenu() { m_nickMenu = new QMenu(); QAction* defaultAction = createAction(m_nickMenu, OpenQuery, i18n("Open Query")); m_nickMenu->setDefaultAction(defaultAction); m_nickMenu->addSeparator(); foreach(QAction* action, m_sharedBasicNickActions) m_nickMenu->addAction(action); m_nickMenu->addSeparator(); m_modesMenu = new QMenu(); m_nickMenu->addMenu(m_modesMenu); m_modesMenu->setTitle(i18n("Modes")); createAction(m_modesMenu, GiveOp, QIcon::fromTheme("irc-operator"), i18n("Give Op")); createAction(m_modesMenu, TakeOp, QIcon::fromTheme("irc-remove-operator"), i18n("Take Op")); createAction(m_modesMenu, GiveHalfOp, i18n("Give HalfOp")); createAction(m_modesMenu, TakeHalfOp, i18n("Take HalfOp")); createAction(m_modesMenu, GiveVoice, QIcon::fromTheme("irc-voice"), i18n("Give Voice")); createAction(m_modesMenu, TakeVoice, QIcon::fromTheme("irc-unvoice"), i18n("Take Voice")); m_kickBanMenu = new QMenu(); m_nickMenu->addMenu(m_kickBanMenu); m_kickBanMenu->setTitle(i18n("Kick / Ban")); createAction(m_kickBanMenu, Kick, i18n("Kick")); createAction(m_kickBanMenu, KickBan, i18n("Kickban")); createAction(m_kickBanMenu, BanNick, i18n("Ban Nickname")); m_kickBanMenu->addSeparator(); createAction(m_kickBanMenu, BanHost, i18n("Ban *!*@*.host")); createAction(m_kickBanMenu, BanDomain, i18n("Ban *!*@domain")); createAction(m_kickBanMenu, BanUserHost, i18n("Ban *!user@*.host")); createAction(m_kickBanMenu, BanUserDomain, i18n("Ban *!user@domain")); m_kickBanMenu->addSeparator(); createAction(m_kickBanMenu, KickBanHost, i18n("Kickban *!*@*.host")); createAction(m_kickBanMenu, KickBanDomain, i18n("Kickban *!*@domain")); createAction(m_kickBanMenu, KickBanUserHost, i18n("Kickban *!user@*.host")); createAction(m_kickBanMenu, KickBanUserDomain, i18n("Kickban *!user@domain")); m_nickMenu->addMenu(m_quickButtonMenu); m_nickMenu->addSeparator(); foreach(QAction* action, m_sharedNickSettingsActions) m_nickMenu->addAction(action); m_nickMenu->addSeparator(); foreach(QAction* action, m_sharedDccActions) m_nickMenu->addAction(action); } void IrcContextMenus::createSharedBasicNickActions() { m_sharedBasicNickActions << createAction(Whois, i18n("&Whois")); m_sharedBasicNickActions << createAction(Version, i18n("&Version")); m_sharedBasicNickActions << createAction(Ping, i18n("&Ping")); } void IrcContextMenus::createSharedNickSettingsActions() { m_ignoreAction = createAction(IgnoreNick, i18n("Ignore")); m_sharedNickSettingsActions << m_ignoreAction; m_unignoreAction = createAction(UnignoreNick, i18n("Unignore")); m_sharedNickSettingsActions << m_unignoreAction; m_addNotifyAction = createAction(AddNotify, QIcon::fromTheme("list-add-user"), i18n("Add to Watched Nicks")); m_sharedNickSettingsActions << m_addNotifyAction; m_removeNotifyAction = createAction(RemoveNotify, QIcon::fromTheme("list-remove-user"), i18n("Remove From Watched Nicks")); m_sharedNickSettingsActions << m_removeNotifyAction; } void IrcContextMenus::createSharedDccActions() { if (KAuthorized::authorizeAction("allow_downloading")) m_sharedDccActions << createAction(DccSend, QIcon::fromTheme("arrow-right-double"), i18n("Send &File...")); m_sharedDccActions << createAction(StartDccChat, i18n("Open DCC Chat")); m_sharedDccActions << createAction(StartDccWhiteboard, i18n("Open DCC Whiteboard")); } void IrcContextMenus::nickMenu(const QPoint& pos, MenuOptions options, Server* server, const QStringList& nicks, const QString& context) { QMenu* nickMenu = self()->m_nickMenu; if (options.testFlag(ShowTitle) && nicks.count() == 1) nickMenu->setTitle(KStringHandler::rsqueeze(nicks.first(), 15)); foreach(QAction* action, nickMenu->actions()) action->setVisible(true); self()->m_modesMenu->menuAction()->setVisible(options.testFlag(ShowChannelActions)); self()->m_kickBanMenu->menuAction()->setVisible(options.testFlag(ShowChannelActions)); self()->m_quickButtonMenu->menuAction()->setVisible(self()->shouldShowQuickButtonMenu()); bool connected = server->isConnected(); foreach(QAction* action, self()->m_sharedBasicNickActions) action->setEnabled(connected); foreach(QAction* action, self()->m_sharedDccActions) action->setEnabled(connected); self()->m_modesMenu->menuAction()->setEnabled(connected); self()->m_kickBanMenu->menuAction()->setEnabled(connected); updateSharedNickSettingsActions(server, nicks); QAction* action = nickMenu->exec(pos); if (self()->m_quickButtonMenu->actions().contains(action)) processQuickButtonAction(action, server, context, nicks); else processNickAction(extractActionId(action), server, nicks, context); } void IrcContextMenus::processNickAction(int actionId, Server* server, const QStringList& nicks, const QString& context) { QString channel; if (server->getChannelByName(context)) channel = context; QString pattern; QString mode; switch (actionId) { case OpenQuery: commandToServer(server, "query %1", nicks); break; case Whois: commandToServer(server, "whois %1 %1", nicks); break; case Version: commandToServer(server, "ctcp %1 VERSION", nicks); break; case Ping: commandToServer(server, "ctcp %1 PING", nicks); break; case GiveOp: if (channel.isEmpty()) break; pattern = "MODE %c +%m %l"; mode = 'o'; break; case TakeOp: if (channel.isEmpty()) break; pattern = "MODE %c -%m %l"; mode = 'o'; break; case GiveHalfOp: if (channel.isEmpty()) break; pattern = "MODE %c +%m %l"; mode = 'h'; break; case TakeHalfOp: if (channel.isEmpty()) break; pattern = "MODE %c -%m %l"; mode = 'h'; break; case GiveVoice: if (channel.isEmpty()) break; pattern = "MODE %c +%m %l"; mode = 'v'; break; case TakeVoice: if (channel.isEmpty()) break; pattern = "MODE %c -%m %l"; mode = 'v'; break; case Kick: commandToServer(server, "kick %1", nicks, channel); break; case KickBan: commandToServer(server, "kickban %1", nicks, channel); break; case BanNick: commandToServer(server, "ban %1", nicks, channel); break; case BanHost: commandToServer(server, "ban -HOST %1", nicks, channel); break; case BanDomain: commandToServer(server, "ban -DOMAIN %1", nicks, channel); break; case BanUserHost: commandToServer(server, "ban -USERHOST %1", nicks, channel); break; case BanUserDomain: commandToServer(server, "ban -USERDOMAIN %1", nicks, channel); break; case KickBanHost: commandToServer(server, "kickban -HOST %1", nicks, channel); break; case KickBanDomain: commandToServer(server, "kickban -DOMAIN %1", nicks, channel); break; case KickBanUserHost: commandToServer(server, "kickban -USERHOST %1", nicks, channel); break; case KickBanUserDomain: commandToServer(server, "kickban -USERDOMAIN %1", nicks, channel); break; case IgnoreNick: { QString question; if (nicks.size() == 1) question = i18n("Do you want to ignore %1?", nicks.first()); else question = i18n("Do you want to ignore the selected users?"); if (KMessageBox::warningContinueCancel( Application::instance()->getMainWindow(), question, i18n("Ignore"), KGuiItem(i18n("Ignore")), KStandardGuiItem::cancel(), "IgnoreNick" ) == KMessageBox::Continue) { commandToServer(server, "ignore -ALL " + nicks.join(" ")); } break; } case UnignoreNick: { QString question; QStringList selectedIgnoredNicks; foreach(const QString& nick, nicks) { if (Preferences::isIgnored(nick)) selectedIgnoredNicks << nick; } if (selectedIgnoredNicks.count() == 1) question = i18n("Do you want to stop ignoring %1?", selectedIgnoredNicks.first()); else question = i18n("Do you want to stop ignoring the selected users?"); if (KMessageBox::warningContinueCancel( Application::instance()->getMainWindow(), question, i18n("Unignore"), KGuiItem(i18n("Unignore")), KStandardGuiItem::cancel(), "UnignoreNick") == KMessageBox::Continue) { commandToServer(server, "unignore " + selectedIgnoredNicks.join(" ")); } break; } case AddNotify: { if (!server->getServerGroup()) break; foreach(const QString& nick, nicks) Preferences::addNotify(server->getServerGroup()->id(), nick); break; } case RemoveNotify: { if (!server->getServerGroup()) break; foreach(const QString& nick, nicks) Preferences::removeNotify(server->getServerGroup()->id(), nick); break; } case DccSend: commandToServer(server, "dcc send %1", nicks); break; case StartDccChat: commandToServer(server, "dcc chat %1", nicks); break; case StartDccWhiteboard: commandToServer(server, "dcc whiteboard %1", nicks); break; default: break; } if (!pattern.isEmpty()) { pattern.replace("%c", channel); QString command; QStringList partialList; int modesCount = server->getModesCount(); for (int index = 0; index < nicks.count(); index += modesCount) { command = pattern; partialList = nicks.mid(index, modesCount); command = command.replace("%l", partialList.join(" ")); const QString repeatedMode = mode.repeated(partialList.count()); command = command.replace("%m", repeatedMode); server->queue(command); } } } void IrcContextMenus::updateSharedNickSettingsActions(Server* server, const QStringList& nicks) { int ignoreCounter = 0; int unignoreCounter = 0; int addNotifyCounter = 0; int removeNotifyCounter = 0; int serverGroupId = -1; if (server->getServerGroup()) serverGroupId = server->getServerGroup()->id(); foreach(const QString& nick, nicks) { if (Preferences::isIgnored(nick)) ++unignoreCounter; else ++ignoreCounter; if (serverGroupId != -1) { if (Preferences::isNotify(serverGroupId, nick)) ++removeNotifyCounter; else ++addNotifyCounter; } } self()->m_ignoreAction->setVisible(ignoreCounter); self()->m_unignoreAction->setVisible(unignoreCounter); self()->m_addNotifyAction->setVisible(serverGroupId == -1 || addNotifyCounter); self()->m_addNotifyAction->setEnabled(serverGroupId != -1); self()->m_removeNotifyAction->setVisible(removeNotifyCounter); } void IrcContextMenus::processLinkAction(int actionId, const QString& link) { if (actionId == -1 || link.isEmpty()) return; switch (actionId) { case LinkCopy: { QClipboard* clipboard = qApp->clipboard(); clipboard->setText(link, QClipboard::Selection); clipboard->setText(link, QClipboard::Clipboard); break; } case LinkBookmark: { KBookmarkManager* manager = KBookmarkManager::userBookmarksManager(); KBookmarkDialog* dialog = new KBookmarkDialog(manager, Application::instance()->getMainWindow()); dialog->addBookmark(link, QUrl(link), QString()); delete dialog; break; } case LinkOpenWith: { KRun::displayOpenWithDialog(QList<QUrl>() << QUrl(link), Application::instance()->getMainWindow()); break; } case LinkSaveAs: { QUrl srcUrl(link); QUrl saveUrl = QFileDialog::getSaveFileUrl(Application::instance()->getMainWindow(), i18n("Save link as"), QUrl::fromLocalFile(srcUrl.fileName())); if (saveUrl.isEmpty() || !saveUrl.isValid()) break; KIO::copy(srcUrl, saveUrl); break; } default: break; } } void IrcContextMenus::setupTopicHistoryMenu() { m_topicHistoryMenu = new QMenu(); m_topicHistoryMenu->addAction(m_textCopyAction); m_queryTopicAuthorAction = createAction(m_topicHistoryMenu, OpenQuery, i18n("Query author")); } void IrcContextMenus::topicHistoryMenu(const QPoint& pos, Server* server, const QString& text, const QString& author) { QMenu* topicHistoryMenu = self()->m_topicHistoryMenu; self()->m_textCopyAction->setEnabled(true); self()->m_queryTopicAuthorAction->setEnabled(!author.isEmpty()); QAction* action = topicHistoryMenu->exec(pos); switch (extractActionId(action)) { case TextCopy: qApp->clipboard()->setText(text, QClipboard::Clipboard); break; case OpenQuery: commandToServer(server, QString("query %1").arg(author)); break; default: break; } } QAction* IrcContextMenus::createAction(ActionId id, const QString& text) { QAction* action = new QAction(text, this); action->setData(id); return action; } QAction* IrcContextMenus::createAction(ActionId id, const QIcon& icon) { QAction* action = new QAction(this); action->setData(id); action->setIcon(icon); return action; } QAction* IrcContextMenus::createAction(ActionId id, const QIcon& icon, const QString& text) { QAction* action = new QAction(icon, text, this); action->setData(id); return action; } QAction* IrcContextMenus::createAction(QMenu* menu, ActionId id, const QString& text) { QAction* action = createAction(id, text); menu->addAction(action); return action; } QAction* IrcContextMenus::createAction(QMenu* menu, ActionId id, const QIcon& icon, const QString& text) { QAction* action = createAction(id, text); action->setIcon(icon); menu->addAction(action); return action; } int IrcContextMenus::extractActionId(QAction* action) { if (action) { bool ok = false; int actionId = action->data().toInt(&ok); if (ok) return actionId; } return -1; } void IrcContextMenus::commandToServer(Server* server, const QString& command, const QString& destination) { Konversation::OutputFilterResult result = server->getOutputFilter()->parse(QString(), Preferences::self()->commandChar() + command, destination); server->queue(result.toServer); if (!result.output.isEmpty()) server->appendMessageToFrontmost(result.typeString, result.output); else if (!result.outputList.isEmpty()) { foreach(const QString& output, result.outputList) server->appendMessageToFrontmost(result.typeString, output); } } void IrcContextMenus::commandToServer(Server* server, const QString& command, const QStringList& arguments, const QString& destination) { foreach(const QString& argument, arguments) commandToServer(server, command.arg(argument), destination); }