diff --git a/CMakeLists.txt b/CMakeLists.txt index 8680893ef..7aabb20d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,179 +1,170 @@ cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) project(kopete) set(KOPETE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(KOPETE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) set(KF5_VERSION "5.25.0") set(REQUIRED_QT_VERSION "5.6.0") #ECM modules configurations find_package(ECM ${KF5_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_MODULE_DIR} ${ECM_KDE_MODULE_DIR} ${KOPETE_SOURCE_DIR}/cmake/modules) find_package(Phonon4Qt5 REQUIRED NO_MODULE) find_package(Qt5 ${REQUIRED_QT_VERSION} NO_MODULE REQUIRED Core) find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS Widgets Xml Sql Test) find_package(KF5 ${KF5_VERSION} REQUIRED COMPONENTS Config CoreAddons Crash DBusAddons DocTools Emoticons I18n KCMUtils KHtml NotifyConfig Parts TextEditor Wallet KDELibs4Support ) find_package(KF5Contacts ${KCONTACTS_LIB_VERSION} CONFIG REQUIRED) find_package(KF5IdentityManagement ${KCONTACTS_LIB_VERSION} CONFIG REQUIRED) include(KDEInstallDirs) include(KDECompilerSettings NO_POLICY_SCOPE) include(KDECMakeSettings) include(FeatureSummary) include(ECMAddTests) include(ECMAddAppIcon) include(ECMInstallIcons) include(ECMQtDeclareLoggingCategory) include_directories(${PHONON_INCLUDES}) if(WIN32) set(CMAKE_REQUIRED_LIBRARIES ${KDEWIN32_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${KDEWIN32_INCLUDES}) endif() add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0) if(WIN32) set(DISABLE_VIDEOSUPPORT ON) else() option(DISABLE_VIDEOSUPPORT "Build Kopete without video-support" OFF) endif() if(DISABLE_VIDEOSUPPORT) add_definitions(-DVIDEOSUPPORT_DISABLED) endif() set(LIBKLEO_LIB_VERSION_LIB "5.4.0") find_package(KF5Libkleo ${LIBKLEO_LIB_VERSION_LIB} CONFIG REQUIRED) ### Alphabetical list of optional packages ### find_package(Alsa QUIET) set_package_properties(Alsa PROPERTIES DESCRIPTION "Alsa is advanced linux sound Architecture" URL "http://www.alsa-project.org" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol with libjingle support") -find_package(Boost QUIET) -set_package_properties(Boost PROPERTIES DESCRIPTION "C++ Boost libraries" URL "http://www.boost.org/" TYPE OPTIONAL PURPOSE "Required for the WLM protocol") - find_package(Expat QUIET) set_package_properties(Expat PROPERTIES DESCRIPTION "Expat is a stream oriented XML parser" URL "http://expat.sourceforge.net/" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol with libjingle support") -find_package(GIF QUIET) -set_package_properties(GIF PROPERTIES DESCRIPTION "GIF - Package of portable tools and library routines for working with GIF images" URL "http://giflib.sourceforge.net/" TYPE OPTIONAL PURPOSE "Required for the WLM protocol with handwriting messages support") - find_package(GLIB2 QUIET) set_package_properties(GLIB2 PROPERTIES DESCRIPTION "GLib library" URL "http://www.gtk.org" TYPE OPTIONAL PURPOSE "Required for the Nowlistening plugin with XMMS player support") find_package(IDN QUIET) set_package_properties(IDN PROPERTIES DESCRIPTION "GNU Libidn International Domain Name(IDN) implementation" URL "http://www.gnu.org/software/libidn/" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol") find_package(Jasper QUIET) set_package_properties(Jasper PROPERTIES DESCRIPTION "Jasper library implements the codec specified in the JPEG-200 Part-1 standard" URL "http://www.ece.uvic.ca/~mdadams/jasper/" TYPE OPTIONAL PURPOSE "Required for the Yahoo protocol") find_package(JsonCpp QUIET) set_package_properties(JsonCpp PROPERTIES DESCRIPTION "JsonCpp is an implementation of a JSON reader and writer in C++" URL "http://jsoncpp.sourceforge.net/" TYPE OPTIONAL PURPOSE "Required for the jabber protocol") find_package(Kleopatra QUIET) set_package_properties(Kleopatra PROPERTIES DESCRIPTION "The Kleopatra libraries (from kdepim)" URL "http://kde.org/" TYPE OPTIONAL PURPOSE "Required for the Cryptography plugin") find_package(Libgadu QUIET) set_package_properties(Libgadu PROPERTIES DESCRIPTION "A library providing support for the Gadu-Gadu protocol" URL "http://www.toxygen.net/libgadu" TYPE OPTIONAL PURPOSE "Required for the Gadu-Gadu protocol") find_package(LibMeanwhile QUIET) set_package_properties(LibMeanwhile PROPERTIES DESCRIPTION "A library for protocol support for connection to sametime servers" URL "http://meanwhile.sourceforge.net/" TYPE OPTIONAL PURPOSE "Required for the meanwhile protocol") -find_package(Libmsn QUIET) -set_package_properties(Libmsn PROPERTIES DESCRIPTION "A library providing support for the msn protocol" URL "http://libmsn.sourceforge.net/" TYPE OPTIONAL PURPOSE "Required for the WLM protocol") - find_package(LiboRTP QUIET) -set_package_properties(LiboRTP PROPERTIES DESCRIPTION "oRTP provides an API to send rtp packets" URL "http://www.linphone.org/index.php/eng/code_review/ortp/" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol with libjingle support and for the WLM protocol with voice clips support") +set_package_properties(LiboRTP PROPERTIES DESCRIPTION "oRTP provides an API to send rtp packets" URL "http://www.linphone.org/index.php/eng/code_review/ortp/" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol with libjingle support") find_package(LibOTR QUIET) set_package_properties(LibOTR PROPERTIES DESCRIPTION "Library to encrypt messages with off-the-record encryption" URL "http://www.cypherpunks.ca/otr/" TYPE OPTIONAL PURPOSE "Required for the OTR plugin") find_package(LibV4L2 QUIET) set_package_properties(LibV4L2 PROPERTIES DESCRIPTION "Collection of video4linux support libraries" URL "http://hansdegoede.livejournal.com http://linuxtv.org/hq/~hgoede/libv4l/" TYPE OPTIONAL PURPOSE "Required for better webcam support on Linux") find_package(LibXml2 QUIET) set_package_properties(LibXml2 PROPERTIES DESCRIPTION "Libraries used to develop XML applications" URL "http://www.xmlsoft.org/" TYPE OPTIONAL PURPOSE "Required for Webpresence plugin") find_package(LibXslt QUIET) set_package_properties(LibXslt PROPERTIES DESCRIPTION "A library to transform XML files into other XML files" URL "http://www.xmlsoft.org/XSLT/" TYPE OPTIONAL PURPOSE "Required for the Webpresence plugin") find_package(Mediastreamer QUIET) -set_package_properties(Mediastreamer PROPERTIES DESCRIPTION "A streaming enginer specialized for voice/video telephony applications" URL "http://www.linphone.org/index.php/eng/code_review/mediastreamer2/" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol with libjingle support and for the WLM protocol with voice clips support") +set_package_properties(Mediastreamer PROPERTIES DESCRIPTION "A streaming enginer specialized for voice/video telephony applications" URL "http://www.linphone.org/index.php/eng/code_review/mediastreamer2/" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol with libjingle support") find_package(OpenSSL QUIET) set_package_properties(OpenSSL PROPERTIES DESCRIPTION "OpenSSL implementation of SSL" URL "https://www.openssl.org/" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol with libjingle support") find_package(Qca-qt5 2.1.0) set_package_properties(Qca-qt5 PROPERTIES DESCRIPTION "Support for encryption" URL "http://download.kde.org/stable/qca-qt5/" TYPE RECOMMENDED) set(GPGMEPP_LIB_VERSION "1.8.0") find_package(Gpgmepp ${GPGMEPP_LIB_VERSION} CONFIG REQUIRED) find_package(Sqlite QUIET) set_package_properties(Sqlite PROPERTIES DESCRIPTION "SQLite is a Binary-Database" URL "http://www.sqlite.org" TYPE OPTIONAL PURPOSE "Required for the Statistic plugin") find_package(Speex QUIET) set_package_properties(Speex PROPERTIES DESCRIPTION "Speex is an encoder/decoder for the speex audio format" URL "http://www.speex.org/" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol with Jingle support") find_package(SRTP QUIET) set_package_properties(SRTP PROPERTIES DESCRIPTION "SRTP provides an implementation of the Secure Real-time Transport protocol(SRTP)" URL "http://srtp.sourceforge.net/srtp.html" TYPE OPTIONAL PURPOSE "Required for the Jabber protocol with libjingle support") find_package(Xmms QUIET) set_package_properties(Xmms PROPERTIES DESCRIPTION "X Multimedia System development libraries" URL "http://www.xmms.org/" TYPE OPTIONAL PURPOSE "Required for the Nowlistening plugin with XMMS player support") find_package(ZLIB QUIET) set_package_properties(ZLIB PROPERTIES DESCRIPTION "Zlib is a library implementing the deflate compression method" URL "http://zlib.net/" TYPE OPTIONAL PURPOSE "Required for the GroupWise and Jabber protocols") if(Q_WS_X11) macro_log_feature(X11_Xss_FOUND "libXss" "libXss provides access to screen server X11 extension" "" FALSE "" "Required for idle timer on X11") endif() set(KOPETE_INCLUDES ${KDEPIMLIBS_INCLUDE_DIRS} ${KOPETE_SOURCE_DIR}/libkopete/ ${KOPETE_BINARY_DIR}/libkopete/ ${KOPETE_SOURCE_DIR}/libkopete/ui/ ${KOPETE_SOURCE_DIR}/libkopete/private/ ${KOPETE_SOURCE_DIR}/libkopete/contactlist/ ${KOPETE_SOURCE_DIR}/libkopete/tasks/ ) add_subdirectory(libkopete) add_subdirectory(kopete) add_subdirectory(protocols) add_subdirectory(plugins) add_subdirectory(icons) add_subdirectory(sounds) add_subdirectory(styles) add_subdirectory(doc) add_subdirectory(tests) install( FILES kopete.categories DESTINATION ${KDE_INSTALL_CONFDIR} ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/cmake/modules/FindLibmsn.cmake b/cmake/modules/FindLibmsn.cmake deleted file mode 100644 index d045fd463..000000000 --- a/cmake/modules/FindLibmsn.cmake +++ /dev/null @@ -1,37 +0,0 @@ -# cmake macro to test LIBMSN LIB - -# Copyright (c) 2006, Alessandro Praduroux -# Copyright (c) 2007, Urs Wolfer -# Copyright (c) 2008, Matt Rogers -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -IF (LIBMSN_INCLUDE_DIR AND LIBMSN_LIBRARIES) - # Already in cache, be silent - SET(LIBMSN_FIND_QUIETLY TRUE) -ENDIF (LIBMSN_INCLUDE_DIR AND LIBMSN_LIBRARIES) - -FIND_PATH(LIBMSN_INCLUDE_DIR msn/msn.h - PATHS ${CMAKE_INSTALL_PREFIX} - PATH_SUFFIXES msn ) - -FIND_LIBRARY(LIBMSN_LIBRARIES NAMES msn libmsn - PATHS ${CMAKE_INSTALL_PREFIX} - PATH_SUFFIXES lib) - -if (LIBMSN_INCLUDE_DIR AND LIBMSN_LIBRARIES) - SET(LIBMSN_FOUND TRUE) -endif(LIBMSN_INCLUDE_DIR AND LIBMSN_LIBRARIES) - -IF (LIBMSN_FOUND) - IF (NOT LIBMSN_FIND_QUIETLY) - MESSAGE(STATUS "Found LibMSN: ${LIBMSN_LIBRARIES}") - ENDIF (NOT LIBMSN_FIND_QUIETLY) -ELSE (LIBMSN_FOUND) - IF (LIBMSN_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could NOT find an acceptable version of LibMSN (version 0.4 or later required)") - ENDIF (LIBMSN_FIND_REQUIRED) -ENDIF (LIBMSN_FOUND) - -MARK_AS_ADVANCED(LIBMSN_INCLUDE_DIR LIBMSN_LIBRARIES) diff --git a/doc/index.docbook b/doc/index.docbook index 7cb4f2181..10dc99a07 100644 --- a/doc/index.docbook +++ b/doc/index.docbook @@ -1,1224 +1,1212 @@ WillStephenson"> lists@stevello.free-online.co.uk"> MattRogers"> mattr@kde.org"> MichaëlLarouche"> michael.larouche@kdemail.net"> OlivierGoffart"> ogoffart@kde.org"> CharlesConnell"> charles@connells.org"> IM"> ASCII"> ]> The &kopete; Handbook &Will.Stephenson; &Will.Stephenson.mail; &Matt.Rogers; &Matt.Rogers.mail; &Michael.Larouche; &Michael.Larouche.mail; &FDLNotice; 2006-12-15 0.12 2003, 2004, 2005, 2006, 2007 &kopete; is the multi-protocol instant messenger client by the &kde; community. KDE IM Instant Messaging Jabber IRC -WLM ICQ AIM Yahoo Gadu-Gadu GroupWise Novell WinPopup SMS Introduction &kopete;, the &kde; instant messaging client Before starting... If you're not familiar with Instant Messaging, please read the Getting Started section to learn about this wonderful world before continuing. What is &kopete;? &kopete; is the &kde; instant messaging (&im;) client. It allows you to communicate with your friends and colleagues using various instant messaging services. A single program is easy to learn and convenient if your friends or colleagues use more than one &im; service. &kopete; is designed to integrate well with your &kde; desktop; to make it immediately familiar. The user interface is clean and simple, without any frills to distract the user. At the same time, &kopete; aims to make communication the focus of &im;, by removing the differences between different &im; systems. One feature &kopete; introduced to support this is the Metacontact, combining the various means there are to contact someone into a single person in your contact list. Other multiprotocol instant messengers list the same person's various &im; accounts separately, making it confusing for non experienced people. &kopete; makes life easy: a metacontact is a person, and contacts are ways to communicate with that person. You will recognize contacts in a metacontact easily as small icons representing the &im; services you could use to communicate with that person. &kopete; is intended for all levels of users. Out of the box, it supports a minimal set of functions to make chatting as easy as possible. More advanced users can add extra functions such as Statistics with &kopete;'s plugin system. More &kopete; Information on the Web If you need to contact the team, the &kopete; developers' mailing list is hosted at https://mail.kde.org/mailman/listinfo/kopete-devel. If you want live support, there is an Internet Relay Chat channel for &kopete; where you can find the team discussing technical (well, not always) issues or just hanging out. You can use any IRC client to join the channel (including &kopete;), just add an IRC contact and use irc.freenode.org as the server and #kopete as the channel name. See you there! Introduction to Instant Messaging What is Instant Messaging (&im;)? &im; is a way for you to communicate instantly with your friends over the Internet. That might not sound so different to email. Have you ever noticed how cumbersome it is to have a brief conversation via email? You have to click Reply to each message, then find the right spot in the message to type something new, then send it. Then you have to wait for the next message to arrive! &im; lets you to have a conversation almost as naturally as on the phone or face to face, by typing messages into a window shared between you and your friend's screens. Another difference between &im; and email is that with &im; you can see your friends' presence, that is, whether they are actually on-line at the same time as you. This lets you send messages truly instantly, instead of sending off a mail and having to wait for your friend to check their mailbox. An &im; message pops up on the other person's screen as soon as you send it. Of course, if you'd rather not be interrupted, you can change your own presence so others will know not to disturb you. There are lots of other fun and useful &im; features you can explore with &kopete;, like group chats, file transfers and emoticons that reflect your mood. Read on to find out more! Getting Started To use &kopete; you need to set up one or more accounts for the instant messaging services you wish to use. You've probably already chosen a messaging service, either because you already use &im;, or you need to use the same service as your friends. If you don't fit into either of these categories, please consider using a messaging service based on open standards, because these are designed for use by Free Software. Other messaging services are prone to changing the underlying technology without making the details freely available, making them harder for Free Software developers to support. The messaging services that &kopete; supports that are based on open standards are Jabber and IRC. -The following section assumes you are registered with an &im; service already. If not, you can register with Gadu-Gadu, Jabber, and WLM from inside &kopete;; for other services, you'll have to register using their respective web site before creating an account in &kopete;. +The following section assumes you are registered with an &im; service already. If not, you can register with Gadu-Gadu, and Jabber from inside &kopete;; for other services, you'll have to register using their respective web site before creating an account in &kopete;. Creating Accounts To create an account, use Settings Configure... to display the Configure window. The Configure window is the main way to set up and customize &kopete;. On the left a column of icons control which aspect of &kopete; is being configured. Click the Accounts icon. The main pane will change to display the account management pane. This is currently empty, but will soon list your &im; accounts. Click Add Account to display the Account Wizard. The Account Wizard helps you create an &im; account. On the first page, you are asked to select the messaging service that you'd like to use. Click one of the services shown and then click Next. On the following page, you should enter your registration details for that instant messaging service. Most services just require you to enter a username or unique identifying number (UIN) and password. The special purpose services Winpopup and SMS work slightly differently, so please see their specific sections. There are a couple of other options that apply to most services that you should look at: Remember passwordWhen this is checked, &kopete; will store the password for you, so you don't have to enter it every time you connect to the &im; service. If you are security-conscious or want to limit access to the &im; account you can leave this unchecked. Connect at startupWhen this is checked, &kopete; will try to connect to the &im; service as when it starts. If you use a LAN, DSL or other always-on connection, this is appropriate; dial-up modem users should turn this off and connect manually when you have dialed up. Once you've entered your &im; details, you can proceed to the Finished! page and then dismiss the wizard and the Configure window. Go Online and Start Chatting! Now you'll notice that an icon representing the account has appeared in the status bar at the bottom of the &kopete; Contact List window. This represents your current presence for this account. Right click on it and you can go online from the menu that appears. The status bar icon will animate while &kopete; connects to the &im; service. Once you're online, if you've used this &im; service before, your contacts will be fetched from the server and displayed in the Contact List. To start a chat with a contact, just click their name and a Chat window will appear. The upper part of the window is where the conversation appears - to say something, type into the bottom part of the window and click Send. If you've just created a new account you won't have any contacts. See Adding Contacts for details on how to add contacts. The shortcut for Send is set to &Ctrl;&Enter; by default; you can change it in the Chat window using SettingsConfigure Shortcuts.... Using &kopete; This chapter gives an overview of &kopete;'s basic features. We will look first at the contact list, where your contacts are displayed, and then at the Chat window, where you carry out a conversation. The Contact List The Contact List appears when you start &kopete;. It's the main window where you can set your presence, start a chat, organize your contacts, configure &kopete; and quit. Layout of the Contact List window MenuYou will usually find the menubar at the top of the contact list. If it is not there, you might have turned it off; you can re-enable it with &Ctrl;M. Details on each menu item can be found in the chapter on menu structure. Tool barThe toolbar holds the most frequently used &kopete; actions. You can customize it with Settings Configure Toolbars.... Notice the Show Offline Users and Show Empty Groups buttons. With these you can hide contacts and groups that are offline. &kopete; makes it even easier to set a status message to let your contacts know about your mood or why you're busy at the moment. Click on the Set Status Message button and start typing to enter a new message, or choose from one of the previous messages you have used. The Quick Search Toolbar quickly filters the contact list, by typing a few letters from a contact's name. Contact ListThe Contact List takes up the main part of the window. All your contacts are listed here, in the groups you have chosen for them. You can open or close groups by clicking the plus symbol adjacent to the group. You can reverse the order the groups are sorted in by clicking the Contacts label above the list. The context menu in the Contact List changes depending on the item under the mouse. Groups, Metacontacts and &im; system specific contacts have their own options. In empty areas of the Contact List, the context menu allows you to add contacts or groups, or change the viewing options for the list. Status barThe status bar shows an icon for each &im; account you have created. The icons represent the current presence of each account, which can be changed by right-clicking the account icon. &kopete; also shows your current status message in the Status Bar>. By clicking on the note icon in the corner, you can change or clear the status message as well. Setting Your Presence We introduced you to setting presence in the previous chapter. 'Presence' determines how visible you are on the &im; network. To use the network at all, you have to connect to the network, so you can send and receive messages and see others' presence. Once you are connected, most &im; systems allow you to indicate what you're doing and whether you want to chat by setting special types of presence such as Away or Free For Chat. The difference presence settings are particular to each away system; but &kopete; allows you some control all your &im; systems at once by setting them to Away or Available at the same time. You set your presence for individual &im; accounts by right clicking the account's icon in the status bar at the bottom of the Contact List. The context menu for each account lets you choose the possible presence settings for each &im; system. To change all your accounts' presence together, click the Status, or use the File Status menu. Start A Chat From The Contact List To start a chat from the Contact List, simply click a contact. A Chat window will appear. You can also right click a contact and select either Send Message or Start Chat. Send Message works differently in that it just sends a single message without opening the Chat window, using a simple dialog. Use it for fire-and-forget messages. Send A File You can send files from the Contact List, using the context menu on the person you want to send to. If &kopete; supports file transfer on their &im; system, there will be a Send File... item. Alternatively, you can drag a file from anywhere else in &kde; onto their name to start a file transfer. Organizing Contacts A Word about Metacontacts One of the principles behind &kopete; is that it offers a standardized way to use &im; systems. Differences between &im; systems are smoothed over, making it easier to communicate. We follow this principle in the way contacts are organized. When you use &kopete; you just find contacts by name; the actual &im; system used is less important. Some people have more than one &im; account - &kopete; puts the person using the account first. To support this, &kopete; introduced Metacontacts, which represent the person you want to chat with. One Metacontact contains all the different &im; IDs they may have, making it easy to see with a glance at the Metacontact 'smiley icon' whether someone is available, regardless of which &im; system they are using right now. A Word about Grouping Contacts &kopete; lets you create groups to sort your contacts. A contact may be in more than one group. Where possible, groupings are saved on server side contact lists, so if you use other &im; programs, group memberships are kept in sync. However, if you change groups in another &im; program, &kopete; cannot know to move a metacontact automatically; it is up to you to resolve this by hand. To change the group a metacontact appears in, you can use its context menu to move it or copy it to a new group, or remove it from a group. You can also use drag and drop here - just drop the metacontact on a different group name. Adding Contacts To add a contact, either select FileAdd Contact or click the Add button on the toolbar. This brings up the Add Contact Wizard. The Add Contact Wizard creates a new Metacontact using one or more &im; systems, by leading you through the following pages. Welcome Page. Here you can choose whether you want to use the &kde; Address Book for this contact. Storing &im; information in the &kde; Address Book will enable other &kde; &im; programs to share contact information with &kopete; and in future &kde; applications may use &kopete; to send information via &im;. If you prefer to keep your &im; contacts separated, clear the check box here. Choose &kde; Address Book entry. By choosing an entry from your &kde; Address Book, you can use its name as a Display Name in &kopete;. You can also create a new entry here. This page doesn't show if you chose not to use the &kde; Address Book. Select Display Name and Group. Here you can enter a Display Name (the name used for this person inside &kopete;), and choose the groups they are a member of. Select &im; Accounts. Here you can choose which accounts you want to use to chat to the new contact. If you only have one &im; account, you won't see this screen. Account-specific Add Contact Pages. For each account, you'll get one page where you can enter the UIN, buddy name or Email address, depending on the &im; system in use. Finish Screen. All done. Except if the &im; system requires authorization (such as ICQ) to add a contact to your list - in which case, you'll be prompted after the wizard exits. You can add contacts to an existing Metacontact using its context menu. Renaming Contacts You can rename a contact using EditRename Contact or with the same item on the metacontact context menu. Some &im; systems allow you to set a Display Name that is different to your username, such as Alice loves crypto!. If you change a contact's name manually, this will override their Display Name. To get it back, open the Properties dialog for that contact and check the Use the name given by the server checkbox. Removing Contacts If you no longer want a contact to be in the contact list, you can remove a Metacontact and all the contacts under it with Metacontact context menuRemove Contact. Moving Contacts between Metacontacts You can change the metacontact a contact belongs to. In practice, you only have to do this when you have just added multiple accounts to &kopete;, and you know that HotDog76 and mikejones@hotmail.com are both the same person. There are two ways to do this: Drag and DropThe contact icon to the right of the metacontact name may be dragged from one metacontact to another. Contact Context MenuThe context menu for contacts (Right-click the contact icon) allows you to choose the new metacontact from a dialog. If the move would leave a Metacontact empty (with no contacts), you'll be asked if you want to delete this contact. Removing Contacts from Metacontacts To remove a contact from a Metacontact, choose Contact context menuDelete Contact.... Configure &kopete; You can configure &kopete; using SettingsConfigure.... See the next chapter for details. Exiting &kopete; To exit &kopete; you should use FileQuit, &Ctrl;Q, or the &kopete; System Tray icon's context menu. If you just close the Contact List window, &kopete; will continue to run in the &kde; System Tray. Keyboard shortcuts The following keyboard shortcuts are supported in the Contact List window: Keyboard Shortcut Action Up Arrow Select the previous item in the contact list. Down Arrow Select the next item in the contact list. Left Arrow Close the current group. Right Arrow Open the current group. &Enter; Start a chat with the selected contact. &Ctrl;M Show/Hide the menu bar. &Ctrl;U Show/Hide offline users. &Ctrl;G Show/Hide empty groups. The Chat Window Layout of the Chat Window The Chat ViewThe Chat View usually takes up most of the Chat window and is where the conversation between you and your contacts takes place. Messages appear in the order they are received, with the earliest messages at the top of the view. You can control the appearance of the Chat View, making it look like other &im; clients or create a completely individual look. Chat Members List Since some &im; systems allow you to chat as a group, it is useful to see who is chatting at the moment. The Chat Members List appears to the left or the right of the Chat View. You can change this using SettingsChat Members List. The contact context menu is available in the Chat Members List. Input AreaThe Input Area is below the Chat View. This is where you type messages before sending them. You can change the font and color of the message using the usual tools on the toolbar. If the &im; system supports this, your messages will appear in color when your contacts read them.By default, the keyboard shortcut to send messages is &Enter;. Status BarThe Status Bar contains temporary messages, such as notification that someone else is typing, as well as the Send button. Tabbing&kopete; lets you carry on multiple conversations in one window, by putting each one in its own tab within the window. The tab titles change color to show when a new message has been received: RedSomeone typed a message. GreenSomeone is typing a message. BlueSomeone typed a message containing your nickname. There are several different ways to control grouping. To configure this behavior, go to the Chat tab of the Behavior page of the Configure &kopete; dialog. You can also move chats between windows using the Tabs menu, and control the placement of the tabs in the window. Group Chats in &kopete; You can use &kopete; to chat one to one, or in a group, where the &im; system supports this. To invite others into a chat, drag them from the Contact List into the chat window, or use ChatInvite<contact name>. File Transfers Some &im; systems allow you to send and receive files. You can access this function from the contact's context menu. If you're already chatting, and want to send a file, simply drag the file from any other part of &kde; into the Chat Window, or select the ChatSend File menu. Keyboard Shortcuts The following keyboard shortcuts are supported in the Chat window: Keyboard Shortcut Action &Enter; Send the message in the Input Area. &Ctrl;P Print the contents of the Chat View. &Ctrl;S Save the contents of the Chat View. &Ctrl;W Close the current Chat View. The Chat window will close unless there is more than one tab in the window. &Ctrl;, Change to the previous tab. &Ctrl;. Change to the next tab. &Ctrl;&Shift;B Detach a tabbed chat into a separate window. Complete a partially typed nickname belonging to someone you're chatting with. Configuring &kopete; To configure &kopete;, look in the Settings menu. Global Shortcuts &kopete; defines some shortcuts which are valid in any &kde; application. Global Keyboard Shortcuts Action &Ctrl;&Shift;I Read Message. This is useful if you have hidden the Contact List window and the system tray icon is animating to tell you you have a new message. &Ctrl;&Shift;C Show/hide (Dock) the Contact List window. Warning: If you have disabled &kopete;'s System Tray icon or don't have a system tray, this can make the Contact List vanish - the only way to restore it is to repeat this shortcut. The Configure &kopete; Dialog Adding and Editing Accounts We briefly showed you how to add an account in Getting Started. To change an account's settings later, open up the Configure &kopete; dialog, with SettingsConfigure.... Much like the &kde; &systemsettings;, the configuration is separated into sections. The icons on the left side of the dialog switch between sections. On the Accounts page, you can Add, Remove, or Modify accounts. Editing accounts is much the same as adding them, but note that you cannot change the UIN, buddy name, or whatever account identifier your &im; system uses. This is intrinsic to the account. If you want to change this, you will have to add another account with the new account identifier and (optionally) remove the old account. You can quickly distinguish between multiple accounts using the same &im; system by giving a custom color to each account's status bar entry and contact icons. To do so, select the account and click the color selector on the right side of the page. You can control the priority of accounts using the Up and Down icons on this page. If you have more than one way to message a contact, this determines the &im; system &kopete; will use to communicate them. Global Identity &kopete;'s Global Identity lets you set your own nickname and photo once for all your &im; accounts. You can read these details from the &kde; address book entry for yourself, from a single one of your contacts, or add a completely new nickname or photo. If you have an exciting dual life, you can create multiple identities and switch between them in the Identity section. Behavior Behavior covers the way &kopete; integrates with your desktop, Away settings, and chat user interface options. The General tab Here you can customize &kopete;'s desktop integration, and control the way the contact list is laid out. Show system tray icon By default, &kopete; places an icon in the &kde; System Tray. If you prefer, you can turn this off here. Start with hidden main window This causes &kopete; to start with the Contact List window hidden (docked). You can make it visible by clicking the system tray icon or with the Show Contact List global shortcut. Open messages instantly New messages open chat windows as soon as they arrive. Use message queue The message queue is where &kopete; puts messages when there is no chat window open. This allows you to be notified of new messages with popup speech bubbles; or by animating the System Tray icon. If you choose to disable the message queue, chat windows will open as soon as you receive a new message. Use message stack If you use a message stack, &kopete; shows recently received messages starting with the last message received. Notifications Show a bubble on new message This option shows a speech bubble; coming from the System Tray icon when you receive a new message. You can start a chat or ignore the message. &URL;s are extracted from the message; if you click a link, your preferred browser will open the link and the message will be dismissed. Flash the system tray on new messages This option causes the System Tray icon to animate when you receive a new message. Clicking the icon will show the message in a chat window. Enable events while away If you do not wish to be distracted by these notifications while you are set Away, uncheck this box. Configure Sounds & Events Sounds, flashing taskbar entries, passive popups and more exotic notifications are supported in &kopete; using the &kde; notification system. Type help:/kcontrol/kcmnotify in &konqueror; or select the Help tab in the System Notifications section of the &systemsettings; for more information. To add custom notifications for a contact, right click that contact in the Contact List and select Properties. This lets you start chats, play a custom sound effect, or display a message for that contact or group. Otherwise you can use the Execute a program notification to perform custom notifications. As an example, if you have XOSD (X On-Screen Display) installed, you can get OSD online notifications by executing the following command when the User goes online event takes place: echo %s | osd_cat -o 100 -p bottom -A center -f -*-helvetica-*-r-*-*-24-*-*-*-*-*-*-* -O 2 -c gold OhReally at the &kde; Forum suggests having your online notifications read out by a speech synthesizer, using MBROLA like so: echo %s | sed -e 's/online/onlaain/i' | /usr/local/bin/mbrdico.dutch.female The 'sed' in the middle phoneticises &kopete;'s output to so the synthesizer has a better Dutch pronunciation. Away Settings Notify all open chats when I go away Be careful if you enable this item; it will cause a message to be sent to open chats when you become away, which some people may find intrusive. Auto Away Here you can choose to have &kopete; set you away after a period of inactivity. Predefined Away Messages You can define as many custom away messages as you like here, and choose from them when you go Away using the Status button on the main toolbar. Chat Settings Raise window/tab on new messages This causes a chat window to pop up when it receives a new message. Show events in chat window Some &im; systems can give extra information, like people joining or leaving chats. This option lets you receive these messages in your chat window. Highlight messages containing your nickname This simply emphasizes messages in a chat that contain your nickname. For more powerful control over highlighting and other events, see the Highlight plugin. Interface Preference &kopete; can send messages using either a fire and forget interface that does not wait for a reply, or a chat window where the conversation is visible as it unfolds. Here you can choose which style to use by default. Chat Window Grouping Policy If you wish to group chats within tabs in a single window, &kopete; lets you choose several ways to determine the grouping. Open all messages in a new chat window Group all messages from the same account in the same chat window Group all messages in the same chat window Group all messages in the same group in the same chat window Group all messages from the same metacontact in the same chat window Chat Window Line Limit Maximum number of chat window lines This limits the number of lines of text the chat window can display. Appearance Appearance governs the style of the Chat window, its colors and fonts, and lets you choose your preferred emoticons. Emoticons Emoticons (also known as smileys) are combinations of characters such as ;-)that look like a face, and communicate moods or expressions. &kopete; can optionally use graphical emoticons in place of the characters themselves. On this tab, you can select which emoticon set you prefer, or turn off graphical emoticons altogether. Chat Window Styles The style of the chat view can be altered to look like other clients. Installed styles are shown in the list on the left and are previewed in the main panel. See Chat Window Style guide for a document how to make your own style. Third party styles are available at the KDE Store. &kopete; 0.12 now supports styles from Adium(an &im; program on &Mac; OS X). So you can download styles from Adium here: Adium Xtras and select Message View Styles. To install a style, click Install.... Select an archive file containing the style. To delete a style, select a style in the list and click Delete. Group consecutive messages is a useful option to make your chats more readable. If you receive several messages in a row from the same contact, they are grouped without repeating the sender name. Contact List Arrange metacontacts by group By disabling this, &kopete;'s groups are hidden, and contacts are divided only into Online Contacts and Offline Contacts. Show tree branch lines Usually &kopete; displays contacts and groups as a tree, where group members are indented. For a simpler appearance, you can disable this, so the contact list becomes a flat list. You can also control whether branches are indented here. Contact Display Mode There are several ways you can present the contact list here. Of particular interest may be the Use contact photos when available option, that shows the contact list using photos chosen by your contacts or the &kde; Address Book Contact List Animations This controls the degree of animation of the contact list. Turning this off will make &kopete; more responsive on slower machines. Contact List Auto-Hide By enabling this, the contact list will automatically disappear a few seconds after the pointer leaves the window. Change Tooltip Contents... You have a lot of control over how much or how little detail appears in the tooltips shown on the contact list using this dialog. Colors and Fonts Chat Window Colors Here you can alter the base font and text colors used for chatting. Formatting Overrides If your contacts tend to choose fonts and colors that you dislike, you can tell &kopete; to ignore these and use your regular font. Contact List Some &im; systems let you see whether contacts are idle at their computers. This option enables you to change the color used for idle contacts. Devices The Devices section allows you to choose and configure which multimedia devices are used for A/V chatting. Whether this works for you is highly dependent on the hardware you have and how well it is supported by your operating system. Video &kopete; uses the Video4Linux 2 system for video. This shows a blue square if no video device is found, or a preview if the camera is working. For up-to-date information on &kopete; webcam support, see the Kopete Webcam Support wiki page. Audio Audio support in &kopete; is at an experimental stage. If you have an Audio tab, you are probably using a preview build of &kopete;. Loading Plugins You can customize &kopete; with special functions that may be useful or just a bit of fun. Bring up the Select and Configure Plugins panel with SettingsConfigure... and then the Plugins entry. Plugins can be turned on or off in the list on the left side of the page. Each plugin may be configured on the right side. See the chapter on plugins for details on each plugin. &kopete;'s Protocols &kopete; calls different &im; systems 'Protocols'. When you add an account, it is specific to a single protocol. Although &kopete; tries to make instant messaging appear the same, no matter what protocol you use, there are some differences in the level of support for advanced features such as file transfer and multimedia. Protocols AIM AIM supports chatrooms. Use the Join Chat... command on the AIM account menu to join a chatroom. Contact pictures and custom emoticons are also supported. ICQ ICQ has an Invisibility feature which allows you to hide from selected contacts. You may also search the ICQ user folder when adding a contact. A wide range of contact details can be set using the Properties option. - - WLM - File transfer and multi user chats work. To transfer a file, drag the file from &dolphin; or the desktop into the chat window. To invite someone else into a chat, drag them from the Contact List into the chat window. The File menu also contains these commands. In addition, WLM supports custom emoticons. - To use file transfer, make sure port 6891 is forwarded to your computer. - Yahoo Yahoo can send and receive webcam video. It also supports Yahoo mail and the Yahoo address book from the account menu. Conferencing is also possible. Jabber Jabber, also known as XMPP, supports file transfer, conferencing and any other services supplied by the Jabber server. For example, many Jabber servers have a user directory, and some provide transports to other messaging systems. To access services, use Services... on the account menu. Jabber file transfer can work without port forwarding, but enjoys better performance where a direct connection is possible. By default, port 8010 is used for port forwarding, but this is configurable in each account's settings. Google Talk Since Google Talk is based upon Jabber, it is well supported in &kopete; with the exception of voice chat, which is worked upon. To configure &kopete; for Google Talk: Use your complete Google Mail address as the user name. Check Use protocol encryption (SSL), Allow plain-text password authentication and Override default server information. The server is talk.google.com or gmail.com and ports 443 or 5223 should be used. Novell GroupWise GroupWise Messenger is an enterprise messenging system from Novell Inc. The full range of features are supported, including privacy, group chat, rich text and user search. Gadu-Gadu Gadu-Gadu is a chat system originating from Poland. At present, &kopete; supports basic chat functions. WinPopup WinPopup is a way to use &kopete; to send and receive messages with &Windows; computers on the local network. The WinPopup protocol only supports single, plain-text messages. Other protocols As well as the protocols named above, &kopete; has support for several other protocols. In most cases, this is not enabled by default or an additional plugin must be installed. Meanwhile, SMS, Skype and SILC are provided in this way. However, the &kopete; team are not responsible for these protocols. &kopete;'s Plugins &kopete; offers plugins that provide functions that aren't essential for messaging, but are useful for some people. Plugins Auto Replace Auto Replace allows you to correct frequently misspelled words or save typing certain words using abbreviations. Bookmarks The Bookmarks plugin creates bookmarks in your &kde; bookmarks list from URLs that are received in &im; messages. Contact Notes Contact Notes allows you to note down any useful bits of information on a metacontact. &Olivier.Goffart; &Olivier.Goffart.mail; &Charles.Connell; &Charles.Connell.mail; 2007-10-14 1.3.0 Cryptography The Cryptography plugin allows you to send and receive encrypted and/or signed messages. Cryptography lets you use an OpenPGP implementation to encrypt and sign messages in conversations. Note that this is not the same as an SSL secured chat session. Cryptography can encrypt your messages to a single individual so that only the holder of the matching key can read it. If you wish that the recipient of your messages can verify that you have sent your messages, you may sign messages. Signing and encryption can be used separately or together. When you receive a message, if it has been encrypted, you will see a lock icon. If it has been signed with a verifiable signature (you have the public key of the sender), you will see a pen icon. For a non-verifiable signature, a red pen icon will be shown. To configure Cryptography, select your private key in the plugin configuration page. Then, using Select Public Key... from each meta-contact's context menu, choose their public key. You will be prompted for your passphrase when using this plugin. Due to limitations in some of the instant messaging protocols that &kopete; uses, encrypted messages cannot be sent with those protocols. If you attempt to use an unsupported protocol, you will be warned. Cryptography can use the public keys stored in your &kde; address book for each contact. However, it must be able to know which address book entry is associated with which meta-contact. To provide this information, choose Properties from the meta-contact context menu, and then set the Address Book Link. Cryptography can also export public keys that you have set to your address book. If a meta-contact has an address book link, then the key will go in the correct address book entry, replacing an existing one. If no link exists (possibly because no address book entry exists for the individual in question), a new entry will be created. This entry will have two fields filled: the public key from &kopete; and the meta-contact's display name. Documentation copyright © &Olivier.Goffart; &Olivier.Goffart.mail; and © 2007 &Charles.Connell; &Charles.Connell.mail; Highlight Highlight works a little like email filters, in that it allows you to make things happen in response to particular messages. As well as highlighting the text, you can play sounds. History The History plugin, when activated, records conversations using any &im; system and allows you to view old conversations later. A History item appears in each Metacontact's context menu so you can view the message history for that metacontact. The following item is added to the Contact List's menus: Edit View History (Enabled when a contact is selected) This displays the History browser for the selected contact. The following items are added to the Chat window's menus: &Alt;&Shift;Left Arrow Tools History Previous This enables you to view the next oldest set of messages from the History in the Chat window. &Alt;&Shift;Right Arrow Tools History Next This shows the next newest set of messages from the History in the Chat window. Tools History Last This shows the most recent set of messages from the History in the Chat window. KopeteTeX KopeteTeX allows scientists and mathematicians to hold conversations using the LaTeX markup language. Expressions entered within $$ are rendered as a graphic in the chatwindow, and can be cut and pasted as the original Latex. To use this plugin you must have LaTeX installed Now Listening With the Now Listening plugin, let people you're chatting with know what you're listening to, by typing /media in a chat, or with ToolsSend Media Info in the Chat window. OTR The OTR plugin allows you to encrypt conversations using the Off-The-Record encryption method. This encryption method basically works like the PGP encryption but it is optimized for instant messaging and handles the key exchange on its own. The only thing you have to do, is to make sure that you really are writing to the person you expect by using one of OTR's authentication mechanisms. Menu items The following item is added to the Contact List's menus: Edit OTR Policy (Enabled when a contact is selected) You can set the encryption policy for each contact here. Setting this entry to "Default" causes &kopete; to use the default setting in the configure dialog The following items are added to the Chat window's menus: Tools OTR Settings Start OTR session This lets you initiate an OTR encrypted session. Tools OTR Settings End OTR session This lets you end a previously established OTR session. Tools OTR Settings Authenticate contact Use this menu entry if you wish to authenticate the contact. The settings dialog In the setting dialog you have various options to set the modules behaviour during your chatsessions. The most important of them is the default policy configuration. Set the policy to "Opportunistic" if you wish &kopete; to check if you contacts support OTR and establish an encrypted session on its own or to "Manual" if you wish to control each encryption state on your own. The options "Always" and "Never" are recommended only for experienced users that wish to set the policy on a per-contact base. In the "Private Keys" Pane you have the possibility to create you personal keypair for each account. You don't need to do this manually. If an account does not have a keypair it will be generated automatically the first time it is required. In the "Known Fingerprints" tab you have the possibility to see, verify and delete known public fingerprints of your contacts. Authentication You've probably received email from people pretending to be banks, credit agencies, even wealthy Nigerian expatriates. People lie about who they are all the time on the Internet. Authentication is a way to make sure that nobody can lie to you about who they are when they use OTR. When to authenticate You should authenticate a buddy the very first time that you talk to them using OTR. If you don't, then you cannot really be sure that someone else isn't impersonating them or trying to listen in on your conversation. However, once you've authenticated your buddy once, you don't have to do it again. OTR will automatically do the authentication for all of your future conversations with that buddy. The only exceptions occur when your buddy switches between multiple computers or multiple &im; accounts. In this case, you will need to authenticate once for each computer and account. Once you've done this, your buddy can freely use any of the computers you've authenticated them on, and OTR will recognize them automatically. If your buddy uses a new computer or account that OTR does not recognize, a message will pop up in your conversation window telling you about it. When to authenticate How to authenticate To authenticate someone, open a conversation with them and click on "Authenticate Contact" on the OTR button. A wizard will be shown, asking you what authentication method you would like to use. Please follow the steps in this wizard. If the authentication was successful, then you know that you are really talking to your friend. Any imposter should have a hard time guessing what you're typing in, so you'll be able to catch them in the act. Pipes Pipes allows you to pipe incoming or outgoing messages through an external script or executable. An incoming message will be piped through the executable before it reaches your chat window, while outgoing messages will be piped through the executable before they are sent over the Internet. Pipes can receive text in one of three forms: Plain text body The body of the message, in plain &ascii; text &HTML; text body The body of the message, in &HTML;, as it would be if your chat peer had sent &HTML; to you, which will be rendered in the chat window &XML; full message An &XML; document that describes all the characteristics of the message, including the &HTML; body. For most purposes, you probably want to use the plain text body or &HTML; text body options. These can be used with programs such as translators or summarizers. The &XML; format is only appropriate for use with a program or script written specifically to work with this plugin. If you would like to write a program or script that does work with this plugin, see the more detailed documentation. Statistics This plugin uses a database to gather information about your contacts' activity patterns. You can use this to see when a contact is usually online, for example. Text Effect Text Effect applies funny effects to your messages before sending them, like coloring them or changing the case of the words. Just don't forget you have activated it - we've had bug reports from forgetful Text Effect users! Translator The Translator plugin lets you define a preferred language for each Metacontact, and then translates messages to or from them using web based translation services such as Google. Set your own preferred language in the Select and Configure Plugins dialog. Each contact's preferred language can be set on its context menu. The following item is added to the Chat window's menus: &Ctrl;T Tools Translate If you did not turn on automatic translation, this translates the current chat. Web Presence Web Presence allows you to publicize your &im; presence on the Web. Give it the path to a file on an &FTP; server (for example), and it will upload a short piece of &HTML; to that file, which you can include in your homepage. &kde;'s network transparency makes this simple. Useful for bloggers to make friends with, or you could use it to use &im; in your business. Example: sftp://username@somehost.org/path/to/homes/user/im.html uses the SFTP protocol to upload your presence directly onto the webserver. See the KIO manuals for tips on specific network protocols. Contributing a plugin &kopete; is designed to make it easy to create plugins that give it extra functions. So if you've got a great idea to make &kopete; even better, get in touch! &kopete-menus; Frequently Asked Questions What does &kopete; mean? How do I pronounce it? &kopete;'s name comes from the chilean word Copete, meaning a drink with your friends. Duncan, the original author, recorded an audio sample. When I have more than one messaging service under a user's name in my contact list and I click on that user's name, it will message them on the wrong messaging service. You can change the order of accounts &kopete; tries to message people with by using the Up and Down arrows in the bottom right corner of the account configuration screen. &kopete; will try to connect with accounts starting from the top. However, if one service has a higher status value than the others for that user, &kopete; will use that one. For example, if a person has three services and two are marked as away and the third is marked as online, &kopete; will always try to message the user using the online service.If you click on the small protocol icon on the right of the menu item, instead of on the person's name, you will always try to contact the person using that service! I need to connect via a SOCKS proxy, but I cannot find any proxy configuration options in &kopete;. How do I set up &kopete; to use SOCKS? -WLM, ICQ, AIM, Jabber, and Yahoo use the &kde; network infrastructure. Their SOCKS proxy details are configured with the rest of &kde;, in &systemsettings;, Network and ConnectivityNetwork SettingsProxy. +ICQ, AIM, Jabber, and Yahoo use the &kde; network infrastructure. Their SOCKS proxy details are configured with the rest of &kde;, in &systemsettings;, Network and ConnectivityNetwork SettingsProxy. Is it possible to customize the icons I see in &kopete;? You can switch between different emoticons using the Emoticons tab of the Appearance page of the Configure &kopete; dialog. To install new emoticons, first look at the KDE Store, where there are a lot of additional emoticon sets to download. The emoticons are easy to install - you just place a folder containing the icon files along with an &XML; file describing the mapping from text to picture in $KDEDIR/share/apps/kopete/pics/emoticons (or $KDEHOME, for example, in /home/joeuser/.kde/). Copy the extracted folder to $KDEDIR/share/apps/kopete/pics/emoticons or $HOME/.kde/share/apps/kopete/pics/emoticons (or wherever $KDEHOME is) Select Configure &kopete; from the Settings menu and click on Appearance in the left panel of the Preferences window and click on the Emoticons tab Select the emoticons set you just installed from the list Now you can use the newly installed emoticons in &kopete; To replace the protocol icons, you'll have to replace the icons in $KDEDIR/share/apps/kopete/icons, or provide replacements to override them in the same folder under $KDEHOME. At present there aren't any complete replacement sets that you can simply extract there. I don't see any plugins listed in the Configure Plugins dialog. What's up? There are two solutions to this problem. If you used binary packages, then make sure that you used binary packages designed for your distribution, and the specific version of your distribution. Crossing distributions and versions around will not work with &kopete;. If there are no binary packages for your system, you must compile &kopete; using the source packages. If you compiled your &kde;, then &kopete; must go in the same prefix as &kde; did. If, however, you compiled the source packages, then make sure that your &kopete; is installed in the same location as your &kde;, if it is not, you can force it to do so by specifying a prefix command to cmake. Example: cmake -DCMAKE_PREFIX=/opt/kde4 (where /opt/kde4 is your prefix). To determine where your &kde; prefix is, type which dolphin in a &konsole; window. It should display something like /opt/kde4/bin/dolphin, then /opt/kde4 would be your prefix, or if it says /usr/bin/dolphin, then your prefix would be /usr. Also make sure you performed a make install, and check that there is no stale &kopete; installation from previous versions in different locations. You might also need to run kbuildsycoca4 manually after installing &kopete;. kbuildsycoca4 updates the plugin database. It runs when new software using plugins is installed, but it is possible that kopete will run &kopete; before the update has completed. I have many <desktops / monitors / computers> and / or I talk to many people at the same time, and as a result I wish &kopete; could play a <sound / pop up a message / change my wallpaper / reboot my computer > whenever I <receive a new message / someone goes online / someone goes offline > When will this be added? It is already there (surprise!). &kopete; is a &kde; application and thus makes use of KNotify for all notifications. For those who don't know, KNotify is a very powerful architecture that lets you do pretty much anything you want when an event occurs in a &kde; application. You can play a sound, pop up a passive dialog, log a message, or even run your own custom commands, such as a shell script, to do anything your heart desires. To access this treasure trove, go into the SettingsConfigure Notifications dialog. This will present you with all the different actions you can take on the events listed just above. As a tip, check out some of your other &kde; applications to see what events they let you catch. I for one find a passive popup on new emails in &kmail; to be very handy. How come file transfers don't work? There are many reasons for this. WLM was the the first protocol in which we've implemented support for file transfers. Support for file transfers in Jabber and IRC was added in &kopete; 0.9.0 (included in &kde; 3.3), and ICQ and AIM in &kopete; 0.50.0 (included in &kde; 4.0.0). Also, file transfers may not work if you're behind a firewall - see WLM section in the protocol chapter. Why all of this silly single-click behavior? It's very annoying! Kopete is a &kde; application. We are not some lame 3rd party application that decides to "look" like the rest of KDE. We also have the "feel" and "integration" aspect of KDE, which means that &kopete; follows KDE's standard "Single-click" behavior. If you would like to change this it requires you to change it in all of KDE. You can change to a double-click style by starting &systemsettings; and go to Input Devices Mouse and change to the option Double-click to open files and folders (select icons on first click). Will you make the user-interface skinnable? The only answer for this is no. &kopete; was invented to be a &kde; Instant-Messenger and this also includes having a &kde; Look-n-Feel. By adding skins we would break this rule and having both skin-support and skinless-support at once is impractical as well. Just select a different style in &kde;'s &systemsettings; and be happy to have transparent menus and other neat eye-candy today's &kde; offers. You can, however, run kopete using a different style. Just run kopete --style=marble as an example. Any valid &kde; or &Qt; style will work. I would like a feature in the next version of Kopete. Please go to &kde; Bugzilla and file a wishlist item under the application 'kopete'. Please be very detailed and proof-read what you have written to us. This is NOT a guarantee that we will add this feature in any version, but allows us to consider it. My &kopete; crashed or has/had unexpected behavior (unexpected behavior does NOT fall in the category of "Kopete doesn't act like Pidgin", &etc;). Please report this bug to us by going to &kde; Bugzilla and file a bug report under the application 'kopete'. Bugs will only be accepted if they are in English, they are detailed, and if a crash was involved they contain a backtrace (the text in the tab marked Backtrace once &kopete; has crashed). If you are using &kopete; git, however, please mail us at &kopete; developers mailing list instead of filing a bug report. Jabber SSL support stopped working, I get the message that the QCA TLS plugin is probably missing. What am I supposed to do? As the error message indicates, you are missing the QCA TLS plugin, which handles the Jabber plugin's TLS/SSL encryption. Install the package qca-tls (and eventually qca-ossl) or retrieve the plugin from its homepage. Please note that you only need to install the qca-tls plugin, not the QCA library itself. A recompilation of &kopete; is not necessary, in fact not even a restart. In case you have installed the plugin and it still won't work, Qt can probably not find it. Since qca-tls installs itself as a &Qt; plugin, you will have to make sure that it gets installed to the plugin directory of the &Qt; version you are using to run &kopete;. -I AM behind a firewall. Which ports need to be open for WLM file transfers? - -If you are behind a firewall, port 6891 needs to be open to inbound TCP traffic. - - - I use Jabber and ICQ together. Whenever I go online with Jabber, I am disconnected from ICQ with an error message about being connected from another client. What's up? Remember when you played with ICQ transports on that other Jabber client? You set up an ICQ Transport which allows you to talk to ICQ people from Jabber. ICQ doesn't allow multiple connections to the same account, and disconnects you. Look in your Jabber contacts for a contact of the form 123456@icq.jabber.org and delete it. Credits and License &kopete;: copyright 2001-2007, &kopete; Developers &underFDL; &underGPL; The Team Current Development Team Pali Rohár (pali.rohar at gmail com): Developer and Maintainer Duncan Mac-Vicar Prett (duncan at kde org): Original author, developer, and project leader Till Gerken (till at tantalo net): Developer, Jabber maintainer Olivier Goffart (ogoffart at tiscalinet be): Lead Developer, WLM Plugin Maintainer Andy Goossens (andygoossens at telenet be): Developer Grzegorz Jaskiewicz (gregj at pointblue com pl): Developer, Gadu-gadu Plugin Maintainer Jason Keirstead (jason at keirstead org): Developer &Matt.Rogers; (mattr at kde org): Lead Developer, AIM and ICQ plugin maintainer Richard Smith (lilachaze at hotmail com): Developer, UI maintainer &Will.Stephenson; (lists at stevello free-online co uk): Developer, icons, plugins, manual author Michel Hermier (michel.hermier at wanadoo fr): IRC Plugin Maintainer Andre Duffeck (andre at duffeck de): Developer: Developer, Yahoo plugin maintainer &Michael.Larouche; (michael.larouche at kdemail net): Developer, WLM, Chat Window. Former Developers (&kopete; Hall Of Fame) These people have moved on from &kopete;, so don't contact them for &kopete; support. We're eternally grateful for their contributions. Christopher TenHarmsel (tenharmsel at users sourceforge net)Developer, Oscar hacker Ryan Cumming (ryan at kde org): Core developer Richard Stellingwerff (remenic at linuxfromscratch org): Developer Hendrik vom Lehn (hennevl at hennevl de): Developer Stefan Gehn (sgehn at gmx net): Developer &Robert.Gogolok; (robertgogolock at gmx de): Developer &Nick.Betcher; (nbetcher at kde org): Original author of ICQ, AIM and IRC plugins Daniel Stone (dstone at kde org): Original Jabber plugin author James Grant (topace at lightbox org): Developer, importer Plugin author Zack Rusin (zack at kde org): Developer, old Gadu-gadu Plugin author Gav Wood (gav at kde org): WinPopup Plugin author Martijn Klingens (klingens at kde org): Developer, WLM hacker Documentation Documentation copyright 2003,2004,2005 &Will.Stephenson; (lists at stevello free-online co uk), copyright 2005 &Matt.Rogers; (mattr at kde org), copyright 2005,2006 &Michael.Larouche; (michael.larouche at kdemail net). &kopete-chatstyle; &kopete-pipes; &kopete-jabber; &kopete-icq; &kopete-emoticonspec; &documentation.index; diff --git a/kopete/kopete.notifyrc b/kopete/kopete.notifyrc index 73bd24a73..a7e7ceb62 100644 --- a/kopete/kopete.notifyrc +++ b/kopete/kopete.notifyrc @@ -1,3435 +1,3297 @@ [Global] IconName=kopete Comment=Kopete Messenger Comment[ar]=Kopete مراسل Comment[ast]=Kopete Messenger Comment[bg]=Съобщения Kopete Comment[bn]=কপেট বার্তাবাহক Comment[bs]=Kopete Poruke Comment[ca]=Missatger Kopete Comment[ca@valencia]=Missatger Kopete Comment[cs]=Kopete komunikátor Comment[cy]=Negesydd Kopete Comment[da]=Kopete Messenger Comment[de]=Kopete Messenger Comment[el]=Kopete Messenger Comment[en_GB]=Kopete Messenger Comment[eo]=Kopete mesaĝilo Comment[es]=Kopete Messenger Comment[et]=Kopete Messenger Comment[eu]=Kopete mezularitza Comment[fi]=Kopete-viestin Comment[fr]=Messager Kopete Comment[ga]=Kopete Messenger Comment[gl]=Mensaxería con Kopete Comment[he]=תוכנת המסרים המיידים Kopete Comment[hi]=के-ऑप्टी मैसेंजर Comment[hne]=के-ओप्टी मैसेंजर Comment[hr]=Kopete Messenger Comment[hu]=Kopete üzenetküldő Comment[ia]=Messagero Kopete Comment[is]=Kopete samtalsforrit Comment[it]=Messaggistica di Kopete Comment[ja]=Kopete メッセンジャー Comment[kk]=Kopete хабарласуы Comment[km]=កម្មវិធី​ផ្ញើ​សំបុត្រ Kopete Comment[ko]=Kopete 메신저 Comment[lt]=Kopete žinučių klientas Comment[lv]=Kopete ziņojumapmaiņas programma Comment[mk]=Kopete гласник Comment[ml]=കോപീറ്റ് ദൂതന്‍ Comment[nb]=Kopete lynmeldingsprogram Comment[nds]=Kopete-Kortnarichtendeenst Comment[nl]=Kopete Messenger Comment[nn]=Lynmeldingsprogrammet Kopete Comment[pa]=ਕੋਪੀਟੀ ਮੈਸੈਂਜਰ Comment[pl]=Komunikator Kopete Comment[pt]=Mensageiro Kopete Comment[pt_BR]=Mensageiro Kopete Comment[ro]=Mesagerul Kopete Comment[ru]=Программа обмена сообщениями Kopete Comment[si]=Kopete පණිවුඩකරු Comment[sk]=Kopete Messenger Comment[sl]=Sporočilnik Kopete Comment[sr]=Гласник Копете Comment[sr@ijekavian]=Гласник Копете Comment[sr@ijekavianlatin]=Glasnik Kopete Comment[sr@latin]=Glasnik Kopete Comment[sv]=Kopete meddelandeklient Comment[ta]=உடனடி தூதர் Comment[tg]=Пайёмбари Kopete Comment[th]=Kopete - ข้อความด่วนทันใจ Comment[tr]=Kopete Messenger Comment[uk]=Кур'єр Kopete Comment[uz]=Kopete xabar almashish vositasi Comment[uz@cyrillic]=Kopete хабар алмашиш воситаси Comment[wa]=Messaedjî Kopete Comment[xh]=Kopete Messenger Comment[x-test]=xxKopete Messengerxx Comment[zh_CN]=Kopete 信使 Comment[zh_HK]=Kopete Messenger Comment[zh_TW]=Kopete Messenger Version=4 [Context/group] Name=Group Name[ar]=المجموعة Name[ast]=Grupu Name[bg]=Група Name[bs]=Grupa Name[ca]=Grup Name[ca@valencia]=Grup Name[cs]=Skupina Name[da]=Gruppe Name[de]=Gruppe Name[el]=Ομάδα Name[en_GB]=Group Name[eo]=Grupo Name[es]=Grupo Name[et]=Grupp Name[eu]=Taldea Name[fi]=Ryhmä Name[fr]=Groupe Name[ga]=Grúpa Name[gl]=Grupo Name[hi]=समूह Name[hne]=समूह Name[hr]=Grupa Name[hu]=Csoport Name[ia]=Gruppo Name[it]=Gruppo Name[ja]=グループ Name[kk]=Тобы Name[km]=ក្រុម Name[ko]=그룹 Name[lt]=Grupė Name[lv]=Grupa Name[mai]=समूह Name[ml]=കൂട്ടം Name[mr]=समूह Name[nb]=Gruppe Name[nds]=Koppel Name[nl]=Groep Name[nn]=Gruppe Name[oc]=Grop Name[pa]=ਗਰੁੱਪ Name[pl]=Grupa Name[pt]=Grupo Name[pt_BR]=Grupo Name[ro]=Grup Name[ru]=Группа Name[si]=කණ්ඩායම Name[sk]=Skupina Name[sl]=Skupina Name[sq]=Grupi Name[sr]=Група Name[sr@ijekavian]=Група Name[sr@ijekavianlatin]=Grupa Name[sr@latin]=Grupa Name[sv]=Grupp Name[th]=กลุ่ม Name[tr]=Grup Name[ug]=گۇرۇپپا Name[uk]=Група Name[wa]=Groupe Name[x-test]=xxGroupxx Name[zh_CN]=组 Name[zh_TW]=群組 Comment=The group where the contact resides Comment[ar]=مجموعة المراسَل Comment[ast]=El grupu au tán los contautos Comment[bg]=Групата, в която се намира контактът Comment[bs]=Grupa u kojoj kontakt prebivaju Comment[ca]=El grup a on resideix el contacte Comment[ca@valencia]=El grup a on resideix el contacte Comment[cs]=Skupina, kde je umístěn kontakt Comment[da]=Gruppen hvor kontakten hører til Comment[de]=Die Gruppe, zu der der Kontakt gehört Comment[el]=Η ομάδα στην οποία ανήκει η επαφή Comment[en_GB]=The group where the contact resides Comment[eo]=La grupo en kiu estas la kontaktulo Comment[es]=El grupo donde residen los contactos Comment[et]=Grupp, kuhu kontakt kuulub Comment[eu]=Kontaktuak dituen taldea Comment[fi]=Ryhmä, johon henkilö kuuluu Comment[fr]=Le groupe dans lequel le contact est situé Comment[ga]=An grúpa a bhfuil an teagmháil ann Comment[gl]=O grupo no que reside o contacto Comment[hi]=समूह जहाँ सम्पर्क रहते हैं Comment[hne]=समूह जहाँ सम्पर्क रहथें Comment[hr]=Grupa u kojoj se nalazi kontakt Comment[hu]=A partner csoportja Comment[ia]=Le gruppo ubi le contacto reside Comment[it]=Il gruppo in cui si trova il contatto Comment[ja]=コンタクトが所属するグループ Comment[kk]=Контакт жататын тобы Comment[km]=ក្រុម​ដែល​ទំនាក់ទំនង​នៅ Comment[ko]=대화 상대가 있는 그룹 Comment[lt]=Grupė, kuriai priklauso kontaktinis asmuo Comment[lv]=Grupa, kurā atrodas kontakts Comment[ml]=സമ്പര്‍ക്കം ചേരാന്‍പോകുന്ന കൂട്ടം Comment[nb]=Gruppa der kontakten holder til Comment[nds]=De Koppel vun den Kontakt Comment[nl]=De groep waarin de contact zich bevindt Comment[nn]=Gruppa kontaktane ligg i Comment[pa]=ਗਰੁੱਪ, ਜਿੱਥੇ ਸੰਪਰਕ ਮੌਜੂਦ ਹੈ Comment[pl]=Grupa, w której znajdują się kontakty Comment[pt]=O grupo onde reside o contacto Comment[pt_BR]=O grupo no qual o contato está inserido Comment[ro]=Grupul în care rezidă contactul Comment[ru]=Группа, в которой находится контакт Comment[si]=සබඳතා මත කණ්ඩායම Comment[sk]=Skupina, kde je umiestnený kontakt Comment[sl]=Skupina kateri pripada stik Comment[sr]=Група у којој је смештен контакт Comment[sr@ijekavian]=Група у којој је смјештен контакт Comment[sr@ijekavianlatin]=Grupa u kojoj je smješten kontakt Comment[sr@latin]=Grupa u kojoj je smešten kontakt Comment[sv]=Gruppen där kontakten ingår Comment[th]=กลุ่มที่ชื่อติดต่ออยู่ภายใน Comment[tr]=Bağlantının bulunduğu grup Comment[uk]=Група, де перебувають контакти Comment[x-test]=xxThe group where the contact residesxx Comment[zh_CN]=联系人所在组 Comment[zh_TW]=聯絡人的群組 Icon=folder [Context/contact] Name=Contact Name[ar]=المراسَل Name[ast]=Contautu Name[bg]=Контакт Name[bs]=Kontakt Name[ca]=Contacte Name[ca@valencia]=Contacte Name[cs]=Kontakt Name[da]=Kontakt Name[de]=Kontakt Name[el]=Επαφή Name[en_GB]=Contact Name[eo]=Kontaktulo Name[es]=Contacto Name[et]=Kontakt Name[eu]=Kontaktua Name[fi]=Yhteystieto Name[fr]=Contact Name[ga]=Teagmháil Name[gl]=Contacto Name[hi]=सम्पर्क Name[hne]=सम्पर्क Name[hr]=Kontakt Name[hu]=Névjegy Name[ia]=Contacto Name[it]=Contatto Name[ja]=コンタクト Name[kk]=Контакт Name[km]=ទំនាក់ទំនង Name[ko]=대화 상대 Name[lt]=Kontaktinis asmuo Name[lv]=Kontakts Name[mai]=संपर्क Name[ml]=സമ്പര്‍ക്കം Name[nb]=Kontakt Name[nds]=Kontakt Name[nl]=Contactpersoon Name[nn]=Kontakt Name[oc]=Contacte Name[pa]=ਸੰਪਰਕ Name[pl]=Kontakt Name[pt]=Contacto Name[pt_BR]=Contato Name[ro]=Contact Name[ru]=Контакт Name[si]=සබඳතාව Name[sk]=Kontakt Name[sl]=Stik Name[sq]=Kontakto Name[sr]=Контакт Name[sr@ijekavian]=Контакт Name[sr@ijekavianlatin]=Kontakt Name[sr@latin]=Kontakt Name[sv]=Kontakt Name[th]=ชื่อติดต่อ Name[tr]=Kişi Name[ug]=ئالاقەداش Name[uk]=Контакт Name[x-test]=xxContactxx Name[zh_CN]=联系人 Name[zh_TW]=聯絡人 Comment=The specified contact Comment[ar]=المراسَل المحدد Comment[ast]=El contautu especificáu Comment[bg]=Указаният контакт Comment[bs]=Odrđeni kontakt Comment[ca]=El contacte especificat Comment[ca@valencia]=El contacte especificat Comment[cs]=Zadaný kontakt Comment[da]=Den angivne kontakt Comment[de]=Der angegebene Kontakt Comment[el]=Η καθορισμένη επαφή Comment[en_GB]=The specified contact Comment[eo]=La specifita kontaktulo Comment[es]=El contacto especificado Comment[et]=Määratud kontakt Comment[eu]=Zehaztutako kontaktua Comment[fi]=Tietty henkilö Comment[fr]=Le contact spécifié Comment[ga]=An teagmháil sonraithe Comment[gl]=O contacto especificado Comment[hi]=निर्धारित सम्पर्क Comment[hne]=निरधारित सम्पर्क Comment[hr]=Naveden kontakt Comment[hu]=A megadott névjegy Comment[ia]=Le contacto specificate Comment[it]=Il contatto specificato Comment[ja]=指定されたコンタクト Comment[kk]=Келтірілген контакт Comment[km]=ទំនាក់ទំនង​ដែល​បាន​បញ្ជាក់ Comment[ko]=지정한 대화 상대 Comment[lt]=Nurodytas kontaktinis asmuo Comment[lv]=Norādītā kontaktpersona Comment[ml]=നിര്‍ണ്ണയിക്കപ്പെട്ട സമ്പര്‍ക്കം Comment[nb]=Den oppgitte kontakten Comment[nds]=De angeven Kontakt Comment[nl]=De opgegeven contactpersoon Comment[nn]=Den oppgjevne kontakten Comment[pa]=ਦਿੱਤਾ ਸੰਪਰਕ Comment[pl]=Podany kontakt Comment[pt]=O contacto indicado Comment[pt_BR]=O contato indicado Comment[ro]=Contactul specificat Comment[ru]=Указанный контакт Comment[si]=නිවේශිත සබඳතාවක් Comment[sk]=Zadaný kontakt Comment[sl]=Podan stik Comment[sq]=Kontekti i specifikuar Comment[sr]=Одређени контакт Comment[sr@ijekavian]=Одређени контакт Comment[sr@ijekavianlatin]=Određeni kontakt Comment[sr@latin]=Određeni kontakt Comment[sv]=Den angivna kontakten Comment[th]=ชื่อติดต่อที่ระบุไว้ Comment[tr]=Belirtilen Bağlantı Comment[ug]=بەلگىلەنگەن ئالاقەداش Comment[uk]=Вказаний контакт Comment[x-test]=xxThe specified contactxx Comment[zh_CN]=指定的联系人 Comment[zh_TW]=指定的聯絡人 Icon=metacontact [Context/class] Name=Class Name[ar]=الفئة Name[ast]=Clas Name[bg]=Клас Name[bs]=Klasa Name[ca]=Classe Name[ca@valencia]=Classe Name[cs]=Třída Name[da]=Klasse Name[de]=Klasse Name[el]=Κλάση Name[en_GB]=Class Name[eo]=Klaso Name[es]=Clase Name[et]=Klass Name[eu]=Klasea Name[fi]=Luokka Name[fr]=Classe Name[ga]=Aicme Name[gl]=Clase Name[hi]=वर्ग Name[hne]=वर्ग Name[hr]=Razred Name[hu]=Osztály Name[ia]=Classe Name[it]=Classe Name[ja]=クラス Name[kk]=Класс Name[km]=ថ្នាក់ Name[ko]=등급 Name[lt]=Klasė Name[lv]=Klase Name[mai]=वर्ग Name[ml]=വിഭാഗം Name[mr]=वर्ग Name[nb]=Klasse Name[nds]=Klass Name[nl]=Klasse Name[nn]=Klasse Name[oc]=Classa Name[pa]=ਕਲਾਸ Name[pl]=Klasa Name[pt]=Classe Name[pt_BR]=Classe Name[ro]=Clasă Name[ru]=Класс Name[si]=පන්තිය Name[sk]=Trieda Name[sl]=Razred Name[sq]=Klasa Name[sr]=Класа Name[sr@ijekavian]=Класа Name[sr@ijekavianlatin]=Klasa Name[sr@latin]=Klasa Name[sv]=Klass Name[th]=คลาส Name[tr]=Sınıf Name[ug]=تىپ Name[uk]=Клас Name[wa]=Classe Name[x-test]=xxClassxx Name[zh_CN]=分类 Name[zh_TW]=類別 Comment=The message class Comment[ar]=فئة الرسالة Comment[ast]=La clas de mensax Comment[bg]=Класът на съобщението Comment[bs]=Klasa poruke Comment[ca]=La classe de missatge Comment[ca@valencia]=La classe de missatge Comment[cs]=Třída zprávy Comment[da]=Beskedklasse Comment[de]=Die Nachrichtenklasse Comment[el]=Η κλάση του μηνύματος Comment[en_GB]=The message class Comment[eo]=La mesaĝa klaso Comment[es]=La clase de mensaje Comment[et]=Sõnumiklass Comment[eu]=Mezuaren klasea Comment[fi]=Viestin luokka Comment[fr]=La classe du message Comment[ga]=An aicme teachtaireachta Comment[gl]=A clase da mensaxe Comment[hi]=संदेश वर्ग Comment[hne]=संदेस वर्ग Comment[hr]=Razred poruke Comment[hu]=Üzenetosztály Comment[ia]=Le classe de message Comment[it]=La classe del messaggio Comment[ja]=メッセージのクラス Comment[kk]=Хабарлама класы Comment[km]=ថ្នាក់​សារ Comment[ko]=메시지 등급 Comment[lt]=Žinutės klasė Comment[lv]=Ziņojuma klase Comment[ml]=സന്ദേശത്തിന്റെ വിഭാഗം Comment[nb]=Meldingsklassen Comment[nds]=De Naricht ehr Klass Comment[nl]=De berichtenklasse Comment[nn]=Meldingsklassen Comment[pa]=ਸੁਨੇਹਾ ਕਲਾਸ Comment[pl]=Klasa wiadomości Comment[pt]=A classe da mensagem Comment[pt_BR]=A classe de mensagens Comment[ro]=Clasa mesajului Comment[ru]=Класс сообщения Comment[si]=පණිවුඩ පන්තිය Comment[sk]=Trieda správy Comment[sl]=Razred sporočila Comment[sr]=Класа поруке Comment[sr@ijekavian]=Класа поруке Comment[sr@ijekavianlatin]=Klasa poruke Comment[sr@latin]=Klasa poruke Comment[sv]=Meddelandeklassen Comment[th]=คลาสของข้อความ Comment[tr]=İleti sınıfı Comment[ug]=ئۇچۇر خىلى Comment[uk]=Клас повідомлення Comment[x-test]=xxThe message classxx Comment[zh_CN]=消息类别 Comment[zh_TW]=訊息類別 Icon=highlight [Event/kopete_contact_incoming] Name=Incoming Message Name[ar]=الرسالة القادمة Name[ast]=Mensax entrante Name[bg]=Входящо съобщение Name[bs]=Dolazeća Poruka Name[ca]=Missatge entrant Name[ca@valencia]=Missatge entrant Name[cs]=Příchozí zpráva Name[da]=Indkommende besked Name[de]=Eingehende Nachricht Name[el]=Εισερχόμενο μήνυμα Name[en_GB]=Incoming Message Name[eo]=Alvenanta mesaĝo Name[es]=Mensaje entrante Name[et]=Sisenev sõnum Name[eu]=Sarrerako mezua Name[fi]=Saapuvat viestit Name[fr]=Message entrant Name[ga]=Teachtaireacht Isteach Name[gl]=Mensaxe entrante Name[hi]=आवक संदेश Name[hne]=आवक संदेस Name[hr]=Dolazna poruka Name[hu]=Bejövő üzenet Name[ia]=Messages in arrivate Name[it]=Messaggio in arrivo Name[ja]=受信メッセージ Name[kk]=Келген хабарлама Name[km]=សារ​មក​ដល់ Name[ko]=메시지 받음 Name[lt]=Gauta žinutė Name[lv]=Ienākusi ziņa Name[ml]=ആഗമ സന്ദേശം Name[nb]=Innkommende melding Name[nds]=Ankamen Naricht Name[nl]=Inkomend bericht Name[nn]=Innkommande melding Name[pa]=ਆ ਰਿਹਾ ਸੁਨੇਹਾ Name[pl]=Wiadomość przychodząca Name[pt]=Mensagem Recebida Name[pt_BR]=Mensagem recebida Name[ro]=Mesaj de intrare Name[ru]=Входящее сообщение Name[si]=පැමිණෙන පණිවුඩය Name[sk]=Prichádzajúca správa Name[sl]=Dohodno sporočilo Name[sr]=Долазна порука Name[sr@ijekavian]=Долазна порука Name[sr@ijekavianlatin]=Dolazna poruka Name[sr@latin]=Dolazna poruka Name[sv]=Inkommande meddelande Name[th]=ข้อความที่ได้รับ Name[tr]=Gelen İletiler Name[ug]=كىرگەن ئۇچۇر Name[uk]=Вхідне повідомлення Name[wa]=Messaedje intrant Name[x-test]=xxIncoming Messagexx Name[zh_CN]=收到消息 Name[zh_TW]=進來的訊息 Comment=An incoming message has been received Comment[ar]=تم استقبال رسالة جديدة Comment[ast]=Recibióse un mensax entrante Comment[bg]=Получено е входящо съобщение Comment[bn]=একটি অন্তর্মুখী বার্তা গ্রহণ করা হয়েছে Comment[bs]=Dolazeća poruka je primljena Comment[ca]=S'ha rebut un missatge entrant Comment[ca@valencia]=S'ha rebut un missatge entrant Comment[cs]=Byla obdržena příchozí zpráva Comment[da]=En indkommende besked er blevet modtaget Comment[de]=Es ist eine eingehende Nachricht empfangen worden Comment[el]=Έχει ληφθεί ένα εισερχόμενο μήνυμα Comment[en_GB]=An incoming message has been received Comment[eo]=Alvenanta mesaĝo estis ricevita Comment[es]=Se ha recibido un mensaje entrante Comment[et]=Saabus sõnum Comment[eu]=Sarrerako mezu bat jaso da Comment[fi]=Viesti on saapunut Comment[fr]=Un message entrant a été reçu Comment[ga]=Fuarthas teachtaireacht isteach Comment[gl]=Recibiuse unha mensaxe entrante Comment[he]=התקבל מסר נכנס Comment[hi]=एक आवक संदेश प्राप्त हुआ Comment[hne]=एक आवक संदेस प्राप्त होइस Comment[hr]=Primljena je dolazna poruka Comment[hu]=Új üzenet érkezett Comment[ia]=Un message in arrivate ha essite recipite Comment[is]=Skeyti móttekið Comment[it]=È stato ricevuto un nuovo messaggio Comment[ja]=受信メッセージが届きました Comment[kk]=Хабарлама келді Comment[km]=បាន​ទទួល​សំបុត្រ​មួយ​ចូល Comment[ko]=들어오는 메시지를 받음 Comment[lt]=Gauta nauja žinutė Comment[lv]=Ir saņemts ienākošs ziņojums Comment[mk]=Примена е дојдовна порака Comment[ml]=ഒരു ആഗമ സന്ദേശം കിട്ടിയിട്ടുണ്ട് Comment[nb]=En innkommende melding er mottatt Comment[nds]=En Naricht keem rin Comment[nl]=Er is een inkomend bericht ontvangen Comment[nn]=Du har fått ei melding Comment[pa]=ਇੱਕ ਆ ਰਿਹਾ ਸੁਨੇਹਾ ਮਿਲਿਆ ਹੈ Comment[pl]=Nadeszła nowa wiadomość Comment[pt]=Foi recebida uma mensagem Comment[pt_BR]=Uma mensagem foi recebida Comment[ro]=A fost recepționat un mesaj de intrare Comment[ru]=Получено новое сообщение Comment[si]=පැමිණෙන පණිවුඩයක් ලැබිනි Comment[sk]=Bola prijatá prichádzajúca správa Comment[sl]=Prejeto je bilo dohodno sporočilo Comment[sr]=Примљена је порука Comment[sr@ijekavian]=Примљена је порука Comment[sr@ijekavianlatin]=Primljena je poruka Comment[sr@latin]=Primljena je poruka Comment[sv]=Ett inkommande meddelande har anlänt Comment[ta]=உள்வரும் தகவல் பெறப்பட்டது Comment[tg]=Пайёми воридшаванда қабул гардид Comment[th]=ได้รับข้อความเข้ามาใหม่ Comment[tr]=Bir gelen mesaj alındı Comment[ug]=كەلگەن ئۇچۇردىن بىرنى تاپشۇرۇۋالدى Comment[uk]=Отримано вхідне повідомлення Comment[uz]=Xabar qabul qilindi Comment[uz@cyrillic]=Хабар қабул қилинди Comment[wa]=On messaedje en intrêye a stî rçî Comment[x-test]=xxAn incoming message has been receivedxx Comment[zh_CN]=收到了一条消息 Comment[zh_HK]=收到新訊息 Comment[zh_TW]=接收到的訊息 Contexts=contact,group,class Sound=KDE-Im-Message-In.ogg Action=Sound|Popup|Taskbar Persistant=true [Event/kopete_contact_incoming_active_window] Name=Incoming Message in Active Chat Name[ar]=رسالة قادمة في الدردشة الحالية Name[ast]=Mensax entrante na charra activa. Name[bg]=Входящо съобщение в активен разговор Name[bs]=Dolazeća poruka u aktivnom ćaskanju Name[ca]=Missatge entrant en un xat actiu Name[ca@valencia]=Missatge entrant en un xat actiu Name[cs]=Příchozí zpráva v aktivním rozhovoru Name[da]=Indkommende besked i aktiv chat Name[de]=Eingehende Nachricht in aktivem Chat Name[el]=Εισερχόμενο μήνυμα στην ενεργή συνομιλία Name[en_GB]=Incoming Message in Active Chat Name[es]=Mensaje entrante en la conversación activa Name[et]=Sisenev sõnum aktiivses vestluss Name[eu]=Sarrerako mezua berriketa aktiboan Name[fi]=Saapuva viesti aktiivisessa keskustelussa Name[fr]=Message entrant dans la discussion actuelle Name[ga]=Teachtaireacht Isteach i gComhrá Gníomhach Name[gl]=Recibiuse unha mensaxe entrante na conversa activa Name[hne]=सक्रिय गपसप मं आवक संदेस Name[hr]=Dolazna poruka u djelatnom razgovoru Name[hu]=Bejövő üzenet egy aktív csevegésben Name[ia]=Message in arrivate in conversation active Name[it]=Messaggio in arrivo nella chat attiva Name[ja]=アクティブなチャットの受信メッセージ Name[kk]=Белсенді чатқа хабарлама келді Name[km]=សារ​ចូល​នៅ​ក្នុង​ការ​ជជែក​ដែល​សកម្ម Name[ko]=활성화된 대화에서 메시지 받음 Name[lt]=Aktyviame lange gauta žinutė Name[lv]=Ienākusi ziņa aktīvajā sarunā Name[ml]=ആഗമ സന്ദേശം സജീവ സംവാദത്തിലാണ് Name[nb]=Innkommende melding i aktiv prat Name[nds]=Ankamen Naricht binnen aktiev Klöönsnack Name[nl]=Inkomend bericht in actief gesprek Name[nn]=Innkommande melding i aktiv prat Name[pa]=ਐਕਟਿਵ ਗੱਲਬਾਤ ਵਿੱਚ ਆ ਰਿਹਾ ਸੁਨੇਹਾ Name[pl]=Wiadomość przychodząca na aktywnym czacie Name[pt]=Mensagem Recebida na Conversa Activa Name[pt_BR]=Mensagem recebida na conversa ativa Name[ro]=Mesaj de intrare în discuția activă Name[ru]=Входящее сообщение в активной беседе Name[si]=සක්‍රීය සංවාදය තුල පැමිණෙන පණිවුඩය Name[sk]=Prichádzajúca správa v aktívnom rozhovore Name[sl]=Dohodno sporočilo v dejavnem klepetu Name[sr]=Долазна порука у активном ћаскању Name[sr@ijekavian]=Долазна порука у активном ћаскању Name[sr@ijekavianlatin]=Dolazna poruka u aktivnom ćaskanju Name[sr@latin]=Dolazna poruka u aktivnom ćaskanju Name[sv]=Inkommande meddelande i aktiv chatt Name[th]=ได้รับข้อความเข้ามาใหม่ในการพูดคุยที่กำลังใช้อยู่ Name[tr]=Etkin Sohbet içerisinde Gelen İletiler Name[ug]=ئاكتىپ سۆھبەتتە كەلگەن ئۇچۇر Name[uk]=Вхідне повідомлення в активній балачці Name[wa]=Messaedje intrant e berdelaedje en alaedje Name[x-test]=xxIncoming Message in Active Chatxx Name[zh_CN]=在活动对话中收到消息 Name[zh_TW]=目前聊天室裡進來的訊息 Comment=An incoming message in the active chat window has been received Comment[ar]=تم استقبال رسالة جديدة في نافذة الدردشة الحالية Comment[ast]=Recibióse un mensaxe entrante na ventana de charra activa Comment[bg]=Получено е входящо съобщение в прозорец на активен разговор Comment[bs]=Dolazeća poruka u aktivnom časkanju je primljena Comment[ca]=S'ha rebut un missatge entrant a la finestra de xat activa Comment[ca@valencia]=S'ha rebut un missatge entrant a la finestra de xat activa Comment[cs]=Byla obdržena příchozí zpráva v okně aktivního rozhovoru Comment[da]=En indkommende besked er blevet modtaget i den aktive chat Comment[de]=Es ist eine eingehende Nachricht im aktiven Chat-Fenster empfangen worden Comment[el]=Έχει ληφθεί ένα εισερχόμενο μήνυμα στο παράθυρο της ενεργής συνομιλίας Comment[en_GB]=An incoming message in the active chat window has been received Comment[es]=Se ha recibido un mensaje entrante en la ventana de conversación activa Comment[et]=Saabus sõnum aktiivses vestlusaknas Comment[eu]=Sarrerako mezu bat jaso da berriketako leiho aktiboan Comment[fi]=Aktiiviseen keskusteluikkunaan on saapunut uusi viesti Comment[fr]=Un message entrant a été reçu dans la fenêtre de discussion actuelle Comment[ga]=Fuarthas teachtaireacht isteach i bhfuinneog an chomhrá ghníomhaigh Comment[gl]=Recibiuse unha mensaxe entrante na xanela de conversa activa Comment[hr]=Primljena je dolazna poruka u prozoru djelatnog razgovora Comment[hu]=Új üzenet érkezett az aktív csevegőablakban Comment[ia]=Un message in arrivate ha essite recipite in le fenestra de conversation active Comment[it]=È stato ricevuto un nuovo messaggio nella finestra di chat attiva Comment[ja]=アクティブなチャットウィンドウに受信メッセージが届きました Comment[kk]=Белсенді чат терезесіне хабарлама келіп түсті Comment[km]=សារ​ចូល​នៅ​ក្នុង​​បង្អួចជជែក​​​សកម្មត្រូវ​បាន​ទទួល Comment[ko]=활성화된 대화 창에 새 메시지가 들어옴 Comment[lt]=Lange su aktyviu pokalbiu gauta nauja žinutė Comment[lv]=Ir saņemts ienākošs ziņojums aktīvajā sarunas logā Comment[ml]=സജീവ സംവാദ ജാലകത്തില്‍ ‍നിന്ന് ഒരു ആഗമ സന്ദേശം കിട്ടിയിട്ടുണ്ട് Comment[nb]=En innkommende melding er mottatt i et aktivt pratevindu Comment[nds]=En Naricht keem na't aktive Klöönfinster rin Comment[nl]=Er is een inkomend bericht ontvangen in het actieve gespreksvenster Comment[nn]=Du har fått ei melding i det aktive pratevindauget Comment[pa]=ਐਕਟਿਵ ਗੱਲਬਾਤ ਵਿੱਚ ਆ ਰਿਹਾ ਸੁਨੇਹਾ ਮਿਲਿਆ ਹੈ Comment[pl]=Nadeszła nowa wiadomość w aktywnym oknie czatu Comment[pt]=Foi recebida uma mensagem na janela de conversação activa Comment[pt_BR]=Chegou uma mensagem na janela de conversa ativa Comment[ro]=A fost recepționat un mesaj de intrare în fereastra de discuții activă Comment[ru]=Получено новое сообщение в активном окне беседы Comment[si]=සක්‍රීය පණිවුඩ කවුළුවක් තුලින් පැමිණෙන පණිවුදයක් ලැබිනි Comment[sk]=Bola prijatá prichádzajúca správa v okne aktívneho rozhovoru Comment[sl]=Prejeto je bilo dohodno sporočilo v oknu dejavnega klepeta Comment[sr]=Примљена је порука у активном прозору ћаскања Comment[sr@ijekavian]=Примљена је порука у активном прозору ћаскања Comment[sr@ijekavianlatin]=Primljena je poruka u aktivnom prozoru ćaskanja Comment[sr@latin]=Primljena je poruka u aktivnom prozoru ćaskanja Comment[sv]=Ett inkommande meddelande i det aktiva chattfönstret har anlänt Comment[th]=ได้รับข้อความเข้ามาใหม่ในการพูดคุยที่กำลังใช้อยู่ Comment[tr]=Etkin sohbet içerisinde bir gelen ileti alındı Comment[ug]=ئاكتىپ سۆھبەتتە كەلگەن ئۇچۇرنى تاپشۇرۇۋالدى Comment[uk]=Отримано вхідне повідомлення у вікні активної балачки Comment[x-test]=xxAn incoming message in the active chat window has been receivedxx Comment[zh_CN]=活动聊天窗口收到了一条消息 Comment[zh_TW]=目前聊天室裡接收到的訊息 Contexts=contact,group,class Sound=KDE-Im-Message-In.ogg Action=Sound [Event/kopete_outgoing] Name=Outgoing Message Name[ar]=الرسالة الخارجة Name[ast]=Mensax saliente Name[bg]=Изходящо съобщение Name[bs]=Odlazna poruka Name[ca]=Missatge sortint Name[ca@valencia]=Missatge eixint Name[cs]=Odchozí zpráva Name[da]=Udgående besked Name[de]=Ausgehende Nachricht Name[el]=Εξερχόμενο μήνυμα Name[en_GB]=Outgoing Message Name[eo]=Eliranta mesaĝo Name[es]=Mensaje saliente Name[et]=Väljuv sõnum Name[eu]=Irteerako mezua Name[fi]=Lähtevä viesti Name[fr]=Message sortant Name[ga]=Teachtaireacht Amach Name[gl]=Mensaxe saínte Name[hi]=जावक संदेश Name[hne]=जावक संदेस Name[hr]=Odlazna poruka Name[hu]=Kimenő üzenet Name[ia]=Message in exito Name[it]=Messaggio in uscita Name[ja]=送信メッセージ Name[kk]=Жіберілген хабарлама Name[km]=សារ​ចេញ Name[ko]=메시지 보냄 Name[lt]=Išsiųsta žinutė Name[lv]=Izejošs ziņojums Name[ml]=ഗമന സന്ദേശം Name[nb]=Utgående melding Name[nds]=Rutgahn Naricht Name[nl]=Uitgaand bericht Name[nn]=Utgåande melding Name[pa]=ਜਾ ਰਿਹਾ ਸੁਨੇਹਾ Name[pl]=Wiadomość wychodząca Name[pt]=Mensagem Enviada Name[pt_BR]=Mensagem enviada Name[ro]=Mesaj de ieșire Name[ru]=Исходящее сообщение Name[si]=බැහැර යන පණිවුඩය Name[sk]=Odchádzajúca správa Name[sl]=Odhodno sporočilo Name[sr]=Одлазна порука Name[sr@ijekavian]=Одлазна порука Name[sr@ijekavianlatin]=Odlazna poruka Name[sr@latin]=Odlazna poruka Name[sv]=Utgående meddelande Name[th]=ข้อความที่ส่งออกไป Name[tr]=Giden İletiler Name[ug]=يوللىغان ئۇچۇر Name[uk]=Вихідне повідомлення Name[x-test]=xxOutgoing Messagexx Name[zh_CN]=发出消息 Name[zh_TW]=出去的訊息 Comment=An outgoing message has been sent Comment[ar]=تم إرسال رسالة خارجة Comment[ast]=Unvióse un mensax saliente Comment[bg]=Изпратено е изходящо съобщение Comment[bn]=একটি বহির্মুখী বার্তা পাঠান হয়েছে Comment[bs]=Odlazna poruka je poslana Comment[ca]=S'ha enviat un missatge sortint Comment[ca@valencia]=S'ha enviat un missatge eixint Comment[cs]=Byla odeslána zpráva Comment[da]=En udgående besked er blevet sendt Comment[de]=Es ist eine ausgehende Nachricht gesendet worden Comment[el]=Έχει αποσταλεί ένα εξερχόμενο μήνυμα Comment[en_GB]=An outgoing message has been sent Comment[eo]=Eliranta mesaĝo estis sendita Comment[es]=Se ha enviado un mensaje saliente Comment[et]=Saadeti sõnum Comment[eu]=Irteerako mezu bat bidali da Comment[fi]=Viesti on lähetetty Comment[fr]=Un message sortant a été envoyé Comment[ga]=Seoladh teachtaireacht amach Comment[gl]=Enviouse unha mensaxe saínte Comment[he]=מסר יוצא נשלח Comment[hi]=जावक संदेश प्रेषित कर दिया गया Comment[hne]=जावक संदेस प्रेसित करे गे Comment[hr]=Primljena je odlazna poruka Comment[hu]=Egy üzenet lett elküldve Comment[ia]=Un message in exito ha essite inviate Comment[is]=Skeyti sent Comment[it]=È stato inviato un messaggio in uscita Comment[ja]=送信メッセージを送りました Comment[kk]=Хабарлама жіберілді Comment[km]=បាន​ផ្ញើ​សំបុត្រ​ចេញ Comment[ko]=나가는 메시지를 보냄 Comment[lt]=Žinutė išsiųsta Comment[lv]=Ir nosūtīts izejošs ziņojums Comment[mk]=Испратена е појдовна порака Comment[ml]=ഒരു ഗമന സന്ദേശം അയച്ചിട്ടുണ്ട് Comment[nb]=En utgående melding er sendt Comment[nds]=En Naricht wöör loosstüert Comment[nl]=Er is een uitgaand bericht verzonden Comment[nn]=Du har sendt ei melding Comment[pa]=ਜਾ ਰਿਹਾ ਸੁਨੇਹਾ ਭੇਜਿਆ ਗਿਆ ਹੈ Comment[pl]=Wiadomość została wysłana Comment[pt]=Foi enviada uma mensagem Comment[pt_BR]=Uma mensagem foi enviada Comment[ro]=A fost expediat un mesaj de ieșire Comment[ru]=Исходящее сообщение отправлено Comment[si]=බැහැර යන පණිවුඩය ලැබිනි Comment[sk]=Bola odoslaná odchádzajúca správa Comment[sl]=Poslano je bilo odhodno sporočilo Comment[sr]=Порука је послата Comment[sr@ijekavian]=Порука је послата Comment[sr@ijekavianlatin]=Poruka je poslata Comment[sr@latin]=Poruka je poslata Comment[sv]=Ett utgående meddelande har skickats Comment[ta]=வெளிச்செல்ல வேண்டிய தகவல் அனுப்பட்டது Comment[tg]=Пайёми хориҷшаванда фиристода шуд Comment[tr]=Bir giden mesaj gönderildi Comment[ug]=بىر ئۇچۇر يوللاندى Comment[uk]=Відіслано вихідне повідомлення Comment[uz]=Xabar joʻnatildi Comment[uz@cyrillic]=Хабар жўнатилди Comment[x-test]=xxAn outgoing message has been sentxx Comment[zh_CN]=发出了一条消息 Comment[zh_HK]=訊息已發出 Comment[zh_TW]=送出去的訊息 Contexts=contact,group,class Sound=KDE-Im-Message-Out.ogg Action=None [Event/kopete_contact_online] Name=Contact Gone Online Name[ar]=مراسَل أصبح متصل Name[ast]=Coneutóse contautu Name[bg]=Изключване на контакт Name[bs]=Kontakt je otišao na vezu Name[ca]=Un contacte s'ha connectat Name[ca@valencia]=Un contacte s'ha connectat Name[cs]=Osoba je online Name[da]=Kontakten er gået online Name[de]=Kontakt ist online Name[el]=Επαφή συνδέθηκε Name[en_GB]=Contact Gone Online Name[eo]=Kontaktulo konektiĝis Name[es]=Contacto ha conectado Name[et]=Kontakt tuli võrku Name[eu]=Kontaktu bat linean jarri da Name[fi]=Henkilö on saapunut verkkoon Name[fr]=Un contact s'est connecté Name[ga]=Teagmháil Ar Líne Name[gl]=O contacto conectouse Name[hi]=एक सम्पर्क ऑनलाइन हुआ Name[hne]=एक सम्पर्क आनलाइन होइस Name[hr]=Kontakt je spojen Name[hu]=Egy partner online állapotúvá vált Name[ia]=Contacto vadeva in linea Name[it]=Il contatto si è connesso Name[ja]=コンタクトがオンライン Name[kk]=Контакт онлайнға келді Name[km]=ទំនាក់​ទំនង​ឡើង "លើ​បណ្ដាញ" Name[ko]=대화 상대 온라인 Name[lt]=Prisijungė kontaktinis asmuo Name[lv]=Kontakts parādījies tiešsaistē Name[ml]=സമ്പര്‍ക്കം ഓണ്‍ലൈനായി Name[nb]=Kontakt er på nett Name[nds]=Kontakt hett sik tokoppelt Name[nl]=Contactpersoon online gegaan Name[nn]=Kontakten er tilkopla Name[pa]=ਸੰਪਰਕ ਆਨਲਾਈਨ ਹੋਇਆ Name[pl]=Użytkownik stał się dostępny Name[pt]=Notas do Contacto Name[pt_BR]=O contato ficou conectado Name[ro]=Contactul s-a conectat Name[ru]=Пользователь вошёл в сеть Name[si]=සබඳතාව මාර්‍ගගතයි Name[sk]=Kontakt je on-line Name[sl]=Stik je povezan Name[sr]=Контакт је на вези Name[sr@ijekavian]=Контакт је на вези Name[sr@ijekavianlatin]=Kontakt je na vezi Name[sr@latin]=Kontakt je na vezi Name[sv]=Användare har kopplat upp Name[th]=ชื่อติดต่อได้อยู่ในสายแล้ว Name[tr]=Bir Kişi Bağlandı Name[ug]=ئالاقەداش توردا Name[uk]=Контакт в мережі Name[x-test]=xxContact Gone Onlinexx Name[zh_CN]=联系人已经上线 Name[zh_TW]=聯絡人上線 Contexts=contact,group Comment=A contact has come online Comment[ar]=مراسَل أ صبح على الخط Comment[ast]=El contautu coneutóse Comment[bg]=Включване на контакт Comment[bn]=যোগাযোগ তালিকাভুক্ত একজন অনলাইন হয়েছে Comment[bs]=Kontakt je došao na vezu Comment[ca]=Un contacte s'ha connectat Comment[ca@valencia]=Un contacte s'ha connectat Comment[cs]=Osoba je online Comment[da]=En kontakt er gået på nettet Comment[de]=Ein Kontakt ist nun online Comment[el]=Μία επαφή συνδέθηκε Comment[en_GB]=A contact has come online Comment[eo]=Kontaktulo konektiĝis Comment[es]=El contacto se ha conectado Comment[et]=Kontakt tuli võrku Comment[eu]=Kontaktu bat linean jarri da Comment[fi]=Henkilö on saapunut verkkoon Comment[fr]=Un contact s'est connecté Comment[ga]=Tá teagmháil ar líne anois Comment[gl]=Conectouse un contacto Comment[he]=איש קשר התחבר Comment[hi]=एक सम्पर्क ऑनलाइन आया Comment[hne]=एक सम्पर्क आनलाइन आया Comment[hr]=Kontakt je spojen Comment[hu]=Egy partner online állapotúvá vált Comment[ia]=Un contacto ha devenite in linea Comment[is]=Notandi tengist Comment[it]=Un contatto si è connesso Comment[ja]=コンタクトがオンラインになりました Comment[kk]=Бір контакт байланысқа шықты Comment[km]=ទំនាក់ទំនង​បាន​ឡើង "លើ​បណ្ដាញ" Comment[ko]=대화 상대가 온라인이 됨 Comment[lt]=Prisijungė kontaktinis asmuo Comment[lv]=Kāds jūsu kontakts ir parādījies tiešsaistē Comment[mk]=Контактот е на линија Comment[ml]=ഒരു സമ്പര്‍ക്കം ഓണ്‍ലൈനായി വന്നിട്ടുണ്ട് Comment[nb]=En kontakt har koblet seg til nettet Comment[nds]=En Kontakt hett sik tokoppelt Comment[nl]=Er is een contactpersoon online gegaan Comment[nn]=Ein kontakt er no tilkopla Comment[pa]=ਇੱਕ ਸੰਪਰਕ ਆਨ-ਲਾਇਨ ਹੋ ਗਿਆ ਹੈ Comment[pl]=Użytkownik stał się dostępny Comment[pt]=Ligou-se um contacto Comment[pt_BR]=Um contato ficou conectado Comment[ro]=Un contact s-a conectat Comment[ru]=Пользователь вошёл в сеть Comment[si]=සබඳතාව මාර්‍ගගත විය Comment[sk]=Kontakt je on-line Comment[sl]=Stik je postal povezan Comment[sr]=Контакт се појавио на вези Comment[sr@ijekavian]=Контакт се појавио на вези Comment[sr@ijekavianlatin]=Kontakt se pojavio na vezi Comment[sr@latin]=Kontakt se pojavio na vezi Comment[sv]=En användare har kopplat upp Comment[ta]=பயனர் உரையாட வந்துள்ளார் Comment[tg]=Корванде ба шабака ворид шуд Comment[th]=ชื่อติดต่อได้อยู่ในสายแล้ว Comment[tr]=Bir kişi bağlı duruma geçti Comment[ug]=بىر ئالاقەداش تورغا چىقتى Comment[uk]=Контакт увійшов в мережу Comment[x-test]=xxA contact has come onlinexx Comment[zh_CN]=联系人上线 Comment[zh_HK]=有個聯絡人已上線 Comment[zh_TW]=聯絡人已上線 Sound=KDE-Im-Contact-In.ogg Action=Popup [Event/kopete_contact_offline] Name=Offline Name[ar]=غير متّصل Name[ast]=Desconeutáu Name[bg]=Изключен Name[bn]=অফলাইন Name[br]=N'eo ket enlinenn Name[bs]=Van mreže Name[ca]=Desconnectat Name[ca@valencia]=Desconnectat Name[cs]=Offline Name[cy]=All-lein Name[da]=Gå offline Name[de]=Offline Name[el]=Χωρίς σύνδεση Name[en_GB]=Offline Name[eo]=Senkonekta Name[es]=Desconectado Name[et]=Pole võrgus Name[eu]=Lineaz kanpo Name[fi]=Yhteys katkaistu Name[fr]=Se déconnecter Name[ga]=As Líne Name[gl]=Desconectado Name[he]=מנותק Name[hi]=ऑफ़लाइन Name[hne]=ओफलाइन Name[hr]=Odspojen Name[hu]=Offline Name[ia]=Foras de linea Name[is]=Aftengdur Name[it]=Non in linea Name[ja]=オフライン Name[kk]=Желіден тыс Name[km]=ក្រៅ​បណ្ដាញ Name[ko]=오프라인 Name[lt]=Atsijungę Name[lv]=Nesaistē Name[mai]=आफलाइन Name[mk]=Не на линија Name[ml]=ഓഫ്‌ലൈന്‍‍ Name[nb]=Frakoblet Name[nds]=Afkoppelt Name[nl]=Offline Name[nn]=Fråkopla Name[oc]=Desconnectat Name[pa]=ਆਫਲਾਇਨ Name[pl]=Niedostępny Name[pt]=Desligado Name[pt_BR]=Desconectado Name[ro]=Deconectat Name[ru]=Вышел из сети Name[si]=මාර්‍ගගත නොවන Name[sk]=Offline Name[sl]=Nepovezan Name[sq]=Jashtë Linje Name[sr]=Ван везе Name[sr@ijekavian]=Ван везе Name[sr@ijekavianlatin]=Van veze Name[sr@latin]=Van veze Name[sv]=Nerkopplad Name[ta]=இணையத்தில் இல்லை Name[tg]=Усули Худмухтор Name[th]=ไม่อยู่ในสาย Name[tr]=Çevrimdışı Name[ug]=توردا يوق Name[uk]=Поза мережею Name[uz]=Oflayn Name[uz@cyrillic]=Офлайн Name[wa]=Disraloyî Name[x-test]=xxOfflinexx Name[zh_CN]=离线 Name[zh_HK]=離線 Name[zh_TW]=離線 Comment=A contact has gone offline Comment[ar]=مراسَل أصبح غير متّصل Comment[ast]=El contautu desconeutóse Comment[bg]=Изключване на контакт Comment[bn]=যোগাযোগ তালিকাভুক্ত একজন অফলাইন হয়ে গিয়েছে Comment[bs]=Kontakt je otišao sa veze Comment[ca]=Un contacte s'ha desconnectat Comment[ca@valencia]=Un contacte s'ha desconnectat Comment[cs]=Osoba je offline Comment[da]=En kontakt er gået af nettet Comment[de]=Ein Kontakt ist nun offline Comment[el]=Μία επαφή αποσυνδέθηκε Comment[en_GB]=A contact has gone offline Comment[eo]=Kontaktulo malkonektiĝis Comment[es]=El contacto se ha desconectado Comment[et]=Kontakt läks võrgust ära Comment[eu]=Kontaktu bat lineaz kanpo jarri da Comment[fi]=Henkilö on lähtenyt verkosta Comment[fr]=Un contact s'est déconnecté Comment[ga]=Tá teagmháil as líne anois Comment[gl]=Desconectouse un contacto Comment[he]=משתמש התנתק Comment[hi]=एक सम्पर्क ऑफलाइन हुआ Comment[hne]=एक सम्पर्क आफलाइन होइस Comment[hr]=Korisnik se odspojio Comment[hu]=Egy partner offline állapotúvá vált Comment[ia]=Un contacto ha devenite foras de linea Comment[is]=Notandi aftengist Comment[it]=Un contatto si è disconnesso Comment[ja]=コンタクトがオフラインになりました Comment[kk]=Бір контакт байланыстан шықты Comment[km]=ទំនាក់ទំនង​បាន​ក្លាយ​ទៅ​ជា "ក្រៅ​បណ្ដាញ" Comment[ko]=대화 상대가 오프라인이 됨 Comment[lt]=Kontaktinis asmuo atsijungė Comment[lv]=Kontakts tagad ir nesaistē Comment[mk]=Контактот се исклучи Comment[ml]=ഒരു സമര്‍ക്കം ഓഫ്‌ലൈനായി പോയി Comment[nb]=En kontakt er frakoblet nettet Comment[nds]=En Kontakt hett sik afkoppelt Comment[nl]=Er is een contactpersoon offline gegaan Comment[nn]=Ein kontakt er no fråkopla Comment[pa]=ਇੱਕ ਸੰਪਰਕ ਆਫਲਾਇਨ ਹੋਇਆ Comment[pl]=Użytkownik stał się niedostępny Comment[pt]=Desligou-se um contacto Comment[pt_BR]=O usuário se desconectou Comment[ro]=Un contact s-a deconectat Comment[ru]=Пользователь вышел из сети Comment[si]=සබඳතාව මාර්‍ගගත නොවේ Comment[sk]=Kontakt je off-line Comment[sl]=Stik ni več povezan Comment[sr]=Контакт је отишао ван везе Comment[sr@ijekavian]=Контакт је отишао ван везе Comment[sr@ijekavianlatin]=Kontakt je otišao van veze Comment[sr@latin]=Kontakt je otišao van veze Comment[sv]=En användare har kopplat ner Comment[ta]=பயனர் வெளியேறிவிட்டார் Comment[tg]=Корванде аз шабака хориҷ шуд Comment[th]=ชื่อติดต่อไม่อยู่ในสายแล้ว Comment[tr]=Bir kişi çevrimdışı duruma geçti Comment[ug]=بىر ئالاقەداش تورسىز Comment[uk]=Контакт вийшов поза мережу Comment[x-test]=xxA contact has gone offlinexx Comment[zh_CN]=联系人离线 Comment[zh_HK]=有個聯絡人已離線 Comment[zh_TW]=聯絡人已離線 Sound=KDE-Im-Contact-Out.ogg Action=None Contexts=contact,group [Event/kopete_contact_status_change] Name=Status Change Name[ar]=الحالة تغيرت Name[ast]=Cambéu d'estáu Name[bg]=Промяна в състоянието Name[bn]=অবস্থা পরিবর্তন Name[bs]=Promjena statusa Name[ca]=Canvia l'estat Name[ca@valencia]=Canvia l'estat Name[cs]=Změna stavu Name[cy]=Newid Cyflwr Name[da]=Statusændring Name[de]=Statusänderung Name[el]=Αλλαγή κατάστασης Name[en_GB]=Status Change Name[eo]=Stata ŝanĝo Name[es]=Cambio de estado Name[et]=Staatuse muutus Name[eu]=Egoeraren aldaketa Name[fi]=Tilan muuttuminen Name[fr]=Changement d'état Name[ga]=Athrú Stádais Name[gl]=Cambio de estado Name[he]=שינוי מצב Name[hi]=स्थिति परिवर्तन Name[hne]=स्थिति बदलाव Name[hr]=Promjena statusa Name[hu]=Állapotváltozás Name[ia]=Modifica de stato Name[is]=Breyta stöðu Name[it]=Cambio di stato Name[ja]=状態の変化 Name[kk]=Күй-жайы өзгерді Name[km]=ការ​ផ្លាស់ប្ដូរ​ស្ថានភាព Name[ko]=상태 변경 Name[lt]=Būsenos pakitimas Name[lv]=Statusa maiņa Name[mk]=Промена на статусот Name[ml]=സ്ഥിതി മാറ്റം Name[nb]=Statusendring Name[nds]=Statusännern Name[nl]=Statuswijziging Name[nn]=Statusendring Name[pa]=ਹਾਲਤ ਬਦਲੋ Name[pl]=Zmiana dostępności Name[pt]=Mudança de Estado Name[pt_BR]=Alteração de status Name[ro]=Schimbarea stării Name[ru]=Изменение состояния Name[si]=තත්වය වෙන් විය Name[sk]=Zmena stavu Name[sl]=Sprememba stanja Name[sr]=Промена стања Name[sr@ijekavian]=Промјена стања Name[sr@ijekavianlatin]=Promjena stanja Name[sr@latin]=Promena stanja Name[sv]=Statusändring Name[ta]=நிலை மாற்றம் Name[tg]=Ивази Ҳолат Name[th]=สถานะเปลี่ยนแปลง Name[tr]=Durum Değişimi Name[ug]=ھالەت ئۆزگىرىش Name[uk]=Зміна стану Name[uz]=Holati oʻzgardi Name[uz@cyrillic]=Ҳолати ўзгарди Name[wa]=Candjmint di statut Name[x-test]=xxStatus Changexx Name[zh_CN]=状态更改 Name[zh_HK]=狀態改變 Name[zh_TW]=狀態變更 Comment=A contact's online status has changed Comment[ar]=تغير حالة مراسَل متصل Comment[ast]=El contautu coneutáu camudó el so estáu Comment[bg]=Променено е състоянието на контакт Comment[bn]=যোগাযোগ তালিকাভুক্ত একজনের অনলাইন অবস্থার পরিবর্তন হয়েছে Comment[bs]=Status kontakta se promijenio Comment[ca]=L'estat d'un contacte ha canviat Comment[ca@valencia]=L'estat d'un contacte ha canviat Comment[cs]=Osoba změnila online stav Comment[da]=En kontakts status på nettet er ændret Comment[de]=Der Online-Status eines Kontakt hat sich geändert Comment[el]=Η κατάσταση σύνδεσης μιας επαφής άλλαξε Comment[en_GB]=A contact's online status has changed Comment[eo]=La stato de kontaktulo ŝanĝis Comment[es]=El contacto conectado ha cambiado su estado Comment[et]=Kontakt muutis oma võrgusoleku staatust Comment[eu]=Kontaktu baten lineako egoera aldatu da Comment[fi]=Henkilön läsnäolotila on muuttunut Comment[fr]=Un contact a changé son état de connexion Comment[ga]=Athraíodh stádais ar líne de theagmháil Comment[gl]=Cambiou o estado de conexión dun contacto Comment[he]=איש הקשר שינה את מצב ההתחברות שלו Comment[hi]=सम्पर्क की ऑनलाइन स्थिति परिवर्तित हुई Comment[hne]=सम्पर्क के आनलाइन स्थिति बदले होइस Comment[hr]=Promijenio se korisnikov status povezanosti Comment[hu]=Egy partner állapota megváltozott Comment[ia]=Un stato de in linea de contacto ha cambiate Comment[is]=Notandi breytir um stöðu Comment[it]=È cambiato lo stato di presenza di un contatto Comment[ja]=コンタクトの接続状態が変わりました Comment[kk]=Бір контакттың желідегі күй-жайы ауысты Comment[km]=ស្ថានភាព​លើ​បណ្ដាញ​របស់​ទំនាក់ទំនង​បាន​ផ្លាស់ប្ដូរ Comment[ko]=대화 상대의 온라인 상태가 변경됨 Comment[lt]=Kontaktinio asmens būsena pakito Comment[lv]=Kontakta tiešsaistes statuss ir mainījies Comment[mk]=Статусот на контактот на линија се измени Comment[ml]=ഒരു സമ്പര്‍ക്കത്തിന്റെ ഓണ്‍ലൈന്‍ സ്ഥിതി മാറി Comment[nb]=En kontakts nettstatus er endret Comment[nds]=De Tokoppel-Status vun en Kontakt hett sik ännert Comment[nl]=De online status van een contactpersoon is gewijzigd Comment[nn]=Ein kontakt har endra statusen sin Comment[pa]=ਇੱਕ ਸੰਪਰਕ ਦੀ ਆਨਲਾਈਨ ਹਾਲਤ ਬਦਲੀ ਗਈ Comment[pl]=Użytkownik zmienił swoją dostępność Comment[pt]=Mudou o estado de ligação de um contacto Comment[pt_BR]=O usuário mudou o seu status de conectado Comment[ro]=Starea conexiunii unui contact s-a schimbat Comment[ru]=Пользователь изменил своё состояние в сети Comment[si]=සබඳතාවේ මාර්‍ගගත තත්වය වෙනස් විය Comment[sk]=Kontakt zmenil online stav Comment[sl]=Stik je spremenil svoje stanje Comment[sr]=Стање на вези контакта се променило Comment[sr@ijekavian]=Стање на вези контакта се промијенило Comment[sr@ijekavianlatin]=Stanje na vezi kontakta se promijenilo Comment[sr@latin]=Stanje na vezi kontakta se promenilo Comment[sv]=Uppkopplingsstatus för en användare har ändrats Comment[ta]= இணைய உரையாடலில் பயனரின் நிலை மாற்றப்பட்டது Comment[tg]=Ҳолати алоқаҳои пайваста тағир дода шуданд Comment[th]=สถานะการอยู่ในสายของชื่อติดต่อมีการเปลี่ยนแปลง Comment[tr]=Bir kişinin bağlı durumu değişti Comment[ug]=بىر ئالاقەداشنىڭ توردىكى ھالىتى ئۆزگەردى Comment[uk]=Змінився мережний стан контакту Comment[x-test]=xxA contact's online status has changedxx Comment[zh_CN]=联系人更改了他的在线状态 Comment[zh_HK]=有個聯絡人的上線狀態改變了 Comment[zh_TW]=聯絡人的狀態已變更 Sound= Action=None [Event/kopete_contact_highlight] Name=Highlight Name[ar]=إبراز Name[ast]=Resaltar Name[bg]=Открояване Name[bn]=গুরুত্বপূর্ণ Name[br]=Splannadur Name[bs]=Istaknuto Name[ca]=Ressaltat Name[ca@valencia]=Ressaltat Name[cs]=Zvýraznění Name[cy]=Amlygu Name[da]=Fremhæv Name[de]=Hervorgehoben Name[el]=Τονισμός Name[en_GB]=Highlight Name[eo]=Emfazaĵo Name[es]=Resaltar Name[et]=Esiletõstmine Name[eu]=Nabarmendu Name[fa]=مشخص Name[fi]=Korostus Name[fr]=Surlignement Name[ga]=Aibhsiú Name[gl]=Realzar Name[he]=מודגש Name[hi]=उभारें Name[hne]=चमकाव Name[hr]=Isticanje Name[hu]=Kiemelés Name[ia]=Evidentia Name[is]=Merkja Name[it]=Evidenziazione Name[ja]=強調 Name[kk]=Ерекше Name[km]=សំខាន់ Name[ko]=강조 Name[lt]=Paryškinti Name[lv]=Izcelta Name[mai]=उभारू Name[mk]=Осветлување Name[ml]=എടുത്തുകാട്ടുക Name[nb]=Marker Name[nds]=Rutheven Name[ne]=हाइलाइट Name[nl]=Accentueren Name[nn]=Markert melding Name[pa]=ਹਾਈਲਾਈਟ Name[pl]=Podświetlenie Name[pt]=Realce Name[pt_BR]=Realce Name[ro]=Evidențiere Name[ru]=Выделение Name[se]=Merke Name[si]=උපුටන Name[sk]=Zvýraznenie Name[sl]=Poudari Name[sq]=Përzgjidh Name[sr]=Истицање Name[sr@ijekavian]=Истицање Name[sr@ijekavianlatin]=Isticanje Name[sr@latin]=Isticanje Name[sv]=Markera Name[ta]=முனைப்புறுத்தல் Name[tg]=Равшаннамоӣ Name[th]=เน้นข้อความ Name[tr]=Vurgulama Name[ug]=يورۇت Name[uk]=Підсвічування Name[vi]=Chiếu sáng Name[wa]=E sorbiyance Name[x-test]=xxHighlightxx Name[zh_CN]=高亮 Name[zh_HK]=加強顯示 Name[zh_TW]=高亮度 Contexts=contact,group,class Comment=A highlighted message has been received Comment[ar]=رسالة بارزة استقبلت Comment[ast]=Recibióse un mensax resaltáu Comment[bg]=Получено е откроено съобщение Comment[bn]=একটি গুরুত্বপূর্ণ বার্তা গ্রহণ করা হয়েছে Comment[bs]=Primljena je označena poruka Comment[ca]=S'ha rebut un missatge ressaltat Comment[ca@valencia]=S'ha rebut un missatge ressaltat Comment[cs]=Byla obdržena zvýrazněná zpráva Comment[da]=En fremhævet besked er blevet modtaget Comment[de]=Es ist eine hervorgehobene Nachricht eingegangen Comment[el]=Λήφθηκε ένα τονισμένο μήνυμα Comment[en_GB]=A highlighted message has been received Comment[eo]=Emfazita mesaĝo estis ricevita Comment[es]=Se ha recibido un mensaje resaltado Comment[et]=Saabus esiletõstetud sõnum Comment[eu]=Nabarmendutako mezu bat jaso da Comment[fi]=Korostettu viesti on saapunut Comment[fr]=Un message surligné a été reçu Comment[ga]=Fuarthas teachtaireacht aibhsithe Comment[gl]=Recibiuse unha mensaxe realzada Comment[he]=התקבל מסר מודגש Comment[hi]=उभारा गया संदेश प्राप्त हुआ Comment[hne]=उभारे गे संदेस प्राप्त होइस Comment[hr]=Osvijetljena poruka je primljena Comment[hu]=Kiemelt üzenet érkezett Comment[ia]=Un message evidentiate ha essite recipite Comment[is]=Merkt skeyti móttekið Comment[it]=È stato ricevuto un messaggio evidenziato Comment[ja]=強調されたメッセージが届きました Comment[kk]=Ерекше хабарлама келіп түсті Comment[km]=បាន​ទទួល​សារ​សំខាន់​មួយ Comment[ko]=강조된 메시지가 들어옴 Comment[lt]=Gauta paryškinta žinutė Comment[lv]=Ir saņemts izcelts ziņojums Comment[mk]=Примена е осветлена порака Comment[ml]=എടുത്തുകാട്ടിയ ഒരു സന്ദേശം ലഭിച്ചിട്ടുണ്ട് Comment[nb]=En framhevet melding er mottatt Comment[nds]=En rutheevt Naricht keem rin Comment[nl]=Er is een geaccentueerd bericht ontvangen Comment[nn]=Du har fått ei markert melding Comment[pa]=ਇੱਕ ਹਾਈਲਾਈਟ ਸੁਨੇਹਾ ਮਿਲਿਆ ਹੈ Comment[pl]=Podświetlona wiadomość została odebrana Comment[pt]=Foi recebida uma mensagem realçada Comment[pt_BR]=Uma mensagem realçada foi recebida Comment[ro]=A fost recepționat un mesaj evidențiat Comment[ru]=Получено выделенное сообщение Comment[si]=උපුටාගත් පණිවුඩයක් ලැබිනි Comment[sk]=Bola prijatá zvýraznená správa Comment[sl]=Prejeto je bilo poudarjeno sporočilo Comment[sr]=Примљена је истакнута порука Comment[sr@ijekavian]=Примљена је истакнута порука Comment[sr@ijekavianlatin]=Primljena je istaknuta poruka Comment[sr@latin]=Primljena je istaknuta poruka Comment[sv]=Ett markerat meddelande har anlänt Comment[ta]=தனிப்படுத்தப்பட்ட செய்தி பெறப்பட்டது Comment[tg]=Пайёмҳои равшаншаванда қабул гардиданд Comment[th]=ได้รับข้อความที่ถูกเน้นเข้ามา Comment[tr]=Vurgulanmış bir ileti alındı Comment[ug]=يورۇتۇلغان ئۇچۇردىن بىرنى تاپشۇرۇۋالدى Comment[uk]=Було отримано підсвічене повідомлення Comment[x-test]=xxA highlighted message has been receivedxx Comment[zh_CN]=收到了突出显示的消息 Comment[zh_HK]=收到一個加強顯示的訊息 Comment[zh_TW]=已接收到高亮度訊息 Sound=KDE-Im-Highlight-Msg.ogg Action=Sound|Popup|Taskbar Persistant=true [Event/kopete_contact_lowpriority] Name=Low Priority Messages Name[ar]=رسائل منخفضة الأولويّة Name[ast]=Mensaxes de prioridá baxa Name[bg]=Съобщения с нисък приоритет Name[bs]=Poruke niskog prioriteta Name[ca]=Missatges de baixa prioritat Name[ca@valencia]=Missatges de baixa prioritat Name[cs]=Zprávy s nízkou prioritou Name[da]=Beskeder med lav prioritet Name[de]=Nachrichten mit niedriger Priorität Name[el]=Μηνύματα χαμηλής προτεραιότητας Name[en_GB]=Low Priority Messages Name[eo]=Malaltantaŭecaj mesaĝoj Name[es]=Mensajes de prioridad baja Name[et]=Madala prioriteediga sõnumid Name[eu]=Lehentasun gutxiko mezuak Name[fi]=Viestit, jotka eivät ole tärkeitä Name[fr]=Messages de basse priorité Name[ga]=Teachtaireachtaí de Thosaíocht Íseal Name[gl]=Mensaxes de prioridade baixa Name[hi]=निम्न प्राथमिकता का संदेश Name[hne]=निम्न प्राथमिकता के संदेस Name[hr]=Niskoprioritetne poruke Name[hu]=Alacsony prioritású üzenetek Name[ia]=Messages a basse prioritate Name[it]=Messaggi di bassa priorità Name[ja]=優先度の低いメッセージ Name[kk]=Маңызы төмен хабарламалар Name[km]=សារ​អាទិភាព​ទាប Name[ko]=중요도가 낮은 메시지 Name[lt]=Žemo prioriteto žinutės Name[lv]=Zemas prioritātes ziņojums Name[ml]=താഴ്ന്ന പരിഗണനയുള്ള സന്ദേശങ്ങള്‍ Name[nb]=Meldinger med lav prioritet Name[nds]=Narichten mit siet Prioriteet Name[nl]=Berichten met lage prioriteit Name[nn]=Melding med låg prioritet Name[pa]=ਘੱਟ ਤਰਜੀਹ ਸੁਨੇਹੇ Name[pl]=Wiadomości o niskim priorytecie Name[pt]=Mensagens de Baixa Prioridade Name[pt_BR]=Mensagens com baixa prioridade Name[ro]=Mesaje cu prioritate scăzută Name[ru]=Сообщения с низким приоритетом Name[si]=අඩු ප්‍රමුඛතා පණිවුඩ Name[sk]=Správy s nízkou prioritou Name[sl]=Sporočila z nizko prednostjo Name[sr]=Поруке ниског приоритета Name[sr@ijekavian]=Поруке ниског приоритета Name[sr@ijekavianlatin]=Poruke niskog prioriteta Name[sr@latin]=Poruke niskog prioriteta Name[sv]=Lågprioriterat meddelande Name[th]=ข้อความที่มีระดับความสำคัญต่ำ Name[tr]=Düşük Öncelikli İletiler Name[ug]=تۆۋەن ئالدىنلىقتىكى ئۇچۇرلار Name[uk]=Повідомлення з низьким пріоритетом Name[x-test]=xxLow Priority Messagesxx Name[zh_CN]=低优先级消息 Name[zh_TW]=低優先訊息 Comment=A message marked with a low priority has been received Comment[ar]=رسالة منخفضة الأولوية استقبلت Comment[ast]=Recibióse un mensax con prioridá baxa Comment[bg]=Получено е съобщение с нисък приоритет Comment[bn]=একটি কম গুরুত্বপূর্ণ বার্তা গ্রহণ করা হয়েছে Comment[bs]=Primljena je poruka označena niskim prioritetom Comment[ca]=S'ha rebut un missatge marcat amb baixa prioritat Comment[ca@valencia]=S'ha rebut un missatge marcat amb baixa prioritat Comment[cs]=Byla obdržena zvýrazněná zpráva s nízkou prioritou Comment[da]=En indkommende besked med lav prioritet er blevet modtaget Comment[de]=Es ist eine Nachricht mit niedriger Priorität eingegangen Comment[el]=Λήφθηκε ένα μήνυμα χαμηλής προτεραιότητας Comment[en_GB]=A message marked with a low priority has been received Comment[eo]=Mesaĝo markita kiel malalte antaŭeca estis ricevita Comment[es]=Se ha recibido un mensaje con prioridad baja Comment[et]=Saabus madalaprioriteediline sõnum Comment[eu]=Lehentasun gutxiko bezala markatutako mezu bat jaso da Comment[fi]=Vähemmän tärkeä viesti on saapunut Comment[fr]=Un message marqué avec une basse priorité a été reçu Comment[ga]=Fuarthas teachtaireacht de thosaíocht íseal Comment[gl]=Recibiuse unha mensaxe marcada con prioridade baixa Comment[he]=הודעה שמסומנת כבעלת עדיפות נמוכה התקבלה Comment[hi]=निम्न प्राथमिकता चिह्नित एक संदेश प्राप्त हुआ Comment[hne]=निम्न प्राथमिकता चिनहित एक संदेस प्राप्त होइस Comment[hr]=Primljena je poruka niskog prioriteta Comment[hu]=Alacsony prioritású üzenet érkezett Comment[ia]=Un message marcate con un signo de basse prioritate a essite recipite Comment[is]=Skeyti með lágum forgangi móttekið Comment[it]=È stato ricevuto un messaggio di bassa priorità Comment[ja]=優先度の低いメッセージが届きました Comment[kk]=Маңызы төмен деп белгіленген хабарлама келді Comment[km]=បាន​ទទួល​សារ ដែល​បាន​សម្គាល់​​ជា​អាទិភាព​ទាប Comment[ko]=중요도가 낮은 메시지가 들어옴 Comment[lt]=Gauta žemo prioriteto žinutė Comment[lv]=Ir saņemts zemas prioritātes ziņojums Comment[mk]=Примена е порака означена со низок приоритет Comment[ml]=ഒരു താഴ്ന്ന പരിഗണന അടയാളപ്പെടുത്തിയ സന്ദേശം ലഭിച്ചിട്ടുണ്ട് Comment[nb]=En melding merket med lav prioritet er mottatt Comment[nds]=En Naricht mit siete Prioriteet keem rin Comment[nl]=Een bericht gemarkeerd met een lage prioriteit is ontvangen Comment[nn]=Du har fått ei melding med låg prioritet Comment[pa]=ਇੱਕ ਘੱਟ ਤਰਜੀਹ ਵਾਲਾ ਸੁਨੇਹਾ ਮਿਲਿਆ ਹੈ Comment[pl]=Otrzymana została wiadomość o niskim priorytecie Comment[pt]=Foi recebida uma mensagem marcada com prioridade baixa Comment[pt_BR]=Chegou uma mensagem marcada com baixa prioridade Comment[ro]=A fost recepționat un mesaj marcat cu prioritate scăzută Comment[ru]=Получено сообщение с низким приоритетом Comment[si]=අඩු ප්‍රමුඛතාවක් සලකුණු කල පණිවුඩයක් ලැබිනි Comment[sk]=Bola prijatá správa s nízkou prioritou Comment[sl]=Prejeto je bilo manj sporočilo z nizko prednostjo Comment[sr]=Примљена је порука означена ниским приоритетом Comment[sr@ijekavian]=Примљена је порука означена ниским приоритетом Comment[sr@ijekavianlatin]=Primljena je poruka označena niskim prioritetom Comment[sr@latin]=Primljena je poruka označena niskim prioritetom Comment[sv]=Ett meddelande märkt med låg prioritet har anlänt Comment[ta]=எளிய முன்னுரிமை ஏற்கப்பட்ட செய்தி சுழற்சி Comment[tg]=Пайёми бо имтиёзи паст нишона карда шуда қабул гардид Comment[th]=ได้รับข้อความที่ถูกทำเครื่องหมายว่ามีระดับความสำคัญต่ำเข้ามา Comment[tr]=Önceliği düşük olarak işaretlenmiş bir mesaj alındı Comment[ug]=تۆۋەن ئالدىنلىق بەلگىسى سېلىنغان بىر ئۇچۇرنى تاپشۇرۇۋالدى Comment[uk]=Було отримано повідомлення з низьким пріоритетом Comment[x-test]=xxA message marked with a low priority has been receivedxx Comment[zh_CN]=收到了标为低优先级的消息 Comment[zh_HK]=收到一個標示為不太重要的訊息 Comment[zh_TW]=接收到被標記為低優先的訊息 Contexts=contact,group,class Action=None Persistant=true [Event/yahoo_mail] Name=Yahoo Mail Name[ar]=بريد ياهو Name[ast]=Corréu de Yahoo Name[bg]=Поща Yahoo Name[bn]=ইয়্যাহু মেইল Name[br]=Postel Yahoo Name[bs]=Yahoo elektronska pošta Name[ca]=Correu Yahoo Name[ca@valencia]=Correu Yahoo Name[cs]=Yahoo Mail Name[da]=Yahoo Mail Name[de]=Yahoo Mail Name[el]=Yahoo Mail Name[en_GB]=Yahoo Mail Name[eo]=Yahoo retpoŝto Name[es]=Correo de Yahoo Name[et]=Yahoo kiri Name[eu]=Yahoo posta Name[fi]=Yahoo-sähköposti Name[fr]=Courriel Yahoo Name[ga]=Ríomhphost Yahoo Name[gl]=Correo de Yahoo Name[he]=דוא"ל של Yahoo Name[hi]=याहू मेल Name[hne]=याहू मेल Name[hr]=Yahoo Mail Name[hu]=Yahoo Mail Name[ia]=Yahoo Mail (E-posta de Yahoo) Name[is]=Yahoo póstur Name[it]=Posta Yahoo Name[ja]=Yahoo メール Name[kk]=Yahoo поштасы Name[km]=សំបុត្រ​យ៉ាហ៊ូ Name[ko]=Yahoo 메일 Name[lt]=Yahoo paštas Name[lv]=Yahoo pasts Name[mk]=Yahoo-пошта Name[ml]=യാഹൂ തപാല്‍ Name[nb]=Yahoo Mail Name[nds]=Yahoo-Nettpost Name[nl]=Yahoo Mail Name[nn]=Yahoo Mail Name[pa]=ਯਾਹੂ ਮੇਲ Name[pl]=Poczta Yahoo Name[pt]=Correio do Yahoo Name[pt_BR]=Yahoo Mail Name[ro]=Poșta Yahoo Name[ru]=Почта Yahoo Name[si]=Yahoo ලිපි Name[sk]=Yahoo pošta Name[sl]=E-pošta Yahoo Name[sq]=Yahoo Mail Name[sr]=Јаху пошта Name[sr@ijekavian]=Јаху пошта Name[sr@ijekavianlatin]=Yahoo pošta Name[sr@latin]=Yahoo pošta Name[sv]=Yahoo e-post Name[ta]=யாஹூ அஞ்சல் Name[tg]=Пости Yahoo Name[th]=จดหมายของ Yahoo Name[tr]=Yahoo Posta Name[ug]=Yahoo خەت Name[uk]=Пошта Yahoo Name[wa]=Yahoo Emile Name[x-test]=xxYahoo Mailxx Name[zh_CN]=雅虎邮件 Name[zh_HK]=Yahoo Mail Name[zh_TW]=Yahoo Mail Comment=New email has arrived in your Yahoo inbox Comment[ar]=بريد إلكتروني جديد وصل في الصندوق الوارد لياهو Comment[ast]=Llegó un mensax al to buzón de Yahoo Comment[bg]=Нова поща в кутията ви в Yahoo Comment[bn]=আপনার ইয়্যাহু ইনবক্সে নতুন ই-মেইল উপস্থিত হয়েছে Comment[br]=Deuet eo ur postel nevez d'em voest degemer Yahoo Comment[bs]=Nova elektronska pošta je stigla u vaše Yahoo dolazne poruke Comment[ca]=Ha arribat un nou correu a la vostra bústia de Yahoo Comment[ca@valencia]=Ha arribat un nou correu a la vostra bústia de Yahoo Comment[cs]=Přišla nová pošta do vaší Yahoo schránky Comment[da]=Ny e-mail ankom til din Yahoo-indbakke Comment[de]=Es befindet sich eine neue Nachricht im Yahoo-Eingangsordner Comment[el]=Ένα νέο μήνυμα έφτασε στο λογαριασμό σας στο Yahoo Comment[en_GB]=New email has arrived in your Yahoo inbox Comment[eo]=Nova poŝto alvenis en via Yahoo leterujo Comment[es]=Ha llegado un nuevo mensaje a su bandeja de entrada de Yahoo Comment[et]=Saabus uus kiri sinu Yahoo Inboxi Comment[eu]=Posta elektroniko berria jaso da zure Yahoo-ko sarrerako ontzian Comment[fi]=Uutta postia saapunut Yahoo-sähköpostilaatikkoon Comment[fr]=Un nouveau message est arrivé dans votre boîte aux lettres Yahoo Comment[ga]=Tháinig teachtaireacht nua isteach i do bhosca Yahoo Comment[gl]=Chegou un correo á caixa de correo de Yahoo Comment[he]=התקבל עבורך דואר חדש בתיבת הדוא"ל של Yahoo Comment[hi]=आपके याहू इनबक्से में एक नया ईमेल आया है Comment[hne]=आप मन के याहू इनबक्से मं एक नवा ईमेल आय हे Comment[hr]=Pristigla je nova e-pošta u vaš Yahoo-sandučić Comment[hu]=Új levél érkezett a Yahoo postaládába Comment[ia]=Nove e-posta ha arrivate in tu cassetta de Yahoo Comment[is]=Nýr póstur kominn í Yahoo innhólfið Comment[it]=È arrivata nuova posta nella casella Yahoo Comment[ja]=Yahoo の受信箱に新しいメールが届きました Comment[kk]=Yahoo эл.пошта жашігіңізге жаңа хат келіп түсті Comment[km]=អ៊ីមែល​ថ្មី​បាន​មក​ដល់​ក្នុង​ប្រអប់​ទទួល​យ៉ាហ៊ូ​របស់​អ្នក Comment[ko]=Yahoo 받은 편지함에 새 편지가 도착함 Comment[lt]=Į Yahoo pašto dėžutę gautas naujas laiškas Comment[lv]=Jūsu Yahoo pastastē ir pienācis jauns e-pasta ziņojums Comment[mk]=Пристигна нова пошта во вашето Yahoo-сандаче Comment[ml]=നിങ്ങളുടെ യാഹൂ തപാലിലെ ആഗമപേടകത്തില്‍ ഒരു ഈതപാല്‍ വന്നിട്ടുണ്ട് Comment[nb]=Ny e-post er mottatt i Yahoo-innkurven. Comment[nds]=Du hest niege Nettpost in Dien Yahoo-Postingang Comment[nl]=Er is een nieuw bericht gearriveerd in uw Yahoo-postbus Comment[nn]=Du har fått ein ny e-post i Yahoo-innboksen din Comment[pa]=ਤੁਹਾਡੇ ਯਾਹੂ ਇਨਬਾਕਸ ਵਿੱਚ ਨਵੀਂ ਈਮੇਲ ਆਈ ਹੈ। Comment[pl]=Nadeszła nowa wiadomość do Twojej skrzynki odbiorczej w Yahoo Comment[pt]=Foi recebido um e-mail novo na sua caixa de correio do Yahoo Comment[pt_BR]=Chegou um novo e-mail em sua caixa de entrada do Yahoo Comment[ro]=A sosit o scrisoare nouă în cutia poștală Yahoo Comment[ru]=Пришли новые письма в почтовый ящик Yahoo Comment[si]=නව ලිපියක් ඔබේ Yahoo තැපැල් කොටුවට පැමිණිනි Comment[sk]=Do vašej schránky Yahoo prišla nová správa Comment[sl]=V vaš nabiralnik Yahoo je prispela nova e-pošta Comment[sr]=Нова е‑пошта је стигла у ваше пријемно сандуче на Јахуу Comment[sr@ijekavian]=Нова е‑пошта је стигла у ваше пријемно сандуче на Јахуу Comment[sr@ijekavianlatin]=Nova e‑pošta je stigla u vaše prijemno sanduče na Yahoou Comment[sr@latin]=Nova e‑pošta je stigla u vaše prijemno sanduče na Yahoou Comment[sv]=Ett nytt brev har anlänt i din Yahoo-inkorg Comment[ta]=உங்கள் மின் அஞ்சல் பெட்டிக்குள் புதிய மின்னஞ்சல் ஒன்று வந்துள்ளது Comment[tg]=Ба қутии пости Yahoo-и шумо пайёми электронии нав омад Comment[th]=มีจดหมายใหม่เข้ามาในกล่องจดหมายเข้าบน Yahoo ของคุณ Comment[tr]=Yahoo gelen kutunuza yeni bir e-posta geldi Comment[ug]=سىزنىڭ Yahoo قوبۇللاش ساندۇقىڭىزغا يېڭى تورخەت كەلدى Comment[uk]=Надійшла нова пошта у вашу скриньку Yahoo Comment[x-test]=xxNew email has arrived in your Yahoo inboxxx Comment[zh_CN]=您的雅虎收件箱中有新邮件到达 Comment[zh_HK]=您的 Yahoo 收件匣有新郵件 Comment[zh_TW]=您的 Yahoo 收件匣中有新郵件 Action=Popup -[Event/msn_mail] -Name=MSN Mail -Name[ar]=MSN بريد -Name[ast]=Corréu de MSN -Name[bg]=Поща MSN -Name[bn]=এমএসএন মেইল -Name[br]=Postel MSN -Name[bs]=MSN Elektronska pošta -Name[ca]=Correu de MSN -Name[ca@valencia]=Correu de MSN -Name[cs]=MSN pošta -Name[cy]=MSN Mail -Name[da]=MSN-Mail -Name[de]=MSN Mail -Name[el]=MSN Mail -Name[en_GB]=MSN Mail -Name[eo]=MSN retpoŝto -Name[es]=Correo de MSN -Name[et]=MSN-i kiri -Name[eu]=MSN posta -Name[fi]=MSN-sähköposti -Name[fr]=Courriel MSN -Name[ga]=Ríomhphost MSN -Name[gl]=Correo MSN -Name[he]=דוא"ל של MSN -Name[hi]=एमएसएन मेल -Name[hne]=एमएसएन मेल -Name[hr]=MSN pošta -Name[hu]=MSN e-mail -Name[ia]=MSN Mail (E-posta de MSN) -Name[is]=MSN póstur -Name[it]=Posta MSN -Name[ja]=MSN メール -Name[kk]=MSN поштасы -Name[km]=សំបុត្រ MSN -Name[ko]=MSN 메일 -Name[lt]=MSN Paštas -Name[lv]=MSN pasts -Name[mk]=MSN-пошта -Name[ml]=എംഎസ്‌എന്‍ തപാല്‍ -Name[nb]=MSN Mail -Name[nds]=MSN-Nettpost -Name[nl]=MSN Mail -Name[nn]=MSN Mail -Name[pa]=MSN ਮੇਲ -Name[pl]=Poczta MSN -Name[pt]=Correio do MSN -Name[pt_BR]=MSN Mail -Name[ro]=Poșta MSN -Name[ru]=Почта MSN -Name[si]=MSN ලිපි -Name[sk]=MSN pošta -Name[sl]=E-pošta MSN -Name[sq]=MSN Mail -Name[sr]=МСН пошта -Name[sr@ijekavian]=МСН пошта -Name[sr@ijekavianlatin]=MSN pošta -Name[sr@latin]=MSN pošta -Name[sv]=MSN e-post -Name[ta]=MSN மின்னஞ்சல் -Name[tg]=Пости MSN -Name[th]=จดหมายของ MSN -Name[tr]=MSN Posta -Name[ug]=MSN خەت -Name[uk]=Пошта MSN -Name[x-test]=xxMSN Mailxx -Name[zh_CN]=MSN 邮件 -Name[zh_HK]=MSN Mail -Name[zh_TW]=MSN 郵件 -Comment=New email has arrived in your MSN inbox -Comment[ar]=بريد إلكتروني جديد وصل في الصندوق الوارد لـ MSN -Comment[ast]=Llegó un mensax al to buzón de MSN -Comment[bg]=Нова поща в кутията ви в MSN -Comment[bn]=আপনার এমএসএন ইনবক্সে নতুন ই-মেইল উপস্থিত হয়েছে -Comment[br]=Deuet eo ur postel nevez d'em voest degemer MSN -Comment[bs]=Nova elektronska pošta je stigla u vaše MSN dolazne poruke -Comment[ca]=Ha arribat un nou correu a la vostra bústia de MSN -Comment[ca@valencia]=Ha arribat un nou correu a la vostra bústia de MSN -Comment[cs]=Přišla nová pošta do vaší MSN schránky -Comment[da]=Ny e-mail ankom til din MSN-indbakke -Comment[de]=Es befindet sich eine neue Nachricht MSN-Eingangsordner -Comment[el]=Ένα νέο μήνυμα έφτασε στο λογαριασμό σας στο MSN -Comment[en_GB]=New email has arrived in your MSN inbox -Comment[eo]=Nova poŝto alvenis en via MSN leterujo -Comment[es]=Ha llegado un nuevo mensaje a su bandeja de entrada de MSN -Comment[et]=Saabus uus kiri sinu MSN Inboxi -Comment[eu]=Posta elektroniko berria jaso da zure MSN-ko sarrerako ontzian -Comment[fi]=Uutta postia saapunut MSN-sähköpostilaatikkoon -Comment[fr]=Un nouveau message est arrivé dans votre boîte aux lettres MSN -Comment[ga]=Tháinig teachtaireacht nua isteach i do bhosca MSN -Comment[gl]=Chegou un correo á caixa de correo de MSN -Comment[he]=התקבל עבורך דואר חדש בתיבת הדוא"ל של MSN -Comment[hi]=आपके एमएसएन इनबक्से में एक नया ईमेल आया है -Comment[hne]=आप मन के एमएसएन इनबक्से मं एक नवा ईमेल आय हे -Comment[hr]=Nova pošta je stigla u vaš MSN sandučić -Comment[hu]=Új levél érkezett az MSN postaládába -Comment[ia]=Nove e-posta ha arrivate in tu cassetta de MSN -Comment[is]=Það er nýr póstur í MSN innhólfinu þínu -Comment[it]=È arrivata nuova posta nella casella MSN -Comment[ja]=MSN の受信箱に新しいメールが届きました -Comment[kk]=MSN эл.пошта жашігіңізге жаңа хат келіп түсті -Comment[km]=អ៊ីមែល​ថ្មី​បាន​មក​ដល់​ក្នុង​ប្រអប់​ទទួល MSN របស់​អ្នក -Comment[ko]=MSN 받은 편지함에 새 편지가 도착함 -Comment[lt]=Į MSN pašto dėžutę gautas naujas laiškas -Comment[lv]=Jūsu MSN pastastē ir pienācis jauns e-pasta ziņojums -Comment[mk]=Пристигна нова пошта во вашето MSN-сандаче -Comment[ml]=നിങ്ങളുടെ എംഎസ്‌എന്‍ ആഗമപേടകത്തില്‍ പുതിയ ഈതപാല്‍ വന്നിട്ടുണ്ട് -Comment[nb]=Ny e-post er mottatt i MSN-innkurven -Comment[nds]=Du hest niege Nettpost in Dien MSN-Postingang -Comment[nl]=Er is een nieuw bericht gearriveerd in uw MSN-postbus -Comment[nn]=Du har fått ein ny e-post i MSN-innboksen din -Comment[pa]=ਤੁਹਾਡੇ MSN ਇਨ-ਬਾਕਸ ਵਿੱਚ ਇੱਕ ਨਵੀਂ ਈਮੇਲ ਆਈ ਹੈ -Comment[pl]=Nadeszła nowa wiadomość do Twojej skrzynki odbiorczej w MSN -Comment[pt]=Foi recebido um e-mail novo na sua caixa de correio do MSN -Comment[pt_BR]=Chegou um novo e-mail em sua caixa de entrada do MSN -Comment[ro]=A sosit o scrisoare nouă în cutia poștală MSN -Comment[ru]=Пришли новые письма в почтовый ящик MSN -Comment[si]=නව ලිපියක් ඔබේ MSN තැපැල් කොටුවට පැමිණිනි -Comment[sk]=Do vašej schránky MSN prišla nová správa -Comment[sl]=V vaš nabiralnik MSN je prispela nova e-pošta -Comment[sr]=Нова е‑пошта је стигла у ваше пријемно сандуче на МСН‑у -Comment[sr@ijekavian]=Нова е‑пошта је стигла у ваше пријемно сандуче на МСН‑у -Comment[sr@ijekavianlatin]=Nova e‑pošta je stigla u vaše prijemno sanduče na MSN‑u -Comment[sr@latin]=Nova e‑pošta je stigla u vaše prijemno sanduče na MSN‑u -Comment[sv]=Ett nytt brev har anlänt i din MSN-inkorg -Comment[ta]=உங்கள் எம்எஸ்என் அஞ்சல் பெட்டிக்கு புதிய மின்னஞ்சல் வந்துள்ளது -Comment[tg]=Ба қутии пости MSN-и шумо пайёми электронии нав омад -Comment[th]=มีจดหมายใหม่เข้ามาในกล่องจดหมายเข้าบน MSN ของคุณ -Comment[tr]=MSN gelen kutunuza yeni bir e-posta geldi -Comment[ug]=سىزنىڭ MSN قوبۇللاش ساندۇقىڭىزغا يېڭى تورخەت كەلدى -Comment[uk]=Надійшла нова пошта у вашу скриньку MSN -Comment[x-test]=xxNew email has arrived in your MSN inboxxx -Comment[zh_CN]=您的 MSN 收件箱中有新邮件到达 -Comment[zh_HK]=您的 MSN 收件匣有新郵件 -Comment[zh_TW]=您的 MSN 收件匣中有新郵件 -Action=Popup -Persistant=true - [Event/icq_authorization] Name=ICQ Authorization Name[ar]=ICQ تصريح Name[ast]=Autorización ICQ Name[bg]=Разрешение в ICQ Name[bn]=আই-সি-কিউ প্রাপ্তাধিকার Name[bs]=ICQ Autorizacija Name[ca]=Autorització ICQ Name[ca@valencia]=Autorització ICQ Name[cs]=Oprávnění ICQ Name[da]=ICQ-godkendelse Name[de]=ICQ-Autorisierung Name[el]=Εξουσιοδότηση ICQ Name[en_GB]=ICQ Authorisation Name[eo]=ICQ rajtigo Name[es]=Autorización ICQ Name[et]=ICQ autoriseerimine Name[eu]=ICQ baimena Name[fi]=ICQ-todennus Name[fr]=Autorisation ICQ Name[ga]=Údarú ICQ Name[gl]=Autorización de ICQ Name[he]=הרשמה ל-ICQ Name[hi]=आईसीक्यू अनुमोदन Name[hne]=आईसीक्यू अनुमोदन Name[hr]=Autorizacija ICQ-a Name[hu]=ICQ felhasználóazonosítás Name[ia]=Autorisation de ICQ Name[is]=ICQ auðkenning Name[it]=Autorizzazione ICQ Name[ja]=ICQ 許可 Name[kk]=ICQ авторизациясы Name[km]=សេចក្ដី​អនុញ្ញាត ICQ Name[ko]=ICQ 인증 Name[lt]=ICQ patvirtinimas Name[lv]=ICQ autorizācija Name[ml]=ഐസിക്യൂ അധികാരം ഏല്‍പ്പിക്കല്‍ Name[nb]=ICQ-autorisasjon Name[nds]=ICQ-Identifikatschoon Name[nl]=ICQ-autorisatie Name[nn]=ICQ-godkjenning Name[pa]=ICQ ਪਰਮਾਣਕਿਤਾ Name[pl]=Uwierzytelnienie ICQ Name[pt]=Autorização do ICQ Name[pt_BR]=Autorização do ICQ Name[ro]=Autorizare ICQ Name[ru]=Авторизация ICQ Name[si]=ICQ අවසර දීම Name[sk]=ICQ oprávnenie Name[sl]=Pooblastitev ICQ Name[sr]=ајсикју овлашћивање Name[sr@ijekavian]=ајсикју овлашћивање Name[sr@ijekavianlatin]=ICQ ovlašćivanje Name[sr@latin]=ICQ ovlašćivanje Name[sv]=ICQ-behörighetskontroll Name[th]=การอนุญาตของ ICQ Name[tr]=ICQ İzni Name[ug]=ICQ دەلىللەش Name[uk]=Уповноваження ICQ Name[x-test]=xxICQ Authorizationxx Name[zh_CN]=ICQ 身份验证 Name[zh_HK]=ICQ 授權 Name[zh_TW]=ICQ 認證 Comment=An ICQ user has authorized/declined your authorization request Comment[ar]=مستخدم ICQ طلب ترخيص أداة تعريف مرسال Comment[ast]=Un usuariu d'ICQ autorizó/refugó la to petición d'autorización Comment[bg]=Потребител на ICQ е приел или отхвърлил искане за разрешение Comment[bn]=একজন আই-সি-কিউ ব্যবহারকারী আপনার প্রাপ্তাধিকার অনুরোধ অনুমোদন/প্রত্যাখ্যান করেছে Comment[bs]=ICQ korisnik je ovlasto/odbio vaš zahtjev za ovlaštenjem Comment[ca]=Un usuari d'ICQ ha autoritzat/declinat la vostra petició d'autorització Comment[ca@valencia]=Un usuari d'ICQ ha autoritzat/declinat la vostra petició d'autorització Comment[cs]=ICQ uživatel vám poskytl/odmítl požadavek na autorizaci Comment[da]=En ICQ-bruger har godkendt/afslået din godkendelsesforespørgsel Comment[de]=Ein ICQ-Benutzer hat Ihre Autorisierungsanfrage angenommen/abgelehnt Comment[el]=Ένας χρήστης ICQ δέχτηκε/απέρριψε την αίτηση εξουσιοδότησής σας Comment[en_GB]=An ICQ user has authorised/declined your authorisation request Comment[eo]=ICQ uzantulo akceptis vian peton de rajtigo Comment[es]=Un usuario de ICQ ha autorizado/rechazado su petición de autorización Comment[et]=ICQ kasutaja autoriseeris/lükkas tagasi sinu autoriseerimissoovi Comment[eu]=ICQ erabiltzaile batek zure baimen eskaera onartu/ukatu du. Comment[fi]=ICQ-käyttäjä on hyväksynyt/hylännyt hyväksymispyyntösi Comment[fr]=Un utilisateur ICQ a accepté ou décliné votre demande d'autorisation Comment[ga]=D'údaraigh/dhiúltaigh úsáideoir ICQ d'iarratas údaraithe Comment[gl]=Un usuario de ICQ autorizou/rexeitou a súa solicitude de autorización Comment[he]=משתמש ICQ אישר/דחה את בקשתך להרשמה Comment[hi]=एक आईसीक्यू उपयोक्ता ने आपके अनुमोदन निवेदन को अनुमोदित किया/अस्वीकृत किया है Comment[hne]=एक आईसीक्यू कमइया हर आप मन के अनुमोदन निवेदन ल अनुमोदित करिस/अस्वीकृत करे हे Comment[hr]=ICQ-korisnik je autorizirao/odbio vaš autorizacijski zahtjev Comment[hu]=Egy ICQ-felhasználó elfogadta vagy elutasította az Ön bejelentkezési kérését Comment[ia]=Un usator de ICQ ha autorisate/declinate tu requesta de autorisation Comment[is]=ICQ notandi hefur heimilað/hafnað auðkenningabeiðni þinni Comment[it]=Un utente ICQ ha autorizzato o rifiutato la tua richiesta Comment[ja]=ICQ ユーザがあなたの許可要求を承認/拒否しました Comment[kk]=Бір ICQ пайдаланушысы авторизация сұранысыңызды қанағат етті/етпеді Comment[km]=អ្នក​ប្រើ ICQ បាន​អនុញ្ញាត ឬ​បដិសេធ​សំណើ​សុំ​សេចក្ដី​អនុញ្ញាត​របស់​អ្នក Comment[ko]=ICQ 사용자가 인증 요구를 수락하거나 거부함 Comment[lt]=ICQ naudotojas priėmė/atmetė jūsų patvirtinimo prašymą Comment[lv]=Kāds ICQ lietotājs ir apstiprinājis/noraidījis jūsu autorizācijas pieprasījumuICQ lietotājs ir autorizējis/noraidījis jūsu autorizācijas pieprasījumu Comment[ml]=ഒരു ഐസിക്യൂ ഉപയോക്താവ് അധികാരംനിങ്ങള്‍ ആവശ്യ‌പ്പെട്ട അധികാരം ഏല്‍പ്പിച്ചു/നിരസിച്ചു Comment[nb]=En ICQ-bruker har autorisert/avvist din forespørsel om autorisasjon Comment[nds]=En ICQ-Bruker hett Dien Identifikatschoonanfraag tolaten/afwiest Comment[nl]=Een ICQ-gebruiker heeft uw autorisatieverzoek geaccepteerd of verworpen Comment[nn]=Ein ICQ-brukar har godkjent/avslått førespurnaden din Comment[pl]=Użytkownik ICQ zaakceptował/odrzucił Twoje żądanie autoryzacji Comment[pt]=Um utilizador do ICQ autorizou/recusou o seu pedido de autorização Comment[pt_BR]=Um usuário do ICQ aceitou/declinou seu pedido de autorização Comment[ro]=Un utilizator ICQ a acceptat/refuzat cererea dumneavoastră de autorizare Comment[ru]=Пользователь ICQ авторизовал вас или отклонил ваш запрос Comment[si]=ICQ පරිශීලකයෙක් විසින් ඔබේ අවසරදීම් ඉල්ලීම පිළිගෙන/ප්‍රතික්‍ෂේප කර ඇත Comment[sk]=ICQ užívateľ povolil/odmietol vašu požiadavku na oprávnenie Comment[sl]=Uporabnik ICQ-ja je sprejel/odklonil vašo zahtevo po pooblastitvi Comment[sr]=Корисник ајсикјуа је овластио/одбио ваш захтев за овлашћивањем Comment[sr@ijekavian]=Корисник ајсикјуа је овластио/одбио ваш захтјев за овлашћивањем Comment[sr@ijekavianlatin]=Korisnik ICQ‑a je ovlastio/odbio vaš zahtjev za ovlašćivanjem Comment[sr@latin]=Korisnik ICQ‑a je ovlastio/odbio vaš zahtev za ovlašćivanjem Comment[sv]=En ICQ-användare har tillåtit eller nekat till din begäran om behörighetskontroll Comment[th]=ผู้ใช้ ICQ ได้อนุญาต/ปฏิเสธ ตามการขออนุญาตที่คุณร้องขอไป Comment[tr]=ICQ kullanıcısı izin isteğinizi onayladı/onaylamadı Comment[ug]=بىر ICQ ئىشلەتكۈچى سىزنىڭ دەلىللەش ئىلتىماسىڭىزنى دەلىللىدى/رەت قىلدى Comment[uk]=Користувач ICQ уповноважив/відхилив ваш запит уповноваження Comment[x-test]=xxAn ICQ user has authorized/declined your authorization requestxx Comment[zh_CN]=ICQ 用户同意/拒绝了您的身份验证请求 Comment[zh_HK]=有位 ICQ 用戶批準/拒絕了您的授權要求 Comment[zh_TW]=ICQ 使用者已認可/拒絕您的認證請求 Action=Popup Persistant=true [Event/irc_event] Name=IRC Event Name[ar]=IRC حدث Name[ast]=Eventu d'IRC Name[bg]=Събитие в IRC Name[bn]=আই-আর-সি ঘটনা Name[bs]=IRC Događaj Name[ca]=Esdeveniment IRC Name[ca@valencia]=Esdeveniment IRC Name[cs]=IRC událost Name[da]=IRC-hændelse Name[de]=IRC-Ereignis Name[el]=Γεγονός IRC Name[en_GB]=IRC Event Name[eo]=IRC-Evento Name[es]=Evento de IRC Name[et]=IRC sündmus Name[eu]=IRC gertaera Name[fi]=IRC-tapahtuma Name[fr]=Évènement IRC Name[ga]=Teagmhas IRC Name[gl]=Evento IRC Name[he]=ארוע IRC Name[hi]=आईआरसी घटना Name[hne]=आईआरसी घटना Name[hr]=IRC-događaj Name[hu]=IRC-esemény Name[ia]=Evento de IRC Name[is]=IRC atburður Name[it]=Evento IRC Name[ja]=IRC イベント Name[kk]=IRC оқиғасы Name[km]=ព្រឹត្តិការណ៍ IRC Name[ko]=IRC 이벤트 Name[lt]=IRC įvykis Name[lv]=IRC notikums Name[ml]=ഐ‌ആര്‍സി സംഭവം Name[nb]=IRC-hendelse Name[nds]=Klöön-Begeefnis Name[nl]=IRC-gebeurtenis Name[nn]=IRC-hending Name[pa]=IRC ਈਵੈਂਟ Name[pl]=Zdarzenie IRC Name[pt]=Evento do IRC Name[pt_BR]=Evento IRC Name[ro]=Eveniment IRC Name[ru]=Событие IRC Name[si]=IRC අවස්ථාවක් Name[sk]=IRC udalosť Name[sl]=Dogodek IRC Name[sq]=Ngjarje IRC Name[sr]=ИРЦ догађај Name[sr@ijekavian]=ИРЦ догађај Name[sr@ijekavianlatin]=IRC događaj Name[sr@latin]=IRC događaj Name[sv]=IRC-händelse Name[th]=เหตุการณ์ของ IRC Name[tr]=IRC Olayı Name[ug]=IRC ھادىسە Name[uk]=Подія IRC Name[uz]=IRC hodisasi Name[uz@cyrillic]=IRC ҳодисаси Name[x-test]=xxIRC Eventxx Name[zh_CN]=IRC 事件 Name[zh_HK]=IRC 事件 Name[zh_TW]=IRC 事件 Comment=An IRC event has occurred Comment[ar]=حدث IRC وقع Comment[ast]=Hebo un eventu d'IRC Comment[bg]=Възникна събитие в IRC Comment[bn]=একটি আই-আর-সি ঘটনা ঘটেছে Comment[bs]=Događaj na IRC-u se desio Comment[ca]=Ha ocorregut un esdeveniment d'IRC Comment[ca@valencia]=Ha ocorregut un esdeveniment d'IRC Comment[cs]=Nastala IRC událost Comment[da]=En IRC-hændelse er forekommet Comment[de]=Es ist ein IRC-Ereignis aufgetreten Comment[el]=Συνέβη ένα γεγονός IRC Comment[en_GB]=An IRC event has occurred Comment[eo]=Okazis IRC-evento Comment[es]=Ha tenido lugar un evento de IRC Comment[et]=Midagi toimus IRCus Comment[eu]=IRC gertaera bat gertatu da Comment[fi]=IRC-tapahtuma Comment[fr]=Un évènement IRC s'est produit Comment[ga]=Tharla teagmhas IRC Comment[gl]=Aconteceu un evento IRC Comment[he]=ארוע IRC התרחש Comment[hi]=एक आईआरसी घटना हुई Comment[hne]=एक आईआरसी घटना होइस Comment[hr]=Dogodio se IRC-događaj Comment[hu]=IRC-esemény következett be Comment[ia]=Un evento de IRC ha occurrite Comment[is]=IRC atburður hefur átt sér stað Comment[it]=Si è verificato un evento IRC Comment[ja]=IRC イベントが発生しました Comment[kk]=IRC оқиға орын алды Comment[km]=ព្រឹត្តិការណ៍ IRC បាន​កើត​ឡើង Comment[ko]=IRC 이벤트가 발생함 Comment[lt]=Įvyko IRC įvykis Comment[lv]=Ir noticis IRC notikums Comment[ml]=ഒരു ഐ‌ആര്‍സി സംഭവം നടന്നിട്ടുണ്ട് Comment[nb]=Det har foregått en IRC-hendelse Comment[nds]=Dat hett en IRC-Begeefnis geven Comment[nl]=Er deed zich een IRC-gebeurtenis voor Comment[nn]=Det har skjedd ei IRC-hending Comment[pa]=ਇੱਕ IRC ਈਵੈਂਟ ਹੈ Comment[pl]=Wystąpiło zdarzenie IRC-a Comment[pt]=Ocorreu um evento do IRC Comment[pt_BR]=Ocorreu um evento do IRC Comment[ro]=A intervenit un eveniment IRC Comment[ru]=Произошло событие IRC Comment[si]=IRC අවස්ථාවක් හට ගැනිනි Comment[sk]=Nastala IRC udalosť Comment[sl]=Zgodil se je dogodek na IRC-u Comment[sr]=Догађај на ИРЦ‑у Comment[sr@ijekavian]=Догађај на ИРЦ‑у Comment[sr@ijekavianlatin]=Događaj na IRC‑u Comment[sr@latin]=Događaj na IRC‑u Comment[sv]=En IRC-händelse har inträffat Comment[th]=มีเหตุการณ์ของ IRC เกิดขึ้น Comment[tr]=IRC olayı meydana geldi Comment[ug]=بىر IRC ھادىسىسى يۈز بەردى Comment[uk]=Трапилась подія IRC Comment[x-test]=xxAn IRC event has occurredxx Comment[zh_CN]=发生了 IRC 事件 Comment[zh_HK]=發生了 IRC 事件 Comment[zh_TW]=IRC 事件發生 Action=Popup Persistant=true [Event/connection_error] Name=Connection Error Name[ar]=خطأ في الاتصال Name[ast]=Fallu de conexón Name[bg]=Грешка при свързване Name[bn]=সংযোগ ত্রুটি Name[br]=Fazi ar gevreadenn Name[bs]=Greška na vezi Name[ca]=Error de connexió Name[ca@valencia]=Error de connexió Name[cs]=Chyba ve spojení Name[da]=Forbindelsesfejl Name[de]=Verbindungsfehler Name[el]=Σφάλμα σύνδεσης Name[en_GB]=Connection Error Name[eo]=Konekta eraro Name[es]=Error de conexión Name[et]=Ühenduse viga Name[eu]=Konexio-errorea Name[fi]=Yhteysvirhe Name[fr]=Erreur de connexion Name[ga]=Earráid Ceangail Name[gl]=Erro na conexión Name[he]=שגיאה בחיבור Name[hi]=कनेक्शन में त्रुटि Name[hne]=कनेक्सन मं गलती Name[hr]=Greška na vezi Name[hu]=Csatlakozási hiba Name[ia]=Error de connexion Name[is]=Villa í tengingu Name[it]=Errore di connessione Name[ja]=接続エラー Name[kk]=Қосылымның қатесі Name[km]=កំហុស​ការ​ត​ភ្ជាប់ Name[ko]=연결 오류 Name[lt]=Ryšio klaida Name[lv]=Savienojuma kļūda Name[mai]=संबंधनमे त्रुटि Name[ml]=ബന്ധപ്പെടുന്നതില്‍ പിശകു് Name[nb]=Tilkoblingsfeil Name[nds]=Verbinnen-Fehler Name[nl]=Verbindingsfout Name[nn]=Tilkoplingsfeil Name[oc]=Error de connexion Name[pa]=ਕੁਨੈਕਸ਼ਨ ਗਲਤੀ Name[pl]=Błąd łączenia Name[pt]=Erro da Ligação Name[pt_BR]=Erro na conexão Name[ro]=Eroare la conectare Name[ru]=Ошибка соединения Name[si]=සබඳතා දෝශයක් Name[sk]=Chyba pripojenia Name[sl]=Napaka povezave Name[sq]=Gabim Lidhjeje Name[sr]=Грешка везе Name[sr@ijekavian]=Грешка везе Name[sr@ijekavianlatin]=Greška veze Name[sr@latin]=Greška veze Name[sv]=Anslutningsfel Name[th]=การเชื่อมต่อผิดพลาด Name[tr]=Bağlantı Hatası Name[ug]=باغلىنىش خاتالىقى Name[uk]=Помилка з'єднання Name[uz]=Ulanish xatosi Name[uz@cyrillic]=Уланиш хатоси Name[x-test]=xxConnection Errorxx Name[zh_CN]=连接错误 Name[zh_HK]=連線錯誤 Name[zh_TW]=連線錯誤 Comment=An error on connection has occurred Comment[ar]=حدث خطأ في الاتصال Comment[ast]=Ocurrió un fallu na conexón Comment[bg]=Възникна грешка при свързване Comment[bn]=সংযোগে একটি ত্রুটি ঘটেছে Comment[bs]=Došlo je do greške na vezi Comment[ca]=Hi ha hagut un error en connectar Comment[ca@valencia]=Hi ha hagut un error en connectar Comment[cs]=Nastala chyba ve spojení Comment[da]=En fejl i forbindelsen er opstået Comment[de]=Es ist ein Verbindungsfehler aufgetreten Comment[el]=Παρουσιάστηκε σφάλμα κατά τη σύνδεση Comment[en_GB]=An error on connection has occurred Comment[eo]=Eraro okazis konektante Comment[es]=Ha ocurrido un error en la conexión Comment[et]=Ühendusega tekkis viga Comment[eu]=Errore bat gertatu da konexioan Comment[fi]=Yhteydessä tapahtui virhe Comment[fr]=Une erreur de connexion est apparue Comment[ga]=Tharla earráid le linn ceangail Comment[gl]=Aconteceu un erro na conexión Comment[he]=התרחשה שגיאה בחיבור Comment[hi]=कनेक्शन में एक त्रुटि हुई Comment[hne]=कनेक्सन मं एक गलती होइस Comment[hr]=Dogodila se greška na vezi Comment[hu]=Hiba történt csatlakozás közben Comment[ia]=Un error sur connexion ha occurrite Comment[is]=Villa kom upp þegar reynt var að tengjast Comment[it]=Si è verificato un errore di connessione Comment[ja]=接続にエラーが発生しました Comment[kk]=Байланыс қатесі орын алды Comment[km]=កំហុស​ការ​ត​ភ្ជាប់​បាន​កើត​ឡើង Comment[ko]=연결 오류가 발생함 Comment[lt]=Įvyko ryšio klaida Comment[lv]=Savienojumā gadījusies kļūda Comment[ml]=ബന്ധപ്പെടുന്നതില്‍ പിശക് പറ്റിയിട്ടുണ്ട് Comment[nb]=Det har oppstått en tilkoblingsfeil Comment[nds]=Dat hett en Verbinnenfehler geven Comment[nl]=Er deed zich een fout in de verbinding voor Comment[nn]=Det oppstod ein feil med tilkoplinga Comment[pa]=ਕੁਨੈਕਸ਼ਨ ਨਾਲ ਇੱਕ ਗਲਤੀ ਆਈ ਹੈ Comment[pl]=Wystąpił błąd przy łączeniu Comment[pt]=Ocorreu um erro na ligação Comment[pt_BR]=Ocorreu um erro na conexão Comment[ro]=A intervenit o eroare la conectare Comment[ru]=Произошла ошибка соединения Comment[si]=සබඳතාවේ දෝශයක් හට ගැණිනි Comment[sk]=Nastala chyba pripojenia Comment[sl]=Prišlo je do napake povezave Comment[sr]=Дошло је до грешке на вези Comment[sr@ijekavian]=Дошло је до грешке на вези Comment[sr@ijekavianlatin]=Došlo je do greške na vezi Comment[sr@latin]=Došlo je do greške na vezi Comment[sv]=En fel vid anslutning har inträffat Comment[th]=เกิดข้อผิดพลาดขึ้นกับการเชื่อมต่อ Comment[tr]=Bağlantıda hata meydana geldi Comment[ug]=باغلىنىۋاتقاندا خاتالىق كۆرۈلدى Comment[uk]=Трапилась помилка під час з’єднання Comment[uz]=Aloqa oʻrnatishda xato roʻy berdi Comment[uz@cyrillic]=Алоқа ўрнатишда хато рўй берди Comment[x-test]=xxAn error on connection has occurredxx Comment[zh_CN]=发生了连接错误 Comment[zh_HK]=連線發生錯誤 Comment[zh_TW]=發生連線錯誤 Sound=KDE-Im-Error-On-Connection.ogg Action=Sound|Popup [Event/connection_lost] Name=Connection Lost Name[ar]=الاتصال فقد Name[ast]=Conexón perdida Name[bg]=Връзката е прекъсната Name[bn]=সংযোগ বিচ্ছিন্ন Name[br]=Kollet eo ar gevreadenn Name[bs]=Veza je izgubljena Name[ca]=Connexió perduda Name[ca@valencia]=Connexió perduda Name[cs]=Spojení ztraceno Name[cy]=Collwyd Cysylltiad Name[da]=Forbindelse tabt Name[de]=Verbindung abgebrochen Name[el]=Η σύνδεση χάθηκε Name[en_GB]=Connection Lost Name[eo]=Konekto perdita Name[es]=Conexión perdida Name[et]=Ühendus kadus Name[eu]=Konexioa galdu da Name[fi]=Yhteys hävisi Name[fr]=Connexion perdue Name[ga]=Cailleadh an Ceangal Name[gl]=Perdeuse a conexión Name[he]=חיבור נסגר Name[hi]=कनेक्शन टूटा Name[hne]=कनेक्सन टूटिस Name[hr]=Veza prekinuta Name[hu]=A kapcsolat megszakadt Name[ia]=Connexion perdite Name[is]=Tengingu tapað Name[it]=Connessione persa Name[ja]=接続が失われました Name[kk]=Байланыс үзілісі Name[km]=បាត់បង់​ការ​ត​ភ្ជាប់ Name[ko]=연결 끊김 Name[lt]=Ryšys nutrūko Name[lv]=Savienojums pārtrūcis Name[ml]=ബന്ധം നഷ്ടപ്പെട്ടു Name[nb]=Forbindelse gått ned Name[nds]=Verbinnen afreten Name[nl]=Verbinding verbroken Name[nn]=Mista tilkoplinga Name[pa]=ਕੁਨੈਕਸ਼ਨ ਟੁੱਟਿਆ Name[pl]=Połączenie utracone Name[pt]=Ligação Perdida Name[pt_BR]=Conexão perdida Name[ro]=Conexiune pierdută Name[ru]=Соединение разорвано Name[si]=සබඳතාව නැතිවිය Name[sk]=Pripojenie stratené Name[sl]=Povezava prekinjena Name[sq]=Lidhja u Shkëput Name[sr]=Веза изгубљена Name[sr@ijekavian]=Веза изгубљена Name[sr@ijekavianlatin]=Veza izgubljena Name[sr@latin]=Veza izgubljena Name[sv]=Anslutning förlorad Name[th]=สูญเสียการเชื่อมต่อ Name[tr]=Bağlantı Kesildi Name[ug]=باغلىنىش ئۈزۈلدى Name[uk]=З'єднання розірвано Name[uz]=Ulanish uzildi Name[uz@cyrillic]=Уланиш узилди Name[x-test]=xxConnection Lostxx Name[zh_CN]=连接丢失 Name[zh_HK]=連線已中斷 Name[zh_TW]=連線遺失 Comment=The connection have been lost Comment[ar]=الاتصال فقد Comment[ast]=Perdióse la conexón Comment[bg]=Връзката е прекъсната Comment[bs]=Veza je izgubljena Comment[ca]=S'ha perdut la connexió Comment[ca@valencia]=S'ha perdut la connexió Comment[cs]=Spojení bylo ztraceno Comment[da]=Forbindelsen er blevet mistet Comment[de]=Die Verbindung ist abgebrochen Comment[el]=Η σύνδεση χάθηκε Comment[en_GB]=The connection have been lost Comment[eo]=La konekto perdiĝis Comment[es]=Se ha perdido la conexión Comment[et]=Ühendus kadus Comment[eu]=Konexioa galdu egin da Comment[fi]=Yhteys menetettiin Comment[fr]=La connexion a été perdue Comment[ga]=Cailleadh an ceangal Comment[gl]=Perdeuse a conexión Comment[hi]=कनेक्शन टूट गया Comment[hne]=कनेक्सन टूट गिस Comment[hr]=Veza je prekinuta Comment[hu]=A kapcsolat megszakadt Comment[ia]=Le connexion ha essite perdite Comment[it]=La connessione è stata persa Comment[ja]=接続が失われました Comment[kk]=Байланыс үзіліп кетті Comment[km]=បាន​បាត់បង់​ការ​តភ្ជាប់ Comment[ko]=연결이 끊김 Comment[lt]=Ryšys nutrūko Comment[lv]=Savienojums ir pārtrūcis Comment[ml]=ബന്ധം നഷ്ടമായിട്ടുണ്ട് Comment[nb]=Forbindelsen er gått ned Comment[nds]=De Verbinnen is afreten Comment[nl]=De verbinding is verbroken Comment[nn]=Tilkoplinga vart mista Comment[pa]=ਕੁਨੈਕਸ਼ਨ ਖਤਮ ਹੋ ਗਿਆ ਹੈ Comment[pl]=Połączenie zostało przerwane Comment[pt]=A ligação perdeu-se Comment[pt_BR]=A conexão foi perdida Comment[ro]=Conexiunea a fost pierdută Comment[ru]=Соединение было разорвано Comment[si]=සබඳතාව නැති විය Comment[sk]=Pripojenie sa stratilo Comment[sl]=Povezava je bila prekinjena Comment[sr]=Веза је изгубљена Comment[sr@ijekavian]=Веза је изгубљена Comment[sr@ijekavianlatin]=Veza je izgubljena Comment[sr@latin]=Veza je izgubljena Comment[sv]=Anslutningen har förlorats Comment[th]=สูญเสียการเชื่อมต่อ Comment[tr]=Bağlantı kesildi Comment[ug]=باغلىنىش ئۈزۈلىدۇ Comment[uk]=З’єднання було втрачено Comment[x-test]=xxThe connection have been lostxx Comment[zh_CN]=连接已丢失 Comment[zh_TW]=連線已遺失 Action=Popup [Event/cannot_connect] Name=Cannot Connect Name[ar]=لا يستطيع الإتصال Name[ast]=Nun puede coneutase Name[bg]=Грешка при свързване Name[bn]=সংযোগ করা গেল না Name[br]=N'hellan ket kevreañ Name[bs]=Nemogućnost povezivanja Name[ca]=No es pot connectar Name[ca@valencia]=No es pot connectar Name[cs]=Nelze se připojit Name[da]=Kan ikke forbinde Name[de]=Verbindung nicht möglich Name[el]=Αδύνατη η σύνδεση Name[en_GB]=Cannot Connect Name[eo]=Ne eblas konekti Name[es]=No se puede conectar Name[et]=Ühendumine nurjus Name[eu]=Ezin da konektatu Name[fi]=Ei voitu yhdistää Name[fr]=Impossible de se connecter Name[ga]=Ní Féidir Ceangal Name[gl]=Non se pode conectar Name[he]=אין אפשרות להתחבר Name[hi]=कनेक्ट नहीं हो सकता Name[hne]=कनेक्ट नइ हो सके Name[hr]=Bezuspješno spajanje Name[hu]=Nem sikerült csatlakozni Name[ia]=Il non pote connecter Name[is]=Get ekki tengst Name[it]=Impossibile connettersi Name[ja]=接続できません Name[kk]=Қосылым болмады Name[km]=មិន​អាច​តភ្ជាប់ Name[ko]=연결할 수 없음 Name[lt]=Nepavyko prisijungti Name[lv]=Neizdodas pieslēgties Name[ml]=ബന്ധിപ്പിക്കാന്‍ കഴിയുന്നില്ല Name[nb]=Kan ikke koble til Name[nds]=Tokoppeln nich mööglich Name[nl]=Verbinden niet mogelijk Name[nn]=Klarar ikkje kopla til Name[pa]=ਕੁਨੈਕਟ ਨਹੀਂ ਹੋ ਸਕਦਾ Name[pl]=Nie można się połączyć Name[pt]=Não é Possível Ligar-se Name[pt_BR]=Não foi possível conectar Name[ro]=Nu mă pot conecta Name[ru]=Не удаётся подключиться Name[si]=සබඳ විය නොහැක Name[sk]=Nedá sa pripojiť Name[sl]=Ni se mogoče povezati Name[sr]=Не могу да се повежем Name[sr@ijekavian]=Не могу да се повежем Name[sr@ijekavianlatin]=Ne mogu da se povežem Name[sr@latin]=Ne mogu da se povežem Name[sv]=Kan inte ansluta Name[th]=ไม่สามารถเชื่อมต่อได้ Name[tr]=Bağlanılamıyor Name[ug]=باغلىنالمايدۇ Name[uk]=Неможливо з’єднатись Name[uz]=Ulanib boʻlmadi Name[uz@cyrillic]=Уланиб бўлмади Name[x-test]=xxCannot Connectxx Name[zh_CN]=无法连接 Name[zh_HK]=無法連接 Name[zh_TW]=無法連線 Comment=Kopete cannot connect to the service Comment[ast]=Kopete nun puede coneutar al serviciu Comment[bg]=Kopete не може да се свърже с услугата Comment[bs]=Kopete se ne može povezati sa servisom Comment[ca]=El Kopete no pot connectar al servei Comment[ca@valencia]=El Kopete no pot connectar al servei Comment[cs]=Kopete se nedokáže připojit ke službě Comment[da]=Kopete kan ikke forbinde til tjenesten Comment[de]=Kopete kann zu diesem Dienst keine Verbindung herstellen Comment[el]=Το Kopete δεν μπορεί να συνδεθεί στην υπηρεσία Comment[en_GB]=Kopete cannot connect to the service Comment[es]=Kopete no puede conectar al servicio Comment[et]=Kopetel nurjus ühendumine teenusega Comment[eu]=Kopete-k ezin du zerbitzuarekin konektatu Comment[fi]=Kopete ei voi yhdistää palveluun Comment[fr]=Kopete ne peut pas se connecter à ce service Comment[ga]=Ní féidir le Kopete ceangal a dhéanamh leis an tseirbhís Comment[gl]=Kopete non pode conectar co servizo Comment[hr]=Kopete se ne može spojiti na servis Comment[hu]=A Kopete nem tudott kapcsolódni a szolgáltatáshoz Comment[ia]=Kopete non pote connecter al servicio Comment[it]=Kopete non riesce a connettersi al servizio Comment[ja]=Kopete はサービスに接続できません Comment[kk]=Kopete қызметіне қосыла алмады Comment[km]=Kopete មិនអាច​តភ្ជាប់​ទៅ​កាន់​សេវា​បានទេ Comment[ko]=Kopete에서 서비스에 연결할 수 없음 Comment[lt]=Kopete nepavyko prisijungti prie tarnybos Comment[lv]=Kopete neizdodas pieslēgties pakalpojumam Comment[nb]=Kopete kan ikke koble til tjenesten Comment[nds]=Kopete kann sik nich na den Deenst tokoppeln. Comment[nl]=Kopete kan geen verbinding met de service maken Comment[nn]=Kopete klarar ikkje kopla til tenesta Comment[pa]=ਕੋਪੀਟੀ ਸਰਵਿਸ ਨਾਲ ਕੁਨੈਕਟ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ Comment[pl]=Kopete nie może połączyć się z usługą Comment[pt]=O Kopete não se consegue ligar ao serviço Comment[pt_BR]=O Kopete não pode conectar-se ao serviço Comment[ro]=Kopete nu se poate conecta la serviciu Comment[ru]=Kopete не может подключиться к службе Comment[si]=Kopete හට සේවාවට සබඳ විය නොහැක Comment[sk]=Kopete sa nemôže pripojiť na službu Comment[sl]=Kopete se ne more povezati s storitvijo Comment[sr]=Копете не може да се повеже са сервисом Comment[sr@ijekavian]=Копете не може да се повеже са сервисом Comment[sr@ijekavianlatin]=Kopete ne može da se poveže sa servisom Comment[sr@latin]=Kopete ne može da se poveže sa servisom Comment[sv]=Kopete kan inte ansluta till tjänsten Comment[th]=Kopete ไม่สามารถเชื่อมต่อไปยังบริการได้ Comment[tr]=Kopete hizmete bağlanamıyor Comment[ug]=Kopete مۇلازىمەتكە باغلىنالمايدۇ Comment[uk]=Kopete не може з’єднатись зі службою Comment[x-test]=xxKopete cannot connect to the servicexx Comment[zh_CN]=Kopete 无法连接到服务 Comment[zh_TW]=Kopete 無法與服務連線 Action=Popup [Event/network_problems] Name=Network Problems Name[ar]=مشاكل بالشبكة Name[ast]=Problemes de rede Name[bg]=Мрежови проблеми Name[bn]=নেটওয়ার্ক সমস্যা Name[br]=Kudennoù rouedad Name[bs]=Problemi mreže Name[ca]=Problemes de xarxa Name[ca@valencia]=Problemes de xarxa Name[cs]=Problémy se sítí Name[da]=Netværksproblemer Name[de]=Netzwerkprobleme Name[el]=Προβλήματα δικτύου Name[en_GB]=Network Problems Name[eo]=Retproblemoj Name[es]=Problemas de red Name[et]=Võrguprobleemid Name[eu]=Sareko arazoak Name[fi]=Verkko-ongelmat Name[fr]=Problèmes réseaux Name[ga]=Fadhbanna Líonra Name[gl]=Problemas na rede Name[he]=בעיות רשת Name[hi]=नेटवर्क समस्याएँ Name[hne]=नेटवर्क समस्या Name[hr]=Problemi u mreži Name[hu]=Hálózati hiba történt Name[ia]=Problemas de rete Name[is]=Netvandamál Name[it]=Problemi di rete Name[ja]=ネットワークの問題 Name[kk]=Желі мәселелері Name[km]=បញ្ហា​បណ្ដាញ Name[ko]=네트워크 문제 Name[lt]=Tinklo sutrikimai Name[lv]=Tīkla problēmas Name[ml]=ശൃംഖലാ തകരാറ് Name[nb]=Nettverksproblemer Name[nds]=Nettwarkproblemen Name[nl]=Netwerkproblemen Name[nn]=Nettverksproblem Name[pa]=ਨੈੱਟਵਰਕ ਸਮੱਸਿਆ Name[pl]=Problemy sieci Name[pt]=Problemas de Rede Name[pt_BR]=Problemas na rede Name[ro]=Probleme rețea Name[ru]=Сбой сети Name[si]=ජාල ගැටළු Name[sk]=Problémy so sieťou Name[sl]=Omrežne težave Name[sq]=Probleme të Rrjetit Name[sr]=Проблеми мреже Name[sr@ijekavian]=Проблеми мреже Name[sr@ijekavianlatin]=Problemi mreže Name[sr@latin]=Problemi mreže Name[sv]=Nätverksproblem Name[th]=ปัญหาของเครือข่าย Name[tr]=Ağ Problemleri Name[ug]=تور كاشىلىسى Name[uk]=Мережна проблема Name[uz]=Tarmoq muammolari Name[uz@cyrillic]=Тармоқ муаммолари Name[x-test]=xxNetwork Problemsxx Name[zh_CN]=网络故障 Name[zh_HK]=網絡問題 Name[zh_TW]=網路問題 Comment=The network is experiencing problems Comment[ar]=الشبكة تواجه مشاكل Comment[ast]=Hai problemes de rede Comment[bg]=Има проблеми с мрежата Comment[bn]=নেটওয়ার্ক সমস্যা অনুভব করছে Comment[bs]=Mreža se suočava sa problemima Comment[ca]=La xarxa està tenint problemes Comment[ca@valencia]=La xarxa està tenint problemes Comment[cs]=Síť má problémy Comment[da]=Netværket har for øjeblikket problemer Comment[de]=Das Netzwerk scheint derzeit gestört zu sein Comment[el]=Παρουσιάστηκαν προβλήματα με το δίκτυο Comment[en_GB]=The network is experiencing problems Comment[eo]=La reto estas problemanta Comment[es]=Se están experimentando problemas de red Comment[et]=Võrguga on mingeid probleeme Comment[eu]=Sareak arazoak ditu Comment[fi]=Verkossa on ongelmia Comment[fr]=Le réseau rencontre des problèmes Comment[ga]=Tá fadhbanna leis an líonra Comment[gl]=A rede está a ter problemas Comment[he]=הרשת חווה בעיות Comment[hi]=नेटवर्क में समस्याएँ आ रही हैं Comment[hne]=नेटवर्क मं समस्या आ रही हे Comment[hr]=Postoje problemi u mreži Comment[hu]=Hiba lépett fel a hálózaton Comment[ia]=Le rete es manifestante problemas Comment[is]=Það er vandamál með netið Comment[it]=Ci sono dei problemi di rete Comment[ja]=ネットワークに問題が発生しています Comment[kk]=Желіде мәселелер орын алды Comment[km]=បណ្ដាញ​កំពុង​ជួប​ប្រទះ​បញ្ហា Comment[ko]=네트워크에 문제 발생 Comment[lt]=Tinkle yra problemų Comment[lv]=Ir problēmas ar tīklu Comment[ml]=ശൃംഖലയില്‍ പ്രയാസം അനുഭവപ്പെടുന്നുണ്ട് Comment[nb]=Det er problemer på nettverket Comment[nds]=As dat lett gifft dat Nettwarkproblemen Comment[nl]=Het netwerk ondervindt problemen Comment[nn]=Det er problem med nettverket Comment[pa]=ਨੈੱਟਵਰਕ ਨੂੰ ਸਮੱਸਿਆ ਆ ਰਹੀ ਹੈ Comment[pl]=W sieci występują problemy Comment[pt]=A rede está com problemas Comment[pt_BR]=A rede está com problemas Comment[ro]=Rețeaua întîmpină probleme Comment[ru]=В сети возникли неполадки Comment[si]=ජාලය ගැටළු වලට මුහුණ දෙයි Comment[sk]=Sieť má problémy Comment[sl]=V omrežju se pojavljajo težave Comment[sr]=Мрежа има проблема Comment[sr@ijekavian]=Мрежа има проблема Comment[sr@ijekavianlatin]=Mreža ima problema Comment[sr@latin]=Mreža ima problema Comment[sv]=Nätverket har för närvarande problem Comment[th]=เกิดปัญหาทางด้านระบบเครือข่ายขึ้น Comment[tr]=Ağda sorunlar var Comment[ug]=توردا كاشىلا كۆرۈلدى Comment[uk]=Мережа має проблеми Comment[x-test]=xxThe network is experiencing problemsxx Comment[zh_CN]=网络遇到问题 Comment[zh_HK]=網絡發生問題 Comment[zh_TW]=網路遇到問題 Action=Popup [Event/server_error] Name=Server Internal Error Name[ar]=خطأ بالخادم داخلي Name[ast]=Fallu internu del sirvidor Name[bg]=Вътрешна грешка на сървъра Name[bn]=সার্ভার অভ্যন্তরীন ত্রুটি Name[bs]=Interna greška servera Name[ca]=Error intern del servidor Name[ca@valencia]=Error intern del servidor Name[cs]=Interní chyba serveru Name[da]=Intern fejl i serveren Name[de]=Interner Serverfehler Name[el]=Εσωτερικό σφάλμα εξυπηρετητή Name[en_GB]=Server Internal Error Name[eo]=Servila interna eraro Name[es]=Error interno del servidor Name[et]=Serveri sisemine viga Name[eu]=Zerbitzariaren barne-errorea Name[fi]=Palvelimen sisäinen virhe Name[fr]=Erreur interne du serveur Name[ga]=Earráid Inmheánach Freastalaí Name[gl]=Erro interno do servidor Name[hi]=आंतरिक सर्वर त्रुटि Name[hne]=अंदर के सर्वर गलती Name[hr]=Interna greška servera Name[hu]=Belső kiszolgálóhiba Name[ia]=Error interne de servitor Name[is]=Innri villa í þjóni Name[it]=Errore interno del server Name[ja]=サーバの内部エラー Name[kk]=Сервердің ішкі қатесі Name[km]=កំហុស​ខាង​ក្នុង​ម៉ាស៊ីន​បម្រើ Name[ko]=서버 내부 오류 Name[lt]=Vidinė serverio klaida Name[lv]=Iekšēja kļūda serverī Name[ml]=സേവകന്റെ ആന്തരപിശക് Name[nb]=Intern tjenerfeil Name[nds]=Serverintern Fehler Name[nl]=Interne serverfout Name[nn]=Internfeil på tenaren Name[pa]=ਸਰਵਰ ਅੰਦਰੂਨੀ ਗਲਤੀ Name[pl]=Wewnętrzny błąd serwera Name[pt]=Erro Interno do Servidor Name[pt_BR]=Erro interno do servidor Name[ro]=Eroare internă server Name[ru]=Внутренняя ошибка сервера Name[si]=සේවාදායක අභ්‍යන්තර දෝශයක් Name[sk]=Interná chyba servera Name[sl]=Notranja napaka strežnika Name[sq]=Gabim i Brendshëm i Serverit Name[sr]=Интерна грешка сервера Name[sr@ijekavian]=Интерна грешка сервера Name[sr@ijekavianlatin]=Interna greška servera Name[sr@latin]=Interna greška servera Name[sv]=Internt fel i servern Name[th]=เกิดข้อผิดพลาดภายในเครื่องแม่ข่ายให้บริการ Name[tr]=Sunucu İç Hatası Name[ug]=مۇلازىمېتىر ئىچكى خاتالىقى Name[uk]=Внутрішня помилка сервера Name[x-test]=xxServer Internal Errorxx Name[zh_CN]=服务器内部错误 Name[zh_HK]=伺服器內部錯誤 Name[zh_TW]=伺服器內部錯誤 Comment=An internal service error has occurred Comment[ast]=Hebo un fallu internu del serviciu Comment[bg]=Възникна вътрешна грешка на сървъра Comment[bs]=Interna greška servisa se desila Comment[ca]=Hi ha hagut un error intern del servei Comment[ca@valencia]=Hi ha hagut un error intern del servei Comment[cs]=Nastala interní chyba služby Comment[da]=En intern tjenestefejl er opstået Comment[de]=Ein interner Dienstfehler ist aufgetreten Comment[el]=Παρουσιάστηκε εσωτερικό σφάλμα σε μία υπηρεσία Comment[en_GB]=An internal service error has occurred Comment[es]=Ha tenido lugar un error interno del servicio Comment[et]=Tekkis teenuse sisemine viga Comment[eu]=Zerbitzuaren barneko errore bat gertatu da Comment[fi]=Tapahtui palvelun sisäinen virhe Comment[fr]=Une erreur interne au service s'est produite Comment[ga]=Tharla earráid inmheánach seirbhíse Comment[gl]=Aconteceu un erro interno do servizo Comment[hr]=Dogodila se interna greška servisa Comment[hu]=Belső szolgáltatáshiba történt Comment[ia]=Un error de servicio interne ha occurrite Comment[it]=Si è verificato un errore interno del servizio Comment[ja]=内部サービスエラーが発生しました Comment[kk]=Қызметтің бір ішкі қатесі пайда болды Comment[km]=កំហុស​សេវា​ខាង​ក្នុង​បានកើត​ឡើង Comment[ko]=서비스 내부 오류 발생 Comment[lt]=Įvyko vidinė tarnybos klaida Comment[lv]=Serverī ir notikusi iekšēja kļūda Comment[nb]=Det har oppstått en intern feil på tjenesten Comment[nds]=Dat hett binnen den Deenst en Fehler geven. Comment[nl]=Er deed zich een interne fout voor op de server Comment[nn]=Det oppstod ein internfeil på tenaren Comment[pa]=ਇੱਕ ਸਰਵਿਸ ਅੰਦਰੂਨੀ ਗਲਤੀ ਆਈ ਹੈ Comment[pl]=Wystąpił wewnętrzny błąd usługi Comment[pt]=Ocorreu um erro interno do serviço Comment[pt_BR]=Ocorreu um erro interno de serviço Comment[ro]=A intervenit o eroare internă a serviciului Comment[ru]=Произошла внутренняя ошибка службы Comment[si]=අභ්‍යන්තර සේවා දෝශයක් හට ගැණිනි Comment[sk]=Nastala interná chyba služby Comment[sl]=Prišlo je do notranje napake storitve Comment[sr]=Дошло је до интерне грешке сервиса Comment[sr@ijekavian]=Дошло је до интерне грешке сервиса Comment[sr@ijekavianlatin]=Došlo je do interne greške servisa Comment[sr@latin]=Došlo je do interne greške servisa Comment[sv]=Ett internt fel har inträffat i tjänsten Comment[th]=เกิดข้อผิดพลาดภายในเครื่องแม่ข่ายให้บริการ Comment[tr]=İç hizmet hatası oluştu Comment[ug]=بىر ئىچكى مۇلازىمەت خاتالىقى كۆرۈلدى Comment[uk]=Трапилась внутрішня помилка служби Comment[x-test]=xxAn internal service error has occurredxx Comment[zh_CN]=发生了内部服务错误 Comment[zh_TW]=發生伺服器內部錯誤 Sound=KDE-Im-Internal-Error.ogg Action=Sound|Popup [Event/buzz_nudge] Name=Buzz/Nudge Name[ar]=بزبز/وكزة Name[ast]=Buzz/Nudge Name[bg]=Побутване Name[bn]=গুঞ্জন/গুঁতো Name[bs]=Zvrc/Gurkanje Name[ca]=Truca/Avisa Name[ca@valencia]=Truca/Avisa Name[cs]=Šťouchanec Name[da]=Opringning/Puf Name[de]=Anstoß/Brummen Name[el]=Βομβητής/Ειδοποίηση Name[en_GB]=Buzz/Nudge Name[eo]=Pepo Name[es]=Toque Name[et]=Mõmin/müks Name[eu]=Burrumbada Name[fi]=Buzz/Nudge Name[fr]=Vibration Name[ga]=Scairt/Sonc Name[gl]=Chamada/aviso Name[hi]=बज़/नज़ Name[hne]=बज/नज Name[hr]=Zvrndanje/Gurkanje Name[hu]=Figyelemfelhívó Name[ia]=Susurro/Colpo de attention Name[is]=Ýta við Name[it]=Buzz/trillo Name[ja]=ブザー/注意喚起 Name[kk]=Оян қазақ! Name[km]=សន្ទនា​រក ឬ​កេះកៀវ Name[ko]=대화 창 흔들기 Name[lt]=Skambtelėjimas/Kumštelėjimas Name[lv]=Zvans/Bakstījiens Name[ml]=മൂളല്‍/മുട്ടല്‍ Name[nb]=Ring/dytt Name[nds]=Anstoot Name[nl]=Buzzer Name[nn]=Rist Name[pa]=ਬੱਜ਼/ਧੱਫਾ Name[pl]=Pobudka/kuksaniec Name[pt]=Apito/Abanão Name[pt_BR]=Solicitar atenção (Buzinar/Tremer) Name[ro]=Bîzîit/ghiont Name[ru]=Buzz/Nudge Name[si]=බස්/සන් කිරීම Name[sk]=Štuchanec Name[sl]=Brnenje/dregni Name[sq]=Buzz/Nudge Name[sr]=Зврц/гуркање Name[sr@ijekavian]=Зврц/гуркање Name[sr@ijekavianlatin]=Zvrc/gurkanje Name[sr@latin]=Zvrc/gurkanje Name[sv]=Påringning/knuff Name[tr]=Titret Name[uk]=Не спати! Name[x-test]=xxBuzz/Nudgexx Name[zh_CN]=闪屏振动 Name[zh_HK]=響聲/提示 Name[zh_TW]=呼叫!呼叫!聽到請回答! Comment=A contact has sent you a buzz/nudge. Comment[ar]=مراسَل بعث لك بزبز/وكزة Comment[ast]=Un contautu unvióte un buzz/nudge Comment[bg]=Контакт ви изпрати побутване. Comment[bn]=যোগাযোগ তালিকাভুক্ত একজন আপনাকে একটি গুঞ্জন/গুঁতো পাঠিয়েছে। Comment[bs]=Kontakt vam je poslao Zvrc/Gurkanje. Comment[ca]=Un contacte us ha enviat una trucada/avís. Comment[ca@valencia]=Un contacte vos ha enviat una trucada/avís. Comment[cs]=Osoba vám poslala šťouchanec :-) Comment[da]=En kontakt har sendt dig en buzz/nudge. Comment[de]=Ein Benutzer macht auf sich aufmerksam. Comment[el]=Μία επαφή σας έστειλε ένα βομβητή/Ειδοποίηση. Comment[en_GB]=A contact has sent you a buzz/nudge. Comment[eo]=Kontaktulo sendis al vi pepon Comment[es]=Un contacto le ha enviado un toque. Comment[et]=Kontakt müksas sind. Comment[eu]=Kontaktu batek burrumbada bat bidali dizu. Comment[fi]=Sinulle lähetettiin buzz/nudge. Comment[fr]=Un contact vous a envoyé une vibration. Comment[ga]=Thug teagmháil sonc duit. Comment[gl]=Un contacto envioulle unha chamada/aviso. Comment[hi]=एक सम्पर्क ने आपको बज़/नज़ भेजा. Comment[hne]=एक सम्पर्क हर आप मन ल बज/नज भेजिस. Comment[hr]=Kontakt vam je poslao zvrndanje/gurkanje. Comment[hu]=Egy partner figyelemfelhívó üzenetet küldött. Comment[ia]=Un contacto te ha inviate un susurro/colpo de attention. Comment[is]=Notandi hefur ýtt við þér. Comment[it]=Un contatto ti ha inviato un buzz/trillo. Comment[ja]=コンタクトがつついています Comment[kk]=Бір контакт назарыңызды аударып жатыр. Comment[km]=ទំនាក់​ទំនង​មួយ​បាន​កេះកៀវ ឬ សន្ទនា​រក​អ្នក ។ Comment[ko]=대화 상대가 대화 창을 흔듦 Comment[lt]=Kontaktas jums skambtelėjo/kumštelėjo. Comment[lv]=Kontakts jums nosūtīja zvanu/piebakstījienu. Comment[ml]=ഒരു സമ്പര്‍ക്കം മൂളല്‍/മുട്ടല്‍ അയച്ചിട്ടുണ്ട് Comment[nb]=En kontakt har sendt deg en dytt/ringesignal Comment[nds]=En Bruker will wat vun Di. Comment[nl]=Een contactpersoon heeft u een buzzer gestuurd. Comment[nn]=Ein kontakt har rista deg. Comment[pa]=ਇੱਕ ਸੰਪਰਕ ਨੇ ਤੁਹਾਨੂੰ ਬੱਜ਼/ਧੱਫਾ ਭੇਜਿਆ ਹੈ। Comment[pl]=Użytkownik wysłał ci pobudkę/kuksańca. Comment[pt]=Um contacto enviou-lhe um apito/abanão. Comment[pt_BR]=Um contato lhe enviou um pedido de atenção. Comment[ro]=Un contact v-a trimis un bîzîit/ghiont. Comment[ru]=Вам отправили buzz/nudge. Comment[si]=සබඳතාව ඔබට බස්/සන් කර ඇත Comment[sk]=Kontakt vám poslal štuchanec. Comment[sl]=Uporabnik vam je poslal brnenje/vas je dregnil. Comment[sr]=Контакт вам је послао зврц/гуркање. Comment[sr@ijekavian]=Контакт вам је послао зврц/гуркање. Comment[sr@ijekavianlatin]=Kontakt vam je poslao zvrc/gurkanje. Comment[sr@latin]=Kontakt vam je poslao zvrc/gurkanje. Comment[sv]=En kontakt har ringt eller knuffat dig. Comment[tr]=Bir kişi size titreşim gönderdi Comment[uk]=Контакт хоче привернути вашу увагу Comment[x-test]=xxA contact has sent you a buzz/nudge.xx Comment[zh_CN]=联系人向您发送了闪屏振动。 Comment[zh_HK]=有聯絡人傳了響聲或提示給您。 Comment[zh_TW]=聯絡人送出來電震動或呼叫 Sound=KDE-Im-Nudge.ogg Action=Popup|Sound|Taskbar [Event/message_dropped] Name=Message Dropped Name[ar]=رسالة ساقطة Name[ast]=Mensax desaniciáu Name[bg]=Отказано съобщение Name[bs]=Poruka je ispuštena Name[ca]=Missatge descartat Name[ca@valencia]=Missatge descartat Name[cs]=Zpráva zahozena Name[da]=Besked afvist Name[de]=Nachricht verworfen Name[el]=Μήνυμα απορρίφθηκε Name[en_GB]=Message Dropped Name[eo]=Mesaĝo forĵetita Name[es]=Mensaje eliminado Name[et]=Sõnum visati minema Name[eu]=Mezua jareginda Name[fi]=Viesti jätetty huomiotta Name[fr]=Message supprimé Name[ga]=Ligeadh Teachtaireacht Titim Name[gl]=Mensaxe retirada Name[hi]=संदेश छोड़ा Name[hne]=संदेस छोड़ा Name[hr]=Poruka ispuštena Name[hu]=Egy üzenet el lett dobva Name[ia]=Message deponite Name[it]=Messaggio scartato Name[ja]=メッセージを除去 Name[kk]=Хабарлама лақтырып тасталды Name[km]=បាន​លុប​សារ Name[ko]=메시지 걸러짐 Name[lt]=Žinutė atmesta Name[lv]=Ziņojums izmests Name[ml]=സന്ദേശം ഇട്ടു Name[nb]=Melding filtrert ut Name[nds]=Naricht utschutert Name[nl]=Bericht geweigerd Name[nn]=Fjerna melding Name[pa]=ਸੁਨੇਹਾ ਛੱਡਿਆ Name[pl]=Wiadomość odrzucona Name[pt]=Mensagem Perdida Name[pt_BR]=Mensagem descartada Name[ro]=Mesaj aruncat Name[ru]=Сообщение отфильтровано Name[si]=පණිවුඩය හැරදැමිනි Name[sk]=Správa zahodená Name[sl]=Sporočilo spuščeno Name[sr]=Порука испуштена Name[sr@ijekavian]=Порука испуштена Name[sr@ijekavianlatin]=Poruka ispuštena Name[sr@latin]=Poruka ispuštena Name[sv]=Meddelande kastat Name[th]=ข้อความถูกทิ้ง Name[tr]=İleti Alındı Name[uk]=Повідомлення відкинуто Name[x-test]=xxMessage Droppedxx Name[zh_CN]=消息被丢弃 Name[zh_TW]=訊息已丟棄 Comment=A message was filtered by the Privacy Plugin Comment[ar]=رسالة رشّحت بواسطة ملحق الخصوصية Comment[ast]=El complementu de privacidá filtró un mensax Comment[bg]=Съобщение е филтрирано от приставката за поверителност Comment[bs]=Poruka je filtrirana pomoću priključka za privatnost Comment[ca]=El connector de privadesa ha filtrat un missatge Comment[ca@valencia]=El connector de privadesa ha filtrat un missatge Comment[cs]=Zpráva byla vyřazena modulem pro soukromí Comment[da]=En besked blev filtreret af privatlivspluginet Comment[de]=Das Privatsphäre-Modul hat eine Nachricht gefiltert Comment[el]=Ένα μήνυμα φιλτραρίστηκε από το πρόσθετο Προσωπικού απορρήτου Comment[en_GB]=A message was filtered by the Privacy Plugin Comment[eo]=Mesaĝo filtritis de la privateca kromaĵo Comment[es]=El complemento de privacidad ha filtrado un mensaje Comment[et]=Privaatsusplugin filtreeris sõnumi välja Comment[eu]=Pribatutasunaren pluginak mezu bat iragazi du Comment[fi]=Tietosuojaliitännäinen suodatti viestin Comment[fr]=Un message a été filtré par le module de vie privée Comment[ga]=Bhí teachtaireacht scagtha ag an mBreiseán Príobháideachta Comment[gl]=O complemento de intimidade filtrou unha mensaxe. Comment[hi]=प्राइवेसी प्लगइन द्वारा एक संदेश फिल्टर किया गया Comment[hne]=प्राइवेसी प्लगइन से एक संदेस छनइया करिस Comment[hr]=Priključak za privatnost je filtrirao poruku Comment[hu]=Az üzenetet az Adatvédelmi modul kiszűrte Comment[ia]=Un messag esseva filtrate per le plug-in de confidentialitate Comment[it]=Un messaggio è stato filtrato dall'estensione di riservatezza Comment[ja]=プライバシープラグインのフィルタによってメッセージを除去しました Comment[kk]=Бір хабарлама Дербестік плагиннің сүзгісінен өтпеді Comment[km]=បាន​ត្រង​សារ​ដោយ​កម្មវិធី​ជំនួយ​ភាព​ឯកជន Comment[ko]=메시지가 사생활 플러그인에 의해 걸러짐 Comment[lt]=Privatumo įskiepio filtras atmetė žinutę Comment[lv]=Ziņojums tika nofiltrēts privātuma spraudnī Comment[ml]=ഒരു സന്ദേശം സ്വകാര്യ‌താ സംയോജകത്തിലൂടെ അരിച്ചിട്ടുണ്ട് Comment[nb]=Programtillegget for personvern filtrerte bort en melding Comment[nds]=En Naricht wöör vun dat Privaatrebeetmoduul utschutert Comment[nl]=Er is een bericht gefilterd door de privacyplugin Comment[nn]=Ei melding vart filtrert vekk av personvernstillegget Comment[pa]=ਪਰਾਈਵੇਸੀ ਪਲੱਗਇਨ ਨਾਲ ਇੱਕ ਸੁਨੇਹਾ ਫਿਲਟਰ ਕੀਤਾ ਗਿਆ Comment[pl]=Wiadomość została odrzucona przez wtyczkę do ochrony prywatności Comment[pt]=Foi filtrada uma mensagem pelo 'Plugin' de Privacidade Comment[pt_BR]=Uma mensagem foi filtrada pelo plugin de privacidade Comment[ro]=Un mesaj a fost filtrat de către modulul de intimitate Comment[ru]=Сообщение было отфильтровано модулем Comment[si]=පණිවුඩය පුද්ගලිකත්ව ප්ලගිනයෙන් පෙරා හැරිනි Comment[sk]=Správa bola filtrovaná modulom pre súkromie Comment[sl]=Sporočilo je bilo filtrirano s strani vstavka za zasebnost Comment[sr]=Порука је филтрирана помоћу прикључка за приватност Comment[sr@ijekavian]=Порука је филтрирана помоћу прикључка за приватност Comment[sr@ijekavianlatin]=Poruka je filtrirana pomoću priključka za privatnost Comment[sr@latin]=Poruka je filtrirana pomoću priključka za privatnost Comment[sv]=Ett meddelande filtrerades av integritetsinsticksprogrammet Comment[th]=ข้อความถูกกรองด้วยส่วนเสริมความเป็นส่วนตัว Comment[tr]=Gizlilik Eklentisi tarafından bir ileti süzüldü Comment[uk]=Повідомлення не пройшло крізь фільтр додатка конфіденційності Comment[x-test]=xxA message was filtered by the Privacy Pluginxx Comment[zh_CN]=消息已被隐私插件所过滤 Comment[zh_TW]=有訊息被私密外掛程式過濾掉了 Action=Popup [Event/icq_user_reads_status_message] Name=ICQ Reading status Name[ar]=ICQ جاري القراءة الحالة Name[ast]=ICQ lleendo l'estáu Name[bg]=Прочитане в ICQ Name[bs]=ICQ čitanje stanja Name[ca]=Lectura de l'estat de l'ICQ Name[ca@valencia]=Lectura de l'estat de l'ICQ Name[cs]=Stav čtení ICQ Name[da]=ICQ læser status Name[de]=ICQ-Status wird gelesen Name[el]=Κατάσταση ανάγνωσης ICQ Name[en_GB]=ICQ Reading status Name[eo]=ICQ lega stato Name[es]=ICQ leyendo el estado Name[et]=ICQ lugemise oleks Name[eu]=ICQ irakurketaren egoera Name[fi]=ICQ-tila Name[fr]=Lecture d'état ICQ Name[ga]=Stádas Léimh ICQ Name[gl]=Estado de lectura de ICQ Name[hi]=आईसीक्यू पढ़ने की स्थिति Name[hne]=आईसीक्यू पढ़े के स्थिति Name[hr]=ICQ odčitava status Name[hu]=ICQ olvasási állapot Name[ia]=Stato de lectura de ICQ Name[it]=ICQ sta leggendo lo stato Name[ja]=ICQ の状態を読んでいます Name[kk]=ICQ күй-жайын оқу Name[km]=ស្ថានភាព​អាន​របស់ ICQ Name[ko]=ICQ 읽기 상태 Name[lt]=ICQ skaitymo būsena Name[lv]=ICQ lasīšanas statuss Name[ml]=ഐസിക്യു വായനാ സ്ഥിതി Name[nb]=ICQ leser status Name[nds]=ICQ-Status leest Name[nl]=ICQ-leesstatus Name[nn]=ICQ-statuslesing Name[pa]=ICQ ਪੜ੍ਹਨ ਹਾਲਤ Name[pl]=Odczyt stanu ICQ Name[pt]=Estado da leitura do ICQ Name[pt_BR]=Status de leitura do ICQ Name[ro]=ICQ Citire stare Name[ru]=ICQ: чтение состояния Name[si]=ICQ කියවීම් තත්වය Name[sk]=Stav čítania ICQ Name[sl]=ICQ bere stanje Name[sr]=ајсикју читање стања Name[sr@ijekavian]=ајсикју читање стања Name[sr@ijekavianlatin]=ICQ čitanje stanja Name[sr@latin]=ICQ čitanje stanja Name[sv]=ICQ läser status Name[th]=การอ่านสถานะของ ICQ Name[tr]=ICQ Okuma durumu Name[uk]=ICQ-читання стану Name[x-test]=xxICQ Reading statusxx Name[zh_CN]=ICQ 读取状态 Name[zh_TW]=ICQ 讀取狀態 Comment=An ICQ user is reading your status message Comment[ar]=ICQ مستخدم يقرأ رسالة الحالة لديك Comment[ast]=Un usuariu d'ICQ ta lleendo el to mensax d'estáu Comment[bg]=Потребител на ICQ чете съобщението ви за състояние Comment[bs]=ICQ korisnik čita poruku vašeg statusa Comment[ca]=Un usuari de l'ICQ està llegint el vostre missatge d'estat Comment[ca@valencia]=Un usuari de l'ICQ està llegint el vostre missatge d'estat Comment[cs]=Uživatel ICQ si čte vaši zprávu o stavu Comment[da]=En ICQ-bruger læser din statusbesked Comment[de]=Ein ICQ-Benutzer liest gerade Ihre Statusmeldung Comment[el]=Ένας χρήστης ICQ διαβάζει το μήνυμα κατάστασής σας Comment[en_GB]=An ICQ user is reading your status message Comment[eo]=ICQ uzanto legas vian statmesaĝon Comment[es]=Un usuario de ICQ está leyendo su mensaje de estado Comment[et]=ICQ kasutaja loeb sinu olekuteadet Comment[eu]=ICQ erabiltzaile bat zure egoeraren mezua irakurtzen ari da Comment[fi]=ICQ-käyttäjä lukee tilaviestiäsi Comment[fr]=Un utilisateur ICQ lit actuellement votre message d'état Comment[ga]=Tá do theachtaireacht stádais á léamh ag úsáideoir ICQ Comment[gl]=Un usuario de ICQ está a ler a súa mensaxe de estado Comment[hi]=एक आईसीक्यू उपयोक्ता आपकी स्थिति संदेश को पढ़ रहा है Comment[hne]=एक आईसीक्यू कमइया आप मन के स्थिति संदेस ल पढ़ रहा हे Comment[hr]=ICQ-korisnik čita vašu statusnu poruku Comment[hu]=Egy ICQ-felhasználó olvassa az Ön állapotüzenetét Comment[ia]=Un usator de ICQ es legente tu message de stato Comment[it]=Un utente ICQ sta leggendo il tuo messaggio di stato Comment[ja]=ICQ ユーザがあなたの状態メッセージを読んでいます Comment[kk]=ICQ пайдаланушысы күй-жай хабарламаңызды оқыды Comment[km]=អ្នក​ប្រើ ICQ កំពុង​អាន​សារ​ស្ថានភាព​របស់​អ្នក Comment[ko]=ICQ 사용자가 상태 메시지를 읽는 중 Comment[lt]=ICQ naudotojas skaito jūsų būseną Comment[lv]=ICQ lietotājs lasa jūsu statusa ziņojumu Comment[ml]=ഒരു ഐസിക്യു ഉപയോക്താവ് നിങ്ങളുടെ സ്ഥിതി വിവരം വായിക്കുന്നു Comment[nb]=En ICQ-bruker leser din statusmelding Comment[nds]=En ICQ-Bruker leest Dien Statusbescheed Comment[nl]=Een ICQ-gebruiker leest uw statusbericht Comment[nn]=Ein ICQ-brukar les statusmeldinga di Comment[pl]=Użytkownik ICQ odczytuje twoją wiadomość dla dostępności Comment[pt]=Um utilizador de ICQ está a ler a sua mensagem de estado Comment[pt_BR]=Um usuário do ICQ está lendo sua mensagem de status Comment[ro]=Un utilizator ICQ vă citește mesajul de stare Comment[ru]=Пользователь ICQ читает ваше состояние Comment[si]=ICQ පරිශීලකයෙක් ඔබේ තත්ව පණිවුඩය කියවයි Comment[sk]=Užívateľ ICQ si číta vašu správu o stave Comment[sl]=Uporabnik ICQ bere vaše sporočilo stanja Comment[sr]=Корисник ајсикјуа чита вашу поруку стања Comment[sr@ijekavian]=Корисник ајсикјуа чита вашу поруку стања Comment[sr@ijekavianlatin]=Korisnik ICQ‑a čita vašu poruku stanja Comment[sr@latin]=Korisnik ICQ‑a čita vašu poruku stanja Comment[sv]=En ICQ-användare läser ditt statusmeddelande Comment[th]=ผู้ใช้ ICQ กำลังอ่านข้อความสถานะของคุณ Comment[tr]=Bir ICQ kullanıcısı sizin durum iletinizi okuyor Comment[uk]=Користувач ICQ читає ваше повідомлення про стан Comment[x-test]=xxAn ICQ user is reading your status messagexx Comment[zh_CN]=一位 ICQ 用户正在查阅您的状态信息 Comment[zh_TW]=有 ICQ 使用者正讀取您的狀態訊息 Action=None [Event/kopete_info_event] Name=Service Message Name[ar]=خدمة الرسالة Name[ast]=Mensax de serviciu Name[bg]=Съобщение от услугата Name[bs]=Servisna poruka Name[ca]=Missatge de servei Name[ca@valencia]=Missatge de servei Name[cs]=Služební zpráva Name[da]=Tjenestebesked Name[de]=Dienstmitteilung Name[el]=Μήνυμα υπηρεσίας Name[en_GB]=Service Message Name[eo]=Serva Mesaĝo Name[es]=Mensaje de servicio Name[et]=Teenuseteade Name[eu]=Zerbitzuaren mezua Name[fi]=Palveluviesti Name[fr]=Message de service Name[ga]=Teachtaireacht Sheirbhíse Name[gl]=Mensaxe do servizo Name[hne]=सेवा संदेस Name[hr]=Poruka servisa Name[hu]=Szolgáltatásüzenet Name[ia]=Message de servicio Name[it]=Messaggio di servizio Name[ja]=サービスメッセージ Name[kk]=Қызмет хабарламасы Name[km]=សារ​សេវា Name[ko]=서비스 메시지 Name[lt]=Tarnybos pranešimas Name[lv]=Servisa ziņojums Name[ml]=സേവന സന്ദേശം Name[nb]=Tjenestemelding Name[nds]=Deenst-Mellen Name[nl]=Dienstmededeling Name[nn]=Tenestemelding Name[pa]=ਸਰਵਿਸ ਸੁਨੇਹਾ Name[pl]=Wiadomość usługowa Name[pt]=Mensagem do Serviço Name[pt_BR]=Mensagem de serviço Name[ro]=Mesaj serviciu Name[ru]=Служебное сообщение Name[si]=සේවා පණිවුඩය Name[sk]=Servisná správa Name[sl]=Sporočilo storitve Name[sr]=Сервисна порука Name[sr@ijekavian]=Сервисна порука Name[sr@ijekavianlatin]=Servisna poruka Name[sr@latin]=Servisna poruka Name[sv]=Tjänstmeddelande Name[th]=ข้อความของบริการ Name[tr]=Servis Mesajı Name[ug]=مۇلازىمەت ئۇچۇرى Name[uk]=Службове повідомлення Name[x-test]=xxService Messagexx Name[zh_CN]=服务消息 Name[zh_TW]=服務訊息 Comment=A service message has been received (e.g. authorization request) Comment[ast]=Recibióse un mensax de serviciu (Por exemplu: Petición d'autorización) Comment[bg]=Получено е съобщение от услугата (напр. искане за разрешение) Comment[bs]=Servisna poruka je primljena (npr. zahtijev za ovlaštenje) Comment[ca]=S'ha rebut un missatge de servei (p. ex. una petició d'autorització) Comment[ca@valencia]=S'ha rebut un missatge de servei (p. ex. una petició d'autorització) Comment[cs]=Byla přijata služební zpráva (např. požadavek na autorizaci) Comment[da]=En tjenestebesked er blevet modtaget (f.eks. godkendelsesforespørgsel) Comment[de]=Eine Dienstmitteilung wurde empfangen (z. B. Autorisierungsanfrage) Comment[el]=Ελήφθη μήνυμα υπηρεσίας (π.χ. αίτηση εξουσιοδότησης) Comment[en_GB]=A service message has been received (e.g. authorisation request) Comment[es]=Un mensaje de servicio ha sido recibido (Por ejemplo: Petición de autorización) Comment[et]=Saadi teenuseteade (nt. autentimissoov) Comment[eu]=Zerbitzu baten mezua jaso da (adib. baimen eskaera) Comment[fi]=Palveluviesti on vastaanotettu (esim. tunnistautumispyyntö) Comment[fr]=Un message de service a été reçu (par exemple une demande d'autorisation) Comment[ga]=Fuarthas teachtaireacht seirbhíse (m.sh. iarratas údaraithe) Comment[gl]=Recibiuse unha mensaxe do servizo (p.ex. unha solicitude de autorización) Comment[hr]=Primljena je servisna poruka (npr. zahtjev za autorizacijom) Comment[hu]=Szolgáltatásüzenet érkezett (például hitelesítési kérés) Comment[ia]=Un message de servicio ha essite recipite (p.ex. requesta de autorisation) Comment[it]=È stato ricevuto un messaggio di servizio (ad esempio una richiesta di autorizzazione) Comment[ja]=サービスメッセージ (例: 許可要求) を受け取りました Comment[kk]=Қызмет хабарламасы (мысалы, авторизацияны сұрауы) келіп түсті Comment[km]=បាន​ទទួល​សារ​សេវា (ឧ. សំណើ​​សិទ្ធិ) Comment[ko]=인증 요청 같은 서비스 메시지를 받음 Comment[lt]=Gautas tarnybos pranešimas (pvz., prašymas patvirtinti) Comment[lv]=Saņemts servisa ziņojums (piem. autorizācijas pieprasījums) Comment[nb]=En tjenestemelding er mottatt (f.eks. forespørsel om autorisasjon) Comment[nds]=En Deenst-Mellen keem rin (a.B. en Identifikatschoonanfraag). Comment[nl]=Er is een dienstmededeling (zoals een autorisatieverzoek) ontvangen Comment[nn]=Du har fått ei tenestemelding (for eksempel ein førespurnad om godkjenning) Comment[pl]=Otrzymano wiadomość usługową (np. żądanie uwierzytelnienia) Comment[pt]=Foi recebida uma mensagem do serviço (p.ex., um pedido de autorização) Comment[pt_BR]=Chegou uma mensagem de serviço (p.ex. pedido de autorização) Comment[ro]=A fost recepționat un mesaj de serviciu (de ex. cerere de autorizare) Comment[ru]=Получено служебное сообщение (например, запрос авторизации) Comment[si]=සේවා පණිවුඩයක් ලැබිනි (අවසරදීම් ඉල්ලීමක්) Comment[sk]=Bola prijatá servisná správa (napr. požiadavka na oprávnenie) Comment[sl]=Prejeto je bilo sporočilo storitve (npr. zahteva za pooblastitev) Comment[sr]=Сервисна порука је примљена (нпр. захтев за овлашћивање) Comment[sr@ijekavian]=Сервисна порука је примљена (нпр. захтјев за овлашћивање) Comment[sr@ijekavianlatin]=Servisna poruka je primljena (npr. zahtjev za ovlašćivanje) Comment[sr@latin]=Servisna poruka je primljena (npr. zahtev za ovlašćivanje) Comment[sv]=Ett tjänstmeddelande har tagits emot (t.ex. behörighetsbegäran) Comment[th]=ได้รับข้อความจากบริการเข้ามา (เช่น การร้องขอการอนุญาต) Comment[tr]=Bir hizmet iletisi alındı (yetkilendirme isteği) Comment[uk]=Було отримано службове повідомлення (наприклад, запит щодо уповноваження) Comment[x-test]=xxA service message has been received (e.g. authorization request)xx Comment[zh_CN]=接收到一条服务消息 (如身份验证请求) Comment[zh_TW]=收到一個服務訊息(例如認證請求) Action=Popup Sound= [Event/kopete_gadu_contactslist] Name=Gadu-Gadu contacts list Name[ast]=Llista de contautos Gadu-Gadu Name[bg]=Списък с контакти в Gadu-Gadu Name[bs]=Lista kontakata Gadu-Gadu Name[ca]=Llista de contactes del Gadu-Gadu Name[ca@valencia]=Llista de contactes del Gadu-Gadu Name[cs]=Seznam kontaktů Gadu-Gadu Name[da]=Gadu-Gadu kontaktliste Name[de]=Gadu-Gadu-Kontaktliste Name[el]=Λίστα επαφών Gadu-Gadu Name[en_GB]=Gadu-Gadu contacts list Name[es]=Lista de contactos Gadu-Gadu Name[et]=Gadu-Gadu kontaktide nimekiri Name[eu]=Gadu-Gadu kontaktuen zerrenda Name[fi]=Gadu-Gadu-yhteyksien luettelo Name[fr]=Liste de contacts Gadu-Gadu Name[ga]=Liosta teagmhálacha Gadu-Gadu Name[gl]=Lista de contactos de GaduGadu Name[hr]=Lista kontakata od Gadu-Gadu Name[hu]=Gadu-Gadu partnerlista Name[ia]=Lista de contacto de Gadu-Gadu Name[it]=Lista dei contatti di Gadu-Gadu Name[kk]=Gadu-Gadu контакттарының тізімі Name[km]=បញ្ជី​ទំនាក់ទំនង Gadu-Gadu Name[ko]=Gadu-Gadu 연락처 목록 Name[lt]=Gadu-Gadu kontaktų sąrašas Name[lv]=Gadu-Gadu kontaktu saraksts Name[nb]=Gadu-Gadu kontaktliste Name[nds]=Gadu-Gadu-Kontaktenlist Name[nl]=Gadu-Gadu contactenlijst Name[nn]=Gadu-Gadu-kontaktliste Name[pl]=Lista kontaktów Gadu-Gadu Name[pt]=Lista de contactos do Gadu-Gadu Name[pt_BR]=Lista de contatos Gadu-Gadu Name[ro]=Listă de contacte Gadu-Gadu Name[ru]=Список контактов Gadu-Gadu Name[si]=Gadu-Gadu සබඳතා ලැයිස්තුව Name[sk]=Zoznam kontaktov Gadu-Gadu Name[sl]=Seznam stikov za Gadu-Gadu Name[sr]=Листа контаката гаду‑гадуа Name[sr@ijekavian]=Листа контаката гаду‑гадуа Name[sr@ijekavianlatin]=Lista kontakata Gadu‑Gadua Name[sr@latin]=Lista kontakata Gadu‑Gadua Name[sv]=Gadu-Gadu kontaktlista Name[th]=รายการชื่อติดต่อของ Gadu-Gadu Name[tr]=Gadu-Gadu kişi listesi Name[uk]=Список контактів Gadu-Gadu Name[x-test]=xxGadu-Gadu contacts listxx Name[zh_CN]=Gadu-Gadu 联系人列表 Name[zh_TW]=Gadu-Gadu 聯絡人清單 Comment=Contact list has been received/exported/deleted Comment[ast]=La llista de contautos recibióse/esportóse/desanicióse Comment[bg]=Списъкът с контакти е получен, изнесен или изтрит Comment[bs]=Lista kontakata je primljena/izbačena/obrisana Comment[ca]=S'ha rebut/exportat/suprimit la llista de contactes Comment[ca@valencia]=S'ha rebut/exportat/suprimit la llista de contactes Comment[cs]=Seznam kontaktů byl přijat/exportován/odstraněn Comment[da]=Kontaktliste er blevet modtaget/eksporteret/slettet Comment[de]=Die Kontaktliste ist empfangen/exportiert/gelöscht worden Comment[el]=Η λίστα επαφών έχει ληφθεί/εξαχθεί/διαγραφεί Comment[en_GB]=Contact list has been received/exported/deleted Comment[es]=La lista de contactos ha sido recibida/exportada/borrada Comment[et]=Kontaktide nimekiri saadi/eksporditi/kustutati Comment[eu]=Kontaktuen zerrenda jaso/esportatu/ezabatu da Comment[fi]=Yhteysluettelo on vastaanotettu/viety/poistettu Comment[fr]=La liste de contacts a été reçue / exportée / supprimée Comment[ga]=Bhí an liosta teagmhálacha faighte/easpórtáilte/scriosta Comment[gl]=Recibíronse/Exportáronse/Elimináronse listas de contactos Comment[hr]=Lista kontakata je primljena/izvezena/izbrisana Comment[hu]=A partnerlista fogadva/exportálva/törölve Comment[ia]=Lista de contacto ha essite recipite/exportate/delite Comment[it]=La lista dei contatti è stata ricevuta, esportata o eliminata Comment[kk]=Контакт тізімі қабылданған/экспортталған/өшірілген Comment[km]=បញ្ជីទំនាក់ទំនង​ត្រូវ​បាន​ទទួល/នាំចេញ/លុប Comment[ko]=연락처 목록을 추가/내보냄/삭제함 Comment[lt]=Kontaktų sąrašas buvo gautas/eksportuotas/ištrintas Comment[lv]=Kontaktu saraksts ir saņemts/eksportēts/dzēsts Comment[nb]=Kontaktliste er blitt mottatt/eksportert/slettet Comment[nds]=Kontaktenlist wöör annahmen/exporteert/wegdaan Comment[nl]=Contactenlijst is ontvangen/geëxporteerd/verwijderd Comment[nn]=Kontaktlista er motteken/eksportert/sletta Comment[pl]=Otrzymano/wyeksportowano/usunięto listę kontaktów Comment[pt]=A lista de contactos foi recebida/exportada/removida Comment[pt_BR]=A lista de contatos foi recebida/exportada/excluída Comment[ru]=Список контактов был принят/экспортирован/удалён Comment[si]=සබඳතා ලැයිස්තුව ලැබිනි/අපනයනය විය/මකාදැමිනි Comment[sk]=Zoznam kontaktov bol prijatý/exportovaný/odstránený Comment[sl]=Seznam stikov je bil prejet, izvožen ali izbrisan Comment[sr]=Листа контаката је примљена/извезена/обрисана Comment[sr@ijekavian]=Листа контаката је примљена/извезена/обрисана Comment[sr@ijekavianlatin]=Lista kontakata je primljena/izvezena/obrisana Comment[sr@latin]=Lista kontakata je primljena/izvezena/obrisana Comment[sv]=Kontaktlista har tagits emot, exporterats eller tagits bort Comment[tr]=Kişi listesi alındı/dışarıya aktarıldı/silindi Comment[uk]=Список контактів було отримано/експортовано/вилучено Comment[x-test]=xxContact list has been received/exported/deletedxx Comment[zh_CN]=联系人列表已收到/导出/删除 Comment[zh_TW]=聯絡人清單已被接收/匯出/刪除 Action=Popup Sound= [Event/user_is_typing_message] Name=Typing message Name[bg]=Писане на съобщение Name[bs]=Kucana poruka Name[ca]=S'està teclejant un missatge Name[ca@valencia]=S'està teclejant un missatge Name[cs]=Píše zprávu Name[da]=Skriver en besked Name[de]=Nachricht wird geschrieben Name[el]=Πληκτρολόγηση μηνύματος Name[en_GB]=Typing message Name[es]=Escribiendo mensaje Name[et]=Sõnumi kirjutamine Name[eu]=Mezua idazten Name[fi]=Viestin kirjoittaminen Name[fr]=Rédaction en cours Name[ga]=Teachtaireacht á clóscríobh Name[gl]=Escribindo unha mensaxe Name[hr]=Piše poruku Name[hu]=Üzenetet ír Name[ia]=Typante message Name[it]=Messaggio in battitura Name[ja]=メッセージをタイプ中 Name[kk]=Хабарлама жазуда Name[km]=វាយ​សារ Name[ko]=메시지 입력 중 Name[lt]=Rašoma žinutė Name[nb]=Skriver melding Name[nds]=Bi't Ingeven vun en Naricht Name[nl]=Typt een bericht Name[pa]=ਸੁਨੇਹਾ ਲਿਖਦਾ/ਲਿਖਦੀ ਹੈ Name[pl]=Pisanie wiadomości Name[pt]=A escrever uma mensagem Name[pt_BR]=Digitando mensagem Name[ro]=Scrie mesaj Name[ru]=Ввод сообщения Name[si]=පණිවුඩයක් ලියමින් Name[sk]=Píše správu Name[sl]=Pisanje sporočila Name[sr]=Куца поруку Name[sr@ijekavian]=Куца поруку Name[sr@ijekavianlatin]=Kuca poruku Name[sr@latin]=Kuca poruku Name[sv]=Skriver meddelande Name[tr]=İleti yazıyor Name[uk]=Введення повідомлення Name[x-test]=xxTyping messagexx Name[zh_CN]=正在输入消息 Name[zh_TW]=正在輸入訊息 Comment=A user is typing a message Comment[bg]=Потребителят пише съобщение Comment[bs]=Korisnik kuca poruku Comment[ca]=Un usuari està teclejant un missatge Comment[ca@valencia]=Un usuari està teclejant un missatge Comment[cs]=Uživatel píše zprávu Comment[da]=En bruger er ved at skrive en besked Comment[de]=Ein Benutzer schreibt eine Nachricht Comment[el]=Ένας χρήστης πληκτρολογεί μήνυμα Comment[en_GB]=A user is typing a message Comment[es]=Un usuario está escribiendo un mensaje Comment[et]=Kasutaja kirjutab sõnumit Comment[eu]=Erabiltzaile bat mezua idazten ari da Comment[fi]=Käyttäjä kirjoittaa viestiä Comment[fr]=Un utilisateur écrit un message Comment[ga]=Tá úsáideoir ag clóscríobh teachtaireachta Comment[gl]=Un usuario está a escribir unha mensaxe. Comment[hu]=Egy felhasználó üzenetet gépel Comment[ia]=Un usator es typante un message Comment[it]=Un utente sta scrivendo un messaggio Comment[ja]=ユーザがメッセージをタイプ中です Comment[kk]=Пайдаланушы хабарламаны теріп жатыр Comment[km]=អ្នកប្រើ​ម្នាក់​កំពុង​វាយ​សារ Comment[ko]=사용자가 메시지를 입력하고 있음 Comment[lt]=Naudotojas rašo žinutę Comment[nb]=En bruker skriver en melding Comment[nds]=En Bruker gifft jüst en Naricht in. Comment[nl]=Een gebruiker is bezig een bericht te typen Comment[pa]=ਯੂਜ਼ਰ ਸੁਨੇਹਾ ਲਿਖ ਰਿਹਾ ਹੈ Comment[pl]=Użytkownik pisze wiadomość Comment[pt]=Um utilizador está a escrever uma mensagem Comment[pt_BR]=Um usuário está digitando uma mensagem Comment[ro]=Un utilizator scrie un mesaj Comment[ru]=Пользователь вводит сообщение Comment[si]=පරිශීලකයා පණිවුඩයක් ලියමින් Comment[sk]=Používateľ píše správu Comment[sl]=Uporabnik piše sporočilo Comment[sr]=Корисник куца поруку Comment[sr@ijekavian]=Корисник куца поруку Comment[sr@ijekavianlatin]=Korisnik kuca poruku Comment[sr@latin]=Korisnik kuca poruku Comment[sv]=En användare skriver ett meddelande Comment[tr]=Bir kullanıcı bir ileti yazıyor Comment[uk]=Користувач вводить повідомлення Comment[x-test]=xxA user is typing a messagexx Comment[zh_CN]=一位用户正在输入消息 Comment[zh_TW]=有個使用者正在輸入訊息 Action=None [Event/kopete_incoming_file_transfer] Name=Incoming File Transfer Name[bg]=Входящ пренос на файл Name[bs]=Dolazni prijenos datoteka Name[ca]=Transferència de fitxer entrant Name[ca@valencia]=Transferència de fitxer entrant Name[cs]=Příchozí přenos souboru Name[da]=Indkommende filoverførsel Name[de]=Eingehende Dateiübertragung Name[el]=Μεταφορά εισερχόμενου αρχείου Name[en_GB]=Incoming File Transfer Name[es]=Transferencia de archivo entrante Name[et]=Sisenev failiülekanne Name[eu]=Sarrerako fitxategi-transferentzia Name[fi]=Tiedostonsiirto Name[fr]=Arrivée d'un transfert de fichier Name[gl]=Transferencia de ficheiros entrante Name[hu]=Bejövő fájlátvitel Name[ia]=Transferimento de file in arrivata Name[it]=Trasferimento di file in arrivo Name[kk]=Кіріс файл тасымалы Name[km]=ការ​ផ្ទេរ​ឯកសារ​ចូល Name[ko]=들어오는 파일 전송 요청 Name[lt]=Įeinantis failo persiuntimas Name[nb]=Innkommende filoverføring Name[nds]=Ankamen Dateiöverdregen Name[nl]=Inkomende bestandsoverdracht Name[pa]=ਆ ਰਹੀ ਫਾਇਲ ਟਰਾਂਸਫਰ Name[pl]=Przychodzące przysyłanie pliku Name[pt]=Transferência de Ficheiro Recebida Name[pt_BR]=Transferência de arquivo recebida Name[ro]=Transfer de fișiere de intrare Name[ru]=Входящий запрос на передачу файла Name[si]=පැමිණෙන ගොනු හුවමාරුවක් Name[sk]=Prichádzajúci prenos súboru Name[sl]=Dohodni prenos datoteke Name[sr]=Долазни пренос фајла Name[sr@ijekavian]=Долазни пренос фајла Name[sr@ijekavianlatin]=Dolazni prenos fajla Name[sr@latin]=Dolazni prenos fajla Name[sv]=Inkommande filöverföring Name[tr]=Gelen Dosya Aktarımı Name[uk]=Вхідне перенесення файла Name[x-test]=xxIncoming File Transferxx Name[zh_CN]=收到文件传输 Name[zh_TW]=進來的檔案傳輸 Comment=An incoming file transfer request has been received Comment[bg]=Получена е заявка за входящ пренос на файл Comment[bs]=Primljen je zahtjev za dolaznu datoteku Comment[ca]=S'ha rebut una sol·licitud de transferència de fitxer entrant Comment[ca@valencia]=S'ha rebut una sol·licitud de transferència de fitxer entrant Comment[cs]=Byla přijata žádost o přenos příchozího souboru Comment[da]=En anmodning om indkommende filoverførsel er blevet modtaget Comment[de]=Eine Anfrage für eine eingehende Dateiübertragung wurde gestellt Comment[el]=Έχει ληφθεί αίτηση μεταφοράς εισερχόμενου αρχείου Comment[en_GB]=An incoming file transfer request has been received Comment[es]=Se ha recibido una petición de transferencia de archivo entrante Comment[et]=Saadi sisenev failiülekande soov Comment[eu]=Sarrerako fitxategi-transferentziaren eskaera jaso da Comment[fi]=Tiedostonsiirtopyyntö on vastaanotettu Comment[fr]=Une requête de transfert de fichier a été reçue Comment[gl]=Recibiuse unha solicitude de transferencia dun ficheiro entrante. Comment[hu]=Kívülről érkező fájlátviteli kérelem érkezett Comment[ia]=Un requesta de transferimento de file in arrivata ha essite recipite Comment[it]=È stata ricevuta una richiesta di trasferimento di file in arrivo Comment[kk]=Кіріс файл тасымалдауын сұрауы келді Comment[km]=បាន​ទទួល​សំណើរ​ផ្ទេរ​ឯកសារ​ចូល Comment[ko]=파일 전송 요청을 받았습니다 Comment[lt]=Gautas įeinantis failo persiuntimo prašymas Comment[nb]=En innkommende forespørsel om filoverføring er mottatt Comment[nds]=Du hest en Verlööfnisanfraag för en ankamen Datei kregen. Comment[nl]=Er is een bericht ontvangen over een inkomende bestandsoverdracht Comment[pl]=Otrzymano żądanie przychodzącego przesyłania pliku Comment[pt]=Foi recebido um pedido de transferência de ficheiro Comment[pt_BR]=Chegou uma solicitação de transferência de arquivo Comment[ro]=A fost recepționată o cerere de intrare pentru transfer de fișiere Comment[ru]=Поступил запрос на передачу файла Comment[si]=පැමිණෙන ගොනු හුවමාරු ඉල්ලීමක් ලැබිනි Comment[sk]=Bol prijatý prichádzajúci prenos súboru Comment[sl]=Prejeta je bila dohodna zahteva za prenos datoteke Comment[sr]=Примљена је долазни захтев за пренос фајла Comment[sr@ijekavian]=Примљена је долазни захтев за пренос фајла Comment[sr@ijekavianlatin]=Primljena je dolazni zahtev za prenos fajla Comment[sr@latin]=Primljena je dolazni zahtev za prenos fajla Comment[sv]=En inkommande filöverföringsbegäran har anlänt Comment[tr]=Bir gelen dosya aktarımı isteği alındı Comment[uk]=Отримано запити щодо вхідного перенесення файла Comment[x-test]=xxAn incoming file transfer request has been receivedxx Comment[zh_CN]=收到了一条文件传入请求 Comment[zh_TW]=已接收到將檔案傳進來的要求 Action=Popup Sound= diff --git a/protocols/CMakeLists.txt b/protocols/CMakeLists.txt index f8b5c6a01..d88e1a995 100644 --- a/protocols/CMakeLists.txt +++ b/protocols/CMakeLists.txt @@ -1,111 +1,97 @@ option(WITH_testbed "Enable Kopete testbed protocol" ON) option(WITH_oscar "Enable Kopete Oscar (ICQ and AIM) protocol" ON) option(WITH_yahoo "Enable Kopete Yahoo protocol" ON) option(WITH_qq "Enable Kopete QQ protocol" ON) option(WITH_sms "Enable Kopete SMS protocol" ON) option(WITH_groupwise "Enable Novell GroupWise Messenger protocol" ON) option(WITH_winpopup "Enable Kopete winpopup protocol" ON) option(WITH_gadu "Enable Kopete Gadu-Gadu protocol" ON) option(WITH_jabber "Enable Kopete Jabber protocol" ON) option(WITH_libjingle "Enable Kopete Jabber libjingle support" ON) option(WITH_bonjour "Enable Kopete Bonjour protocol" ON) -option(WITH_wlm "Enable Window Live Messenger support" ON) -option(WITH_WLM_MEDIASTREAMER "Enable Windows Live Messenger voice clip support" ON) option(WITH_meanwhile "Enable Kopete meanwhile protocol" ON) option(WITH_skype "Enable Kopete Skype protocol" ON) # Disable jingle support because it is not working and libiris does not support it #if(LIBORTP_FOUND AND SPEEX_FOUND AND ALSA_FOUND AND WITH_JINGLE) # message(STATUS "Building jingle support") # set(BUILD_JINGLE TRUE) #else() # message(STATUS "Not building jingle support (recommended)") # set(BUILD_JINGLE FALSE) #endif() set(BUILD_JINGLE FALSE) if(OPENSSL_FOUND OR WIN32) if(EXPAT_FOUND AND LIBORTP_FOUND AND SRTP_FOUND AND JSONCPP_FOUND AND MEDIASTREAMER_FOUND AND WITH_libjingle) message(STATUS "Building jabber libjingle support") set(BUILD_LIBJINGLE TRUE) else() message(STATUS "Not building jabber libjingle support") set(BUILD_LIBJINGLE FALSE) endif() else() message(STATUS "Not building jabber libjingle support") set(BUILD_LIBJINGLE FALSE) endif() -if(MEDIASTREAMER_FOUND AND LIBORTP_FOUND AND WITH_WLM_MEDIASTREAMER) - message(STATUS "Building Windows Live Messenger voice clip support") - set(BUILD_WLM_MEDIASTREAMER TRUE) -else() - message(STATUS "Not building Windows Live Messenger voice clip support") - set(BUILD_WLM_MEDIASTREAMER FALSE) -endif() - include_directories(${KOPETE_INCLUDES}) -if(WITH_wlm AND LIBMSN_FOUND AND Boost_FOUND) - add_subdirectory( wlm ) -endif() - if(WITH_oscar) add_subdirectory( oscar ) endif() if(WITH_yahoo AND JASPER_FOUND) add_subdirectory( yahoo ) endif() if(WITH_qq) add_subdirectory( qq ) endif() if(NOT WIN32) if(WITH_winpopup) add_subdirectory( winpopup ) endif() if(WITH_gadu AND LIBGADU_FOUND) add_subdirectory( gadu ) endif() message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}: WARNING: sms plugin disabled") # if(WITH_sms) # add_subdirectory( sms ) # endif() message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}: WARNING: skype plugin disabled") # if(NOT APPLE AND WITH_skype) # add_subdirectory( skype ) # endif() endif() if(Qca-qt5_FOUND AND ZLIB_FOUND) if(IDN_FOUND) if(WITH_jabber) add_subdirectory( jabber ) endif() else() message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}: Disabled Jabber because libidn-devel was not found") endif() if(WITH_groupwise) add_subdirectory( groupwise ) endif() else() message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}: Disabled GroupWise and Jabber because QCA2 was not found") endif() if(WITH_testbed) add_subdirectory( testbed ) endif() if(WITH_bonjour) add_subdirectory( bonjour ) endif() if(WITH_meanwhile) if(LIBMEANWHILE_FOUND) add_subdirectory( meanwhile ) else() message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}: Disabled Meanwhile beause libmeanwhile was not found") endif() endif() diff --git a/protocols/wlm/CMakeLists.txt b/protocols/wlm/CMakeLists.txt deleted file mode 100644 index 578447256..000000000 --- a/protocols/wlm/CMakeLists.txt +++ /dev/null @@ -1,89 +0,0 @@ -project(wlm) - -include_directories( - ${Boost_INCLUDE_DIRS} -) - -ADD_SUBDIRECTORY(icons) - -set(kopete_wlm_include_DIRS - ${KOPETE_INCLUDES} - ${CMAKE_CURRENT_SOURCE_DIR}/ui - ${LIBMSN_INCLUDE_DIR} -) - -set(kopete_wlm_ui_SRCS - ui/wlmaddcontactpage.cpp - ui/wlmeditaccountwidget.cpp -) - -ki18n_wrap_ui(kopete_wlm_ui_SRCS - ui/wlmaddui.ui - ui/wlminfo.ui - ui/wlmaccountpreferences.ui - ui/wlmchatsessioninkpopup.ui -) - -set(kopete_wlm_PART_SRCS - ${kopete_wlm_ui_SRCS} - wlmprotocol.cpp - wlmcontact.cpp - wlmaccount.cpp - wlmlibmsn.cpp - wlmsocket.cpp - wlmserver.cpp - wlmchatmanager.cpp - wlmchatsession.cpp - wlmchatsessioninkarea.cpp - wlmchatsessioninkaction.cpp - wlmtransfermanager.cpp -) - -add_library(kopete_wlm MODULE ${kopete_wlm_PART_SRCS}) - -set(kopete_wlm_link_LIBS - - - KF5::KIOCore - ${KDE4_KMIME_LIBS} - Qt5::Xml - Qt5::Network - kopete - ${LIBMSN_LIBRARIES} -) - -if(BUILD_WLM_MEDIASTREAMER) - set(kopete_wlm_link_LIBS ${kopete_wlm_link_LIBS} ${MEDIASTREAMER_LIBRARIES} ${LIBORTP_LIBRARY}) - set(kopete_wlm_include_DIRS ${kopete_wlm_include_DIRS} ${MEDIASTREAMER_INCLUDE_DIR}) - add_definitions(-DHAVE_MEDIASTREAMER) -endif(BUILD_WLM_MEDIASTREAMER) - -if(GIF_FOUND) - set(kopete_wlm_link_LIBS ${kopete_wlm_link_LIBS} ${GIF_LIBRARIES}) - set(kopete_wlm_include_DIRS ${kopete_wlm_include_DIRS} ${GIF_INCLUDE_DIR}) - add_definitions(-DHAVE_GIFLIB) - - # giflib 4.2.0 removed PrintGifError() in favor of GifError() and GifErrorString(). - # We need to check which functions are present. - # FIXME: Once we depend on CMake 2.8.6+ we can use CMAKE_{PUSH,POP}_CHECK_STATE(). - set(_OLD_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") - set(_OLD_CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}") - set(CMAKE_REQUIRED_LIBRARIES "${GIF_LIBRARIES}") - set(CMAKE_REQUIRED_INCLUDES "${GIF_INCLUDE_DIR}") - include(CheckFunctionExists) - check_function_exists(GifErrorString HAVE_GIF_ERROR_STRING) - set(CMAKE_REQUIRED_LIBRARIES "${_OLD_CMAKE_REQUIRED_LIBRARIES}") - set(CMAKE_REQUIRED_INCLUDES "${_OLD_CMAKE_REQUIRED_INCLUDES}") - - if(HAVE_GIF_ERROR_STRING) - add_definitions(-DHAVE_GIF_ERROR_STRING) - endif(HAVE_GIF_ERROR_STRING) -endif(GIF_FOUND) - -include_directories(${kopete_wlm_include_DIRS}) -target_link_libraries(kopete_wlm ${kopete_wlm_link_LIBS}) - -install(TARGETS kopete_wlm DESTINATION ${KDE_INSTALL_PLUGINDIR}) - -install(FILES kopete_wlm.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) -install(FILES wlmchatui.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/kopete_wlm) diff --git a/protocols/wlm/README b/protocols/wlm/README deleted file mode 100644 index 3f603b584..000000000 --- a/protocols/wlm/README +++ /dev/null @@ -1,5 +0,0 @@ -This source code links against libmsn. -You can get it here: -svn co https://libmsn.svn.sourceforge.net/svnroot/libmsn/trunk libmsn - -Salem diff --git a/protocols/wlm/icons/CMakeLists.txt b/protocols/wlm/icons/CMakeLists.txt deleted file mode 100644 index abd6009dc..000000000 --- a/protocols/wlm/icons/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -ecm_install_icons(${KDE_INSTALL_DATADIR}/kopete/icons) diff --git a/protocols/wlm/icons/ox128-app-wlm_protocol.png b/protocols/wlm/icons/ox128-app-wlm_protocol.png deleted file mode 100644 index 7e5113720..000000000 Binary files a/protocols/wlm/icons/ox128-app-wlm_protocol.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_away.png b/protocols/wlm/icons/ox16-action-wlm_away.png deleted file mode 100644 index 1ec52cd6c..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_away.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_blocked.png b/protocols/wlm/icons/ox16-action-wlm_blocked.png deleted file mode 100644 index aa22ef97d..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_blocked.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_brb.png b/protocols/wlm/icons/ox16-action-wlm_brb.png deleted file mode 100644 index 8524a3ca8..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_brb.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_busy.png b/protocols/wlm/icons/ox16-action-wlm_busy.png deleted file mode 100644 index e1862c64c..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_busy.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_fakefriend.png b/protocols/wlm/icons/ox16-action-wlm_fakefriend.png deleted file mode 100644 index b3acaf959..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_fakefriend.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_invisible.png b/protocols/wlm/icons/ox16-action-wlm_invisible.png deleted file mode 100644 index e53c06e0e..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_invisible.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_lunch.png b/protocols/wlm/icons/ox16-action-wlm_lunch.png deleted file mode 100644 index 468a1aee9..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_lunch.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_na.png b/protocols/wlm/icons/ox16-action-wlm_na.png deleted file mode 100644 index 776d7f996..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_na.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_newmsg.png b/protocols/wlm/icons/ox16-action-wlm_newmsg.png deleted file mode 100644 index 0623046d0..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_newmsg.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_offline.png b/protocols/wlm/icons/ox16-action-wlm_offline.png deleted file mode 100644 index 1662d652c..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_offline.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_online.png b/protocols/wlm/icons/ox16-action-wlm_online.png deleted file mode 100644 index a6dcfe9b5..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_online.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-action-wlm_phone.png b/protocols/wlm/icons/ox16-action-wlm_phone.png deleted file mode 100644 index 5fb3592cf..000000000 Binary files a/protocols/wlm/icons/ox16-action-wlm_phone.png and /dev/null differ diff --git a/protocols/wlm/icons/ox16-app-wlm_protocol.png b/protocols/wlm/icons/ox16-app-wlm_protocol.png deleted file mode 100644 index 22ca6cae3..000000000 Binary files a/protocols/wlm/icons/ox16-app-wlm_protocol.png and /dev/null differ diff --git a/protocols/wlm/icons/ox22-app-wlm_protocol.png b/protocols/wlm/icons/ox22-app-wlm_protocol.png deleted file mode 100644 index 27a60c9e6..000000000 Binary files a/protocols/wlm/icons/ox22-app-wlm_protocol.png and /dev/null differ diff --git a/protocols/wlm/icons/ox32-app-wlm_protocol.png b/protocols/wlm/icons/ox32-app-wlm_protocol.png deleted file mode 100644 index ce628dba1..000000000 Binary files a/protocols/wlm/icons/ox32-app-wlm_protocol.png and /dev/null differ diff --git a/protocols/wlm/icons/ox48-app-wlm_protocol.png b/protocols/wlm/icons/ox48-app-wlm_protocol.png deleted file mode 100644 index 4aae77980..000000000 Binary files a/protocols/wlm/icons/ox48-app-wlm_protocol.png and /dev/null differ diff --git a/protocols/wlm/icons/ox64-app-wlm_protocol.png b/protocols/wlm/icons/ox64-app-wlm_protocol.png deleted file mode 100644 index 141b2392e..000000000 Binary files a/protocols/wlm/icons/ox64-app-wlm_protocol.png and /dev/null differ diff --git a/protocols/wlm/icons/wlm_protocol.svgz b/protocols/wlm/icons/wlm_protocol.svgz deleted file mode 100644 index e913059c5..000000000 Binary files a/protocols/wlm/icons/wlm_protocol.svgz and /dev/null differ diff --git a/protocols/wlm/kopete_wlm.desktop b/protocols/wlm/kopete_wlm.desktop deleted file mode 100644 index e1298b431..000000000 --- a/protocols/wlm/kopete_wlm.desktop +++ /dev/null @@ -1,129 +0,0 @@ -[Desktop Entry] -Type=Service -Icon=wlm_protocol -X-KDE-ServiceTypes=Kopete/Protocol -X-KDE-Library=kopete_wlm -X-Kopete-Version=1000900 -X-Kopete-Messaging-Protocol=messaging/wlm -X-KDE-PluginInfo-Author=Kopete Developers -X-KDE-PluginInfo-Email=kopete-devel@kde.org -X-KDE-PluginInfo-Name=kopete_wlm -X-KDE-PluginInfo-Version=0.8.0 -X-KDE-PluginInfo-Website=http://kopete.kde.org -X-KDE-PluginInfo-Category=Protocols -X-KDE-PluginInfo-Depends= -X-KDE-PluginInfo-License=GPL -X-KDE-PluginInfo-EnabledByDefault=false -Name=WLM Messenger -Name[ar]=مرسال WLM -Name[ast]=WLM Messenger -Name[bg]=Моментни съобщения WLM -Name[bs]=WLM Poruke -Name[ca]=WLM Messenger -Name[ca@valencia]=WLM Messenger -Name[cs]=WLM Messenger -Name[da]=WLM-messenger -Name[de]=WLM Messenger -Name[el]=WLM Messenger -Name[en_GB]=WLM Messenger -Name[eo]=WLM Messenger -Name[es]=WLM Messenger -Name[et]=WLM Messenger -Name[eu]=WLM mezularitza -Name[fi]=WLM Messenger -Name[fr]=Messagerie WLM -Name[ga]=WLM Messenger -Name[gl]=WLM Messenger -Name[hne]=डबल्यूएलएम मैसेंजर -Name[hr]=WLM Messenger -Name[hu]=WLM Messenger -Name[ia]=Messagero WLM -Name[it]=Messaggistica WLM -Name[ja]=WLM メッセンジャー -Name[kk]=WLM хабарласу -Name[km]=កម្មវិធី​ផ្ញើសារ​របស់ WLM -Name[ko]=WLM 메신저 -Name[lt]=WLM žinutės -Name[lv]=WLM Ziņotājs -Name[ml]=ഡബ്ലിയുഎല്‍എം ദൂതന്‍ -Name[nb]=WLM Messenger -Name[nds]=WLM-Kortnarichtenmaker -Name[nl]=WLM Messenger -Name[nn]=WLM Messenger -Name[pa]=WLM ਮੈਸੈਂਜਰ -Name[pl]=Komunikator WLM -Name[pt]=WLM Messenger -Name[pt_BR]=Windows Live Messenger -Name[ro]=Mesager WLM -Name[ru]=WLM Messenger -Name[si]=WLM පණිවුඩකරු -Name[sk]=WLM Messenger -Name[sl]=WLM Messenger -Name[sq]=WLM Messenger -Name[sr]=Виндоуз лајв месенџер -Name[sr@ijekavian]=Виндоуз лајв месенџер -Name[sr@ijekavianlatin]=Windows Live Messenger -Name[sr@latin]=Windows Live Messenger -Name[sv]=WLM Messenger -Name[tr]=WLM Messenger -Name[uk]=Кур’єр WLM -Name[wa]=WLM Messenger -Name[x-test]=xxWLM Messengerxx -Name[zh_CN]=WLM Messenger -Name[zh_TW]=WLM Messenger -Comment=Windows Live Messenger plugin -Comment[ar]=ملحق مرسال النوافذ مباشر -Comment[ast]=Complementu de Windows Live Messenger -Comment[bg]=Приставка за съобщения Windows Live -Comment[bs]=Priključak za Windows Live Messenger -Comment[ca]=Connector pel Windows Live Messenger -Comment[ca@valencia]=Connector pel Windows Live Messenger -Comment[cs]=Modul pro Windows Live Messenger -Comment[da]=Plugin til Windows Live Messenger -Comment[de]=Modul für Windows-Live-Messenger -Comment[el]=Πρόσθετο Windows Live Messenger -Comment[en_GB]=Windows Live Messenger plugin -Comment[es]=Complemento de Windows Live Messenger -Comment[et]=Windows Live Messengeri plugin -Comment[eu]=Windows Live Messenger plugina -Comment[fi]=Windows Live Messenger -liitännäinen -Comment[fr]=Module Windows Live Messenger -Comment[ga]=Breiseán le haghaidh Windows Live Messenger -Comment[gl]=Complemento para o Live Messenger de Windows -Comment[hne]=विंडोज लाइव मैसेंजर प्लगइन -Comment[hr]=Priključak za Windows Live Messenger -Comment[hu]=Modul a Windows Live Messengerhez -Comment[ia]=Plug-in de Windows Live Messenger -Comment[it]=Estensione per Windows Live Messenger -Comment[ja]=Windows Live メッセンジャー用プラグイン -Comment[kk]=Windows Live хабарласу плагині -Comment[km]=កម្មវិធី​ជំនួយ​​របស់​កម្មវិធីផ្ញើសារ​បន្តផ្ទាល់​របស់​វីនដូ -Comment[ko]=Windows Live Messenger 플러그인 -Comment[lt]=Windows Live Messenger priedas -Comment[lv]=Windows Live Messenger spraudnis -Comment[ml]=വിന്ഡോസ് ലൈവ് ദൂതന്റെ സംയോജകം -Comment[nb]=Programtillegg for Windows Live Messenger -Comment[nds]=Windows-Live-Kortnarichtenmakermoduul -Comment[nl]=Plugin voor Windows Live Messenger -Comment[nn]=Programtillegg til Windows Live Messenger -Comment[pa]=ਵਿੰਡੋਜ਼ ਲਾਈਵ ਮੈਂਸੇਜ਼ਰ ਪਲੱਗਇਨ -Comment[pl]=Kompatybilność z komunikatorem Windows Live Messenger -Comment[pt]='Plugin' do Windows Live Messenger -Comment[pt_BR]=Plugin do Windows Live Messenger -Comment[ro]=Modul Windows Live Messenger -Comment[ru]=Модуль Windows Live Messenger -Comment[si]=Windows Live Messenger ප්ලගිනය -Comment[sk]=Modul pre Windows Live Messenger -Comment[sl]=Vstavek za Windows Live Messenger -Comment[sq]=Windows Live Messenger plugin -Comment[sr]=Прикључак Виндоуз лајв месенџера -Comment[sr@ijekavian]=Прикључак Виндоуз лајв месенџера -Comment[sr@ijekavianlatin]=Priključak Windows Live Messengera -Comment[sr@latin]=Priključak Windows Live Messengera -Comment[sv]=Insticksprogram för Windows Live Messenger -Comment[th]=ส่วนเสริมเพื่อใช้บริการ Windows Live Messenger -Comment[tr]=Windows Live Messenger eklentisi -Comment[uk]=Додаток кур'єра Windows Live -Comment[x-test]=xxWindows Live Messenger pluginxx -Comment[zh_CN]=Windows Live Messenger 插件 -Comment[zh_TW]=Windows Live Messenger 外掛程式 diff --git a/protocols/wlm/ui/wlmaccountpreferences.ui b/protocols/wlm/ui/wlmaccountpreferences.ui deleted file mode 100644 index 0ed489478..000000000 --- a/protocols/wlm/ui/wlmaccountpreferences.ui +++ /dev/null @@ -1,844 +0,0 @@ - - - WlmAccountPreferences - - - - 0 - 0 - 671 - 412 - - - - Account Preferences - Wlm - - - - 0 - - - - - 3 - - - - B&asic Setup - - - - - - Account Information - - - - - - - - The account name of your account. - - - The account name of your account. - - - WLM passport: - - - false - - - m_passport - - - - - - - The account name of your account. - - - The account name of your account. - - - - - - - - - - - - If you check this checkbox, the account will not be connected when you press the "Connect All" button, or at startup when automatic connection at startup is enabled. - - - E&xclude from connect all - - - false - - - - - - - - - - Registration - - - - 6 - - - 9 - - - - - - 0 - 0 - - - - - 0 - 0 - - - - To connect to the Microsoft network, you will need a Microsoft Passport.<br><br>If you do not currently have a Passport, please click the button to create one. - - - Qt::AlignVCenter - - - true - - - - - - - Re&gister New Account - - - - - - - - - - Qt::Vertical - - - - 20 - 0 - - - - - - - - - Privacy - - - - - - 0 - - - 6 - - - - - Blocked contacts: - - - - - - - 6 - - - 0 - - - - - - - - - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 20 - - - - - - - - - - Allowed contacts: - - - - - - - Qt::ActionsContextMenu - - - - - - - Qt::ActionsContextMenu - - - - - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /></head><body> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Italics</span> contacts are not on your contact list.</p></body></html> - - - - - - - - Sans Serif - 9 - 75 - false - true - false - false - - - - WARNING: You need to be connected to modify this page - - - Qt::AlignVCenter - - - - - - - - Co&nnection - - - - - - Connection Preferences (for advanced users) - - - - - - &Override default server information - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 16 - 20 - - - - - - - - - - false - - - Ser&ver / - - - m_serverName - - - - - - - false - - - po&rt: - - - m_serverPort - - - - - - - - - false - - - - 0 - 0 - - - - Only modify these values if you want to use a special IM proxy server, like SIMP - - - Only modify these values if you want to use a special IM proxy server, like SIMP - - - messenger.hotmail.com - - - - - - - false - - - Only modify these values if you want to use a special IM proxy server, like SIMP - - - Only modify these values if you want to use a special IM proxy server, like SIMP - - - 1 - - - 65535 - - - 1863 - - - - - - - - - Enable Proxy - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 28 - 20 - - - - - - - - - - false - - - Host / - - - - - - - false - - - port: - - - - - - - - - false - - - - 0 - 0 - - - - 0 - - - - - - - false - - - 1 - - - 65535 - - - 8080 - - - - - - - - - - - false - - - HTTP - - - true - - - - - - - false - - - Socks5 - - - - - - - false - - - Username: - - - - - - - false - - - - - - - false - - - Password: - - - - - - - false - - - QLineEdit::Password - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - - - - Qt::Vertical - - - - 20 - 0 - - - - - - - - - General - - - - - - General Options - - - - - - Do not send custom emoticons to other contacts - - - - - - - Do not show custom emoticons from other contacts - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - - Qt::AlignCenter - - - false - - - - - - - - KLineEdit - QLineEdit -
klineedit.h
-
- - Kopete::UI::PasswordWidget - -
kopetepasswordwidget.h
-
-
- - - - optionOverrideServer - toggled(bool) - labelServer - setEnabled(bool) - - - 102 - 89 - - - 104 - 123 - - - - - optionOverrideServer - toggled(bool) - labelPort - setEnabled(bool) - - - 161 - 91 - - - 152 - 122 - - - - - optionOverrideServer - toggled(bool) - m_serverName - setEnabled(bool) - - - 292 - 90 - - - 292 - 122 - - - - - optionOverrideServer - toggled(bool) - m_serverPort - setEnabled(bool) - - - 505 - 91 - - - 507 - 130 - - - - - optionEnableProxy - toggled(bool) - m_labelProxyHost - setEnabled(bool) - - - 341 - 132 - - - 75 - 161 - - - - - optionEnableProxy - toggled(bool) - m_labelProxyPort - setEnabled(bool) - - - 341 - 132 - - - 115 - 161 - - - - - optionEnableProxy - toggled(bool) - m_proxyHost - setEnabled(bool) - - - 341 - 132 - - - 365 - 161 - - - - - optionEnableProxy - toggled(bool) - m_proxyPort - setEnabled(bool) - - - 341 - 132 - - - 630 - 161 - - - - - optionEnableProxy - toggled(bool) - m_radioProxyHttp - setEnabled(bool) - - - 341 - 132 - - - 48 - 191 - - - - - optionEnableProxy - toggled(bool) - m_radioProxySocks5 - setEnabled(bool) - - - 341 - 132 - - - 115 - 191 - - - - - optionEnableProxy - toggled(bool) - m_proxyUsername - setEnabled(bool) - - - 341 - 132 - - - 319 - 191 - - - - - optionEnableProxy - toggled(bool) - m_proxyPassword - setEnabled(bool) - - - 341 - 132 - - - 571 - 191 - - - - - optionEnableProxy - toggled(bool) - m_labelProxyUsername - setEnabled(bool) - - - 341 - 132 - - - 191 - 191 - - - - - optionEnableProxy - toggled(bool) - m_labelProxyPassword - setEnabled(bool) - - - 341 - 132 - - - 447 - 191 - - - - -
diff --git a/protocols/wlm/ui/wlmaddcontactpage.cpp b/protocols/wlm/ui/wlmaddcontactpage.cpp deleted file mode 100644 index 10d80a641..000000000 --- a/protocols/wlm/ui/wlmaddcontactpage.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - wlmaddcontactpage.cpp - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#include "wlmaddcontactpage.h" - -#include -#include -#include - -#include -#include - -#include "kopeteuiglobal.h" -#include "kopeteaccount.h" -#include "kopetemetacontact.h" - -#include "wlmprotocol.h" -#include "ui_wlmaddui.h" - -WlmAddContactPage::WlmAddContactPage (Kopete::Account * account, QWidget * parent): -AddContactPage (parent), m_account(account) -{ - m_wlmAddUI = new Ui::WlmAddUI (); - m_wlmAddUI->setupUi (this); - m_wlmAddUI->m_uniqueName->setFocus(); -} - -WlmAddContactPage::~WlmAddContactPage () -{ - delete m_wlmAddUI; -} - -bool -WlmAddContactPage::apply (Kopete::Account *account, Kopete::MetaContact * metaContact) -{ - QString contactId = m_wlmAddUI->m_uniqueName->text().trimmed(); - return account->addContact( contactId, metaContact, Kopete::Account::ChangeKABC ); -} - -bool -WlmAddContactPage::validateData () -{ - if (!m_account->isConnected()) { - KMessageBox::sorry(this, i18n ("You need to be connected to be able to add contacts."), - i18n("Not Connected"), QFlags()); - return false; - } - - QString contactId = m_wlmAddUI->m_uniqueName->text().trimmed(); - if (WlmProtocol::validContactId(contactId)) - return true; - - KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, - i18n( "You must enter a valid WLM passport." ), i18n( "MSN Plugin" ) ); - - return false; -} - diff --git a/protocols/wlm/ui/wlmaddcontactpage.h b/protocols/wlm/ui/wlmaddcontactpage.h deleted file mode 100644 index a6c711949..000000000 --- a/protocols/wlm/ui/wlmaddcontactpage.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - wlmaddcontactpage.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMADDCONTACTPAGE_H -#define WLMADDCONTACTPAGE_H - -#include - -namespace Kopete -{ - class Account; -} -namespace Kopete -{ - class MetaContact; -} -namespace Ui -{ - class WlmAddUI; -} - -/** - * A page in the Add Contact Wizard - * @author Will Stephenson -*/ -class WlmAddContactPage:public AddContactPage -{ - Q_OBJECT -public: - WlmAddContactPage (Kopete::Account * account, QWidget * parent = 0); - ~WlmAddContactPage (); - - /** - * Make a contact out of the entered data - */ - virtual bool apply (Kopete::Account * a, Kopete::MetaContact * m); - /** - * Is the data correct? - */ - virtual bool validateData (); - -protected: - Ui::WlmAddUI * m_wlmAddUI; - Kopete::Account * m_account; -}; - -#endif diff --git a/protocols/wlm/ui/wlmaddui.ui b/protocols/wlm/ui/wlmaddui.ui deleted file mode 100644 index f0f94d8f4..000000000 --- a/protocols/wlm/ui/wlmaddui.ui +++ /dev/null @@ -1,64 +0,0 @@ - - - WlmAddUI - - - - 0 - 0 - 420 - 198 - - - - - - - The account name of the account you would like to add. - - - The account name of the account you would like to add. - - - &WLM passport: - - - false - - - m_uniqueName - - - - - - - The account name of the account you would like to add. - - - The account name of the account you would like to add. - - - - - - - <i>(for example: joe@hotmail.com)</i> - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - KLineEdit - QLineEdit -
klineedit.h
-
-
- - -
diff --git a/protocols/wlm/ui/wlmchatsessioninkpopup.ui b/protocols/wlm/ui/wlmchatsessioninkpopup.ui deleted file mode 100644 index e08c505e3..000000000 --- a/protocols/wlm/ui/wlmchatsessioninkpopup.ui +++ /dev/null @@ -1,176 +0,0 @@ - - - InkWindow - - - - 0 - 0 - 414 - 116 - - - - - 0 - - - 0 - - - - - 0 - - - QLayout::SetMaximumSize - - - - - - 0 - 0 - - - - - - - - - - Send - - - - - - - Clear - - - - - - - Color - - - - - - - - 80 - 0 - - - - true - - - 1 - - - 5 - - - 1 - - - 3 - - - true - - - Qt::Horizontal - - - false - - - - - - - - - - - - WlmChatSessionInkArea - QWidget -
wlmchatsessioninkarea.h
- 1 -
-
- - - - clear_btn - clicked() - m_inkArea - slotClear() - - - 369 - 46 - - - 163 - 57 - - - - - color_btn - clicked() - m_inkArea - slotColor() - - - 369 - 78 - - - 163 - 57 - - - - - send_btn - clicked() - m_inkArea - slotSend() - - - 369 - 14 - - - 163 - 57 - - - - - pen_size_slider - valueChanged(int) - m_inkArea - slotChangePenSize(int) - - - 369 - 105 - - - 163 - 57 - - - - -
diff --git a/protocols/wlm/ui/wlmeditaccountwidget.cpp b/protocols/wlm/ui/wlmeditaccountwidget.cpp deleted file mode 100644 index 2feb9cfa1..000000000 --- a/protocols/wlm/ui/wlmeditaccountwidget.cpp +++ /dev/null @@ -1,286 +0,0 @@ -/* - wlmeditaccountwidget.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#include "wlmeditaccountwidget.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "kopeteuiglobal.h" -#include "kopeteaccount.h" -#include "kopetecontact.h" -#include "ui_wlmaccountpreferences.h" -#include "wlmaccount.h" -#include "wlmprotocol.h" - -WlmEditAccountWidget::WlmEditAccountWidget (QWidget * parent, Kopete::Account * account) - : QWidget (parent), KopeteEditAccountWidget(account), m_wlmAccount(0) -{ - m_preferencesWidget = new Ui::WlmAccountPreferences (); - m_preferencesWidget->setupUi (this); - m_preferencesWidget->mainTabWidget->setCurrentIndex(0); - - if ( account ) - { - m_wlmAccount = static_cast(account); - - m_preferencesWidget->m_passport->setText( m_wlmAccount->accountId() ); - m_preferencesWidget->m_password->load( &m_wlmAccount->password() ); - - m_preferencesWidget->m_passport->setReadOnly( true ); - m_preferencesWidget->m_autologin->setChecked( account->excludeConnect() ); - if ( m_wlmAccount->serverName() != "messenger.hotmail.com" || m_wlmAccount->serverPort() != 1863 ) - m_preferencesWidget->optionOverrideServer->setChecked( true ); - - m_preferencesWidget->m_serverName->setText( m_wlmAccount->serverName() ); - m_preferencesWidget->m_serverPort->setValue( m_wlmAccount->serverPort() ); - - if ( m_wlmAccount->isProxyEnabled() ) - m_preferencesWidget->optionEnableProxy->setChecked( true ); - - m_preferencesWidget->m_proxyHost->setText( m_wlmAccount->proxyHost() ); - m_preferencesWidget->m_proxyPort->setValue( m_wlmAccount->proxyPort() ); - m_preferencesWidget->m_proxyUsername->setText( m_wlmAccount->proxyUsername() ); - m_preferencesWidget->m_proxyPassword->setText( m_wlmAccount->proxyPassword() ); - - m_preferencesWidget->m_doNotSendEmoticons->setChecked( m_wlmAccount->doNotSendEmoticons() ); - m_preferencesWidget->m_doNotRequestEmoticons->setChecked( m_wlmAccount->doNotRequestEmoticons() ); - - if(m_wlmAccount->proxyType() == QNetworkProxy::Socks5Proxy ) - m_preferencesWidget->m_radioProxySocks5->setChecked( true ); - else - m_preferencesWidget->m_radioProxyHttp->setChecked( true ); - - bool connected = account->isConnected(); - if ( connected ) - m_preferencesWidget->m_warning->hide(); - - m_preferencesWidget->m_allowButton->setEnabled( connected ); - m_preferencesWidget->m_blockButton->setEnabled( connected ); - - m_preferencesWidget->m_allowButton->setIcon( QIcon::fromTheme(QStringLiteral("arrow-left")) ); - m_preferencesWidget->m_blockButton->setIcon( QIcon::fromTheme(QStringLiteral("arrow-right")) ); - - QSet serverSideContacts = m_wlmAccount->serverSideContacts(); - foreach ( const QString &contact, m_wlmAccount->allowList() ) - { - QListWidgetItem *item = new QListWidgetItem( contact ); - if ( !serverSideContacts.contains( contact ) ) - { - QFont f = item->font(); - f.setItalic( true ); - item->setFont( f ); - } - m_preferencesWidget->m_AL->addItem( item ); - } - - foreach ( const QString &contact, m_wlmAccount->blockList() ) - { - QListWidgetItem *item = new QListWidgetItem( contact ); - if ( !serverSideContacts.contains( contact ) ) - { - QFont f = item->font(); - f.setItalic( true ); - item->setFont( f ); - } - m_preferencesWidget->m_BL->addItem( item ); - } - - m_deleteActionAL = new QAction( i18n( "Delete" ), m_preferencesWidget->m_AL ); - m_preferencesWidget->m_AL->addAction( m_deleteActionAL ); - - m_deleteActionBL = new QAction( i18n( "Delete" ), m_preferencesWidget->m_BL ); - m_preferencesWidget->m_BL->addAction( m_deleteActionBL ); - - connect( m_preferencesWidget->m_AL, SIGNAL(itemSelectionChanged()), this, SLOT(updateActionsAL()) ); - connect( m_preferencesWidget->m_BL, SIGNAL(itemSelectionChanged()), this, SLOT(updateActionsBL()) ); - connect( m_deleteActionAL, SIGNAL(triggered(bool)), this, SLOT(deleteALItem()) ); - connect( m_deleteActionBL, SIGNAL(triggered(bool)), this, SLOT(deleteBLItem()) ); - } - - connect( m_preferencesWidget->m_allowButton, SIGNAL(clicked()), this, SLOT(slotAllow()) ); - connect( m_preferencesWidget->m_blockButton, SIGNAL(clicked()), this, SLOT(slotBlock()) ); - connect( m_preferencesWidget->buttonRegister, SIGNAL(clicked()), this, SLOT(slotOpenRegister())); - - QWidget::setTabOrder( m_preferencesWidget->m_passport, m_preferencesWidget->m_password->mRemembered ); - QWidget::setTabOrder( m_preferencesWidget->m_password->mRemembered, m_preferencesWidget->m_password->mPassword ); - QWidget::setTabOrder( m_preferencesWidget->m_password->mPassword, m_preferencesWidget->m_autologin ); -} - -WlmEditAccountWidget::~WlmEditAccountWidget () -{ - delete m_preferencesWidget; -} - -Kopete::Account * WlmEditAccountWidget::apply () -{ - if ( !account() ) - setAccount( new WlmAccount( WlmProtocol::protocol(), m_preferencesWidget->m_passport->text().trimmed() ) ); - - KConfigGroup *config = account()->configGroup(); - WlmAccount* wlmAccount = static_cast(account()); - - account()->setExcludeConnect( m_preferencesWidget->m_autologin->isChecked() ); - m_preferencesWidget->m_password->save( &wlmAccount->password() ); - - if (m_preferencesWidget->optionOverrideServer->isChecked() ) { - config->writeEntry( "serverName", m_preferencesWidget->m_serverName->text().trimmed() ); - config->writeEntry( "serverPort", m_preferencesWidget->m_serverPort->value() ); - } - else { - config->writeEntry( "serverName", "messenger.hotmail.com" ); - config->writeEntry( "serverPort", "1863" ); - } - - if (m_preferencesWidget->optionEnableProxy->isChecked() ) { - config->writeEntry( "enableProxy", true ); - config->writeEntry( "proxyHost", m_preferencesWidget->m_proxyHost->text().trimmed() ); - config->writeEntry( "proxyPort", m_preferencesWidget->m_proxyPort->value() ); - config->writeEntry( "proxyUsername", m_preferencesWidget->m_proxyUsername->text() ); - config->writeEntry( "proxyPassword", m_preferencesWidget->m_proxyPassword->text() ); - if(m_preferencesWidget->m_radioProxyHttp->isChecked()) - config->writeEntry( "proxyType", (uint)QNetworkProxy::HttpProxy ); - else - config->writeEntry( "proxyType", (uint)QNetworkProxy::Socks5Proxy ); - } - else { - config->writeEntry( "enableProxy", false ); - } - - config->writeEntry( "doNotSendEmoticons", - m_preferencesWidget->m_doNotSendEmoticons->isChecked()); - - config->writeEntry( "doNotRequestEmoticons", - m_preferencesWidget->m_doNotRequestEmoticons->isChecked()); - - if ( wlmAccount->isConnected() ) - { - QSet allowList = wlmAccount->allowList(); - QSet blockList = wlmAccount->blockList(); - - for ( int i = 0; i < m_preferencesWidget->m_AL->count(); i++ ) - { - QString contact = m_preferencesWidget->m_AL->item(i)->text(); - if ( !allowList.contains(contact) ) - wlmAccount->server()->mainConnection->unblockContact( contact.toLatin1().constData() ); - } - - for ( int i = 0; i < m_preferencesWidget->m_BL->count(); i++ ) - { - QString contact = m_preferencesWidget->m_BL->item(i)->text(); - if ( !blockList.contains(contact) ) - wlmAccount->server()->mainConnection->blockContact( contact.toLatin1().constData() ); - } - - foreach ( const QString &contact, m_deletedContactsAL ) - wlmAccount->server()->mainConnection->removeFromList( MSN::LST_AL, contact.toLatin1().constData() ); - - foreach ( const QString &contact, m_deletedContactsBL ) - wlmAccount->server()->mainConnection->removeFromList( MSN::LST_BL, contact.toLatin1().constData() ); - } - - return account (); -} - -bool WlmEditAccountWidget::validateData () -{ - QString contactId = m_preferencesWidget->m_passport->text().trimmed(); - if ( WlmProtocol::validContactId( contactId ) ) - return true; - - KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, - i18n( "You must enter a valid WLM passport." ), i18n( "WLM Plugin" ) ); - return false; -} - -void WlmEditAccountWidget::slotAllow() -{ - if ( m_preferencesWidget->m_BL->selectedItems().isEmpty() ) - return; - - QListWidgetItem *item = m_preferencesWidget->m_BL->selectedItems().at(0); - m_preferencesWidget->m_BL->takeItem( m_preferencesWidget->m_BL->row( item ) ); - m_preferencesWidget->m_AL->addItem( item ); -} - -void WlmEditAccountWidget::slotBlock() -{ - if ( m_preferencesWidget->m_AL->selectedItems().isEmpty() ) - return; - - QListWidgetItem *item = m_preferencesWidget->m_AL->selectedItems().at(0); - m_preferencesWidget->m_AL->takeItem( m_preferencesWidget->m_AL->row( item ) ); - m_preferencesWidget->m_BL->addItem( item ); -} - -void WlmEditAccountWidget::updateActionsAL() -{ - bool enableDeleteAction = false; - - if ( m_wlmAccount && !m_preferencesWidget->m_AL->selectedItems().isEmpty() ) - enableDeleteAction = !m_wlmAccount->serverSideContacts().contains( m_preferencesWidget->m_AL->selectedItems().at(0)->text() ); - - m_deleteActionAL->setEnabled( enableDeleteAction ); -} - -void WlmEditAccountWidget::updateActionsBL() -{ - bool enableDeleteAction = false; - - if ( m_wlmAccount && !m_preferencesWidget->m_BL->selectedItems().isEmpty() ) - enableDeleteAction = !m_wlmAccount->serverSideContacts().contains( m_preferencesWidget->m_BL->selectedItems().at(0)->text() ); - - m_deleteActionBL->setEnabled( enableDeleteAction ); -} - -void WlmEditAccountWidget::deleteALItem() -{ - if ( m_wlmAccount && !m_preferencesWidget->m_AL->selectedItems().isEmpty() ) - { - QListWidgetItem *item = m_preferencesWidget->m_AL->selectedItems().at(0); - if ( !m_wlmAccount->serverSideContacts().contains( item->text() ) ) - { - m_deletedContactsAL.insert( item->text() ); - m_preferencesWidget->m_AL->takeItem( m_preferencesWidget->m_AL->row( item ) ); - } - } -} - -void WlmEditAccountWidget::deleteBLItem() -{ - if ( m_wlmAccount && !m_preferencesWidget->m_BL->selectedItems().isEmpty() ) - { - QListWidgetItem *item = m_preferencesWidget->m_BL->selectedItems().at(0); - if ( !m_wlmAccount->serverSideContacts().contains( item->text() ) ) - { - m_deletedContactsBL.insert( item->text() ); - m_preferencesWidget->m_BL->takeItem( m_preferencesWidget->m_BL->row( item ) ); - } - } -} - -void WlmEditAccountWidget::slotOpenRegister() -{ - KToolInvocation::invokeBrowser( "http://register.passport.net/" ); -} - diff --git a/protocols/wlm/ui/wlmeditaccountwidget.h b/protocols/wlm/ui/wlmeditaccountwidget.h deleted file mode 100644 index c705a6367..000000000 --- a/protocols/wlm/ui/wlmeditaccountwidget.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - wlmeditaccountwidget.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMEDITACCOUNTWIDGET_H -#define WLMEDITACCOUNTWIDGET_H - -#include -#include -#include - -namespace Kopete -{ - class Account; -} -namespace Ui -{ - class WlmAccountPreferences; -} -class WlmAccount; - -/** - * A widget for editing this protocol's accounts - * @author Will Stephenson -*/ -class WlmEditAccountWidget:public QWidget, - public KopeteEditAccountWidget -{ - Q_OBJECT public: - WlmEditAccountWidget (QWidget * parent, Kopete::Account * account); - - ~WlmEditAccountWidget (); - - /** - * Make an account out of the entered data - */ - virtual Kopete::Account * apply (); - /** - * Is the data correct? - */ - virtual bool validateData (); - -private slots: - void slotAllow(); - void slotBlock(); - void updateActionsAL(); - void updateActionsBL(); - void deleteALItem(); - void deleteBLItem(); - void slotOpenRegister(); - -private: - QSet m_deletedContactsAL; - QSet m_deletedContactsBL; - QAction* m_deleteActionAL; - QAction* m_deleteActionBL; - WlmAccount* m_wlmAccount; - Ui::WlmAccountPreferences * m_preferencesWidget; -}; - -#endif diff --git a/protocols/wlm/ui/wlminfo.ui b/protocols/wlm/ui/wlminfo.ui deleted file mode 100644 index bf383b3c1..000000000 --- a/protocols/wlm/ui/wlminfo.ui +++ /dev/null @@ -1,166 +0,0 @@ - - - WLMInfo - - - - 0 - 0 - 641 - 389 - - - - - - - - - - 0 - 0 - - - - Email address: - - - - - - - true - - - - - - - - 0 - 0 - - - - Display name: - - - - - - - true - - - - - - - Personal message: - - - - - - - true - - - - - - - - - Phones - - - - - - Work: - - - - - - - true - - - - - - - Home: - - - - - - - true - - - - - - - Mobile: - - - - - - - true - - - - - - - - - - Show whether you are on the contact list of this user - - - If this box is checked, you are on this user's contact list. -If not, the user has not added you to their list, or has removed you. - - - I am on &the contact list of this contact - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 40 - - - - - - - - m_id - m_displayName - m_personalMessage - m_phw - m_phh - m_phm - m_reversed - - - - diff --git a/protocols/wlm/wlmaccount.cpp b/protocols/wlm/wlmaccount.cpp deleted file mode 100644 index 610201589..000000000 --- a/protocols/wlm/wlmaccount.cpp +++ /dev/null @@ -1,1547 +0,0 @@ -/* - wlmaccount.cpp - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#include "wlmaccount.h" - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "kopetechatsessionmanager.h" -#include "kopetemetacontact.h" -#include "kopetecontactlist.h" -#include "kopetegroup.h" -#include "kopetepassword.h" -#include "kopeteuiglobal.h" -#include "kopetepicture.h" -#include "kopeteutils.h" -#include "kopetetransfermanager.h" -#include "kopeteidentity.h" -#include "kopeteavatarmanager.h" -#include "kopeteaddedinfoevent.h" - -#include "wlmcontact.h" -#include "wlmprotocol.h" -#include "wlmchatsession.h" - -WlmAccount::WlmAccount (WlmProtocol * parent, const QString & accountID): -Kopete::PasswordedAccount (parent, accountID.toLower ()), -m_server (NULL), -m_transferManager (NULL), -m_chatManager (NULL), -clientid (0), -m_lastMainConnectionError(Callbacks::NoError) -{ - // Init the myself contact - setMyself (new - WlmContact (this, accountId (), accountId (), - Kopete::ContactList::self ()->myself ())); - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmOffline); - clientid += MSN::MSNC7; - clientid += MSN::SupportWinks; - clientid += MSN::VoiceClips; - clientid += MSN::InkGifSupport; - clientid += MSN::SIPInvitations; - clientid += MSN::SupportMultiPacketMessaging; - - m_openInboxAction = new QAction(QIcon::fromTheme(QStringLiteral("mail-folder-inbox")), i18n("Open Inbo&x..."), this); - QObject::connect(m_openInboxAction, SIGNAL(triggered(bool)), this, SLOT(slotOpenInbox())); - - m_changeDNAction = new QAction(i18n("&Change Display Name..."), this); - QObject::connect(m_changeDNAction, SIGNAL(triggered(bool)), this, SLOT(slotChangePublicName())); - -// m_startChatAction = new QAction(QIcon::fromTheme(QStringLiteral("mail-message-new")), i18n("&Start Chat..."), this); -// QObject::connect(m_startChatAction, SIGNAL(triggered(bool)), this, SLOT(slotStartChat())); - - m_openStatusAction = new QAction(i18n("Open MS&N service status site..."), this); - QObject::connect(m_openStatusAction, SIGNAL(triggered(bool)), this, SLOT(slotOpenStatus())); - - tmpMailFile = 0L; - m_tmpMailFileTimer = new QTimer(); - QObject::connect(m_tmpMailFileTimer, SIGNAL(timeout()), this, SLOT(slotRemoveTmpMailFile())); -} - -WlmAccount::~WlmAccount () -{ - slotRemoveTmpMailFile(); - delete m_tmpMailFileTimer; - disconnect (); -} - -void -WlmAccount::fillActionMenu (KActionMenu * actionMenu) -{ - Kopete::Account::fillActionMenu (actionMenu); - const bool connected = isConnected(); - m_openInboxAction->setEnabled(connected); -// m_startChatAction->setEnabled(connected); - m_changeDNAction->setEnabled(connected); - - actionMenu->addSeparator(); - - actionMenu->addAction(m_changeDNAction); -// actionMenu->addAction(m_startChatAction); - - actionMenu->addAction(m_openInboxAction); - actionMenu->addAction(m_openStatusAction); -} - -bool -WlmAccount::createContact (const QString & contactId, - Kopete::MetaContact * parentContact) -{ - if ( !m_server ) - return false; - - kDebug() << "contact " << contactId; - WlmContact *newContact = new WlmContact (this, contactId, QString(), parentContact); - - if (parentContact->isTemporary()) - return true; - - if (m_serverSideContactsPassports.contains(contactId)) - { - kDebug() << "contact " << contactId << " already on server list. Do nothing."; - return true; - } - - QString groupName; - Kopete::GroupList kopeteGroups = parentContact->groups(); //get the group list - - if (kopeteGroups.isEmpty() || kopeteGroups.first() == Kopete::Group::topLevel()) - groupName = i18n("Buddies"); - else - groupName = kopeteGroups.first() ? kopeteGroups.first()->displayName() : i18n("Buddies"); - - // emergency exit, should never occur - if (groupName.isEmpty()) - return false; - - m_contactAddQueue.insert(contactId, groupName); - if (!m_groupToGroupId.contains(groupName)) - { - kDebug() << "group \'" << groupName << "\' not found adding group"; - m_server->cb.mainConnection->addGroup (groupName.toUtf8().constData()); - } - else - { - kDebug() << "group \'" << groupName << "\' found adding contact"; - m_server->cb.mainConnection->addToAddressBook (contactId.toLatin1().constData(), contactId.toUtf8().constData()); - } - - return newContact != 0L; -} - -void WlmAccount::setPersonalMessage (const Kopete::StatusMessage & reason) -{ - kDebug (14210) << k_funcinfo; - myself()->setStatusMessage(reason); - if (isConnected ()) - { - MSN::personalInfo pInfo; - pInfo.mediaIsEnabled = 0; - if (reason.message().isEmpty ()) - pInfo.PSM = ""; - else - pInfo.PSM = reason.message().toUtf8().constData(); - - // we have both artist and title - if( reason.hasMetaData("artist") && reason.hasMetaData("title") ) - { - pInfo.mediaIsEnabled = 1; - pInfo.mediaType="Music"; - pInfo.mediaLines.push_back( reason.metaData("artist").toString().toUtf8().constData() ); - pInfo.mediaLines.push_back( reason.metaData("title").toString().toUtf8().constData() ); - pInfo.mediaFormat="{0} - {1}"; - m_server->cb.mainConnection->setPersonalStatus (pInfo); - return; - } - - // we have only the title - if( reason.hasMetaData("title") ) - { - pInfo.mediaIsEnabled = 1; - pInfo.mediaType="Music"; - pInfo.mediaFormat="{0}"; - pInfo.mediaLines.push_back( reason.metaData("title").toString().toUtf8().constData() ); - m_server->cb.mainConnection->setPersonalStatus (pInfo); - return; - } - m_server->cb.mainConnection->setPersonalStatus (pInfo); - } -} - -void -WlmAccount::setOnlineStatus (const Kopete::OnlineStatus & status, - const Kopete::StatusMessage & reason, - const OnlineStatusOptions& /*options*/) -{ - kDebug (14210) << k_funcinfo; - - setPersonalMessage(reason); - - temporaryStatus = status; - - if (status == WlmProtocol::protocol ()->wlmConnecting && - myself ()->onlineStatus () == WlmProtocol::protocol ()->wlmOffline) - slotGoOnline (); - else if (status == WlmProtocol::protocol ()->wlmOnline || status.status () == Kopete::OnlineStatus::Online) - slotGoOnline (); - else if (status == WlmProtocol::protocol ()->wlmOffline) - slotGoOffline (); - else if (status == WlmProtocol::protocol ()->wlmInvisible) - slotGoInvisible (); - else if (status.status () == Kopete::OnlineStatus::Away || - status.status () == Kopete::OnlineStatus::Busy) - slotGoAway (status); -} - -void -WlmAccount::setStatusMessage (const Kopete::StatusMessage & statusMessage) -{ - setPersonalMessage(statusMessage); -} - -void -WlmAccount::slotChangePublicName() -{ - if ( !isConnected() ) - { - return; - //TODO: change it anyway, and sync at the next connection - } - - bool ok; - const QString name = KInputDialog::getText( i18n( "Change Display Name - MSN Plugin" ), //TODO rename MSN to WLM (see also following strings) - i18n( "Enter the new display name by which you want to be visible to your friends on MSN:" ), - myself()->displayName(), &ok ); - - if ( ok ) - { - if ( name.length() > 387 ) - { - KMessageBox::error( Kopete::UI::Global::mainWidget(), - i18n( "The display name you entered is too long. Please use a shorter name.\n" - "Your display name has not been changed." ), - i18n( "Change Display Name - MSN Plugin" ) ); - return; - } - - m_server->cb.mainConnection->setFriendlyName(name.toUtf8().constData(), true); - } -} - -void -WlmAccount::slotOpenInbox() -{ - if (isConnected ()) - m_server->cb.mainConnection->getInboxUrl (); -} - -void -WlmAccount::slotOpenStatus() -{ - KToolInvocation::invokeBrowser(QLatin1String("http://messenger.msn.com/Status.aspx")) ; -} - -void -WlmAccount::connectWithPassword (const QString & pass) -{ - kDebug (14210) << k_funcinfo; - if (myself ()->onlineStatus () != WlmProtocol::protocol ()->wlmOffline) - return; - - if (pass.isEmpty ()) - { - // User has cancelled password prompt. - return; - } - - password ().setWrong (false); - - QString id = accountId (); - QString pass1 = pass; - - enableInitialList (); - - m_lastMainConnectionError = Callbacks::NoError; - m_server = new WlmServer (this, id, pass1); - m_server->WlmConnect ( serverName(), serverPort() ); - - m_transferManager = new WlmTransferManager (this); - - m_chatManager = new WlmChatManager (this); - - QObject::connect (&m_server->cb, SIGNAL (connectionCompleted()), - this, SLOT (connectionCompleted())); - QObject::connect (&m_server->cb, SIGNAL (connectionFailed()), - this, SLOT (connectionFailed())); - QObject::connect (&m_server->cb, SIGNAL(socketError(int)), - this, SLOT(error(int))); - QObject::connect (&m_server->cb, SIGNAL(mainConnectionError(int)), - this, SLOT(mainConnectionError(int))); - QObject::connect (&m_server->cb, - SIGNAL (gotDisplayName(QString)), this, - SLOT (gotDisplayName(QString))); - QObject::connect (&m_server->cb, - SIGNAL (receivedOIMList - (std::vector < MSN::eachOIM > &)), this, - SLOT (receivedOIMList - (std::vector < MSN::eachOIM > &))); - QObject::connect (&m_server->cb, - SIGNAL (receivedOIM(QString,QString)), - this, - SLOT (receivedOIM(QString,QString))); - - QObject::connect (&m_server->cb, - SIGNAL (deletedOIM(QString,bool)), this, - SLOT (deletedOIM(QString,bool))); - QObject::connect (&m_server->cb, - SIGNAL (NotificationServerConnectionTerminated - (MSN::NotificationServerConnection *)), this, - SLOT (NotificationServerConnectionTerminated - (MSN::NotificationServerConnection *))); - QObject::connect (&m_server->cb, SIGNAL (initialEmailNotification(int)), this, - SLOT (slotInitialEmailNotification(int))); - QObject::connect (&m_server->cb, SIGNAL (newEmailNotification(QString,QString)), this, - SLOT (slotNewEmailNotification(QString,QString))); - QObject::connect (&m_server->cb, SIGNAL (inboxUrl(MSN::hotmailInfo&)), this, - SLOT (slotInboxUrl(MSN::hotmailInfo&))); - - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmConnecting); -} - -QString WlmAccount::serverName() const -{ - return configGroup()->readEntry( "serverName" , "messenger.hotmail.com" ); -} - -uint WlmAccount::serverPort() const -{ - return configGroup()->readEntry( "serverPort" , 1863 ); -} - -QString WlmAccount::proxyUsername() const -{ - return configGroup()->readEntry( "proxyUsername" ); -} - -QString WlmAccount::proxyPassword() const -{ - return configGroup()->readEntry( "proxyPassword" ); -} - -QString WlmAccount::proxyHost() const -{ - return configGroup()->readEntry( "proxyHost" ); -} - -uint WlmAccount::proxyType() const -{ - return configGroup()->readEntry( "proxyType", 0 ); -} - -uint WlmAccount::proxyPort() const -{ - return configGroup()->readEntry( "proxyPort", 8080 ); -} - -bool WlmAccount::isProxyEnabled() const -{ - return configGroup()->readEntry( "enableProxy", false ); -} - -bool WlmAccount::doNotRequestEmoticons() const -{ - return configGroup()->readEntry( "doNotRequestEmoticons", false ); -} - -bool WlmAccount::doNotSendEmoticons() const -{ - return configGroup()->readEntry( "doNotSendEmoticons", false ); -} - -void -WlmAccount::gotNewContact (const MSN::ContactList & list, - const QString & passport, - const QString & friendlyname) -{ - kDebug() << "contact " << passport; - if (list == MSN::LST_RL) - { - kDebug() << "contact " << passport << " added to reverse list"; - m_reverseList.insert(passport); - Kopete::AddedInfoEvent* event = new Kopete::AddedInfoEvent(passport, this); - QObject::connect(event, SIGNAL(actionActivated(uint)), this, SLOT(addedInfoEventActionActivated(uint))); - - Kopete::AddedInfoEvent::ShowActionOptions actions = Kopete::AddedInfoEvent::AuthorizeAction; - actions |= Kopete::AddedInfoEvent::BlockAction; - //actions |= Kopete::AddedInfoEvent::InfoAction; - - WlmContact * ct = qobject_cast(contacts().value(passport)); - if (!ct || !ct->metaContact() || ct->metaContact()->isTemporary()) - actions |= Kopete::AddedInfoEvent::AddAction; - - event->setContactNickname(friendlyname); - event->showActions(actions); - event->sendEvent(); - } - else if (list == MSN::LST_BL) - { - kDebug() << "contact " << passport << " added to block list"; - m_allowList.remove(passport); - m_blockList.insert(passport); - WlmContact * ct = qobject_cast(contacts().value(passport)); - if(ct) - ct->setOnlineStatus(ct->onlineStatus()); - } - else if (list == MSN::LST_AL) - { - kDebug() << "contact " << passport << " added to allow list"; - m_blockList.remove(passport); - m_allowList.insert(passport); - WlmContact * ct = qobject_cast(contacts().value(passport)); - if(ct) - ct->setOnlineStatus(ct->onlineStatus()); - } -} - -void WlmAccount::gotRemovedContactFromList (const MSN::ContactList & list, const QString & contact) -{ - kDebug() << "contact " << contact; - if (list == MSN::LST_BL) - { - kDebug() << "contact " << contact << " removed from block list"; - m_blockList.remove( contact ); - } - else if (list == MSN::LST_AL) - { - kDebug() << "contact " << contact << " removed from allow list"; - m_allowList.remove( contact ); - } - else if (list == MSN::LST_RL) - { - kDebug() << "contact " << contact << " removed from reverse list"; - m_reverseList.remove( contact ); - // force overlayIcons to be updated - WlmContact * ct = qobject_cast(contacts().value( contact )); - if(ct) - ct->setOnlineStatus(ct->onlineStatus()); - } -} - -void WlmAccount::addedInfoEventActionActivated(uint actionId) -{ - Kopete::AddedInfoEvent *event = qobject_cast(sender()); - if (!event || !isConnected()) - return; - - switch (actionId) - { - case Kopete::AddedInfoEvent::AddContactAction: - event->addContact(); - break; - case Kopete::AddedInfoEvent::AuthorizeAction: - blockContact(event->contactId(), false); - break; - case Kopete::AddedInfoEvent::BlockAction: - if (isOnAllowList(event->contactId())) - server()->mainConnection->removeFromList(MSN::LST_AL, event->contactId().toLatin1().constData()); - if(!isOnBlockList(event->contactId())) - server()->mainConnection->addToList(MSN::LST_BL, event->contactId().toLatin1().constData()); - break; -/* case Kopete::AddedInfoEvent::InfoAction: - break;*/ - } -} - -void -WlmAccount::mainConnectionError(int errorCode) -{ - kDebug (14210) << k_funcinfo; - m_lastMainConnectionError = errorCode; -} - -void -WlmAccount::scheduleConnect () -{ - connect (temporaryStatus); -} - -void -WlmAccount::gotDisplayPicture (const QString & contactId, - const QString & filename) -{ - // FIXME: Why we get local file and not just QByteArray data? - kDebug (14210) << k_funcinfo; - WlmContact * contact = qobject_cast(contacts().value(contactId)); - if (contact) - { - // remove from pending display pictures list if applicable - m_pendingDisplayPictureList.remove(contactId); - - // check file integrity (SHA1D) - QDomDocument xmlobj; - xmlobj.setContent (contact->getMsnObj()); - QString SHA1D_orig = xmlobj.documentElement ().attribute ("SHA1D"); - - QFile f(filename); - QByteArray avatarData; - if (f.exists() && f.size() > 0 && f.open(QIODevice::ReadOnly)) - { - avatarData = f.readAll(); - f.close(); - } - QFile::remove(filename); - - if (!avatarData.isEmpty() && !SHA1D_orig.isEmpty() && - SHA1D_orig == QCryptographicHash::hash(avatarData, QCryptographicHash::Sha1).toBase64()) - { - QImage img; - img.loadFromData(avatarData); - - Kopete::AvatarManager::AvatarEntry entry; - entry.name = contact->contactId(); - entry.category = Kopete::AvatarManager::Contact; - entry.contact = contact; - entry.image = img; - entry = Kopete::AvatarManager::self()->add(entry); - if (!entry.dataPath.isNull()) - { - contact->removeProperty(Kopete::Global::Properties::self()->photo()); - contact->setProperty(Kopete::Global::Properties::self()->photo(), entry.dataPath); - contact->setProperty(WlmProtocol::protocol()->displayPhotoSHA1, SHA1D_orig); - } - } - else - { - contact->removeProperty(WlmProtocol::protocol()->displayPhotoSHA1); - contact->removeProperty(Kopete::Global::Properties::self()->photo()); - } - } -} - -void -WlmAccount::gotDisplayName (const QString & displayName) -{ - kDebug (14210) << k_funcinfo; - myself ()->setNickName (displayName); -} - -void -WlmAccount::gotContactPersonalInfo (const QString & fromPassport, - const MSN::personalInfo & pInfo) -{ - kDebug (14210) << k_funcinfo; - WlmContact * contact = qobject_cast(contacts().value(fromPassport)); - if (contact) - { - // TODO - handle the other fields of pInfo - contact->setStatusMessage(Kopete::StatusMessage(WlmUtils::utf8(pInfo.PSM))); - QString type(WlmUtils::utf8(pInfo.mediaType)); - if (pInfo.mediaIsEnabled && type == "Music") - { - QString song_line (WlmUtils::utf8(pInfo.mediaFormat)); - int num = pInfo.mediaLines.size (); - for (int i = 0; i < num; i++) - { - song_line.replace ('{' + QString::number (i) + '}', WlmUtils::utf8(pInfo.mediaLines[i])); - } - contact->setProperty (WlmProtocol::protocol ()->currentSong, song_line); - } - else - { - contact->removeProperty (WlmProtocol::protocol ()->currentSong); - } - } -} - -void -WlmAccount::contactChangedStatus (const QString & buddy, - const QString & friendlyname, - const MSN::BuddyStatus & state, - const unsigned int &clientID, - const QString & msnobject) -{ - kDebug (14210) << k_funcinfo; - WlmContact *contact = qobject_cast(contacts().value(buddy)); - if (contact) - { - contact->setNickName (friendlyname); - - // set contact properties - contact->setProperty (WlmProtocol::protocol ()->contactCapabilities, QString::number(clientID)); - - if (state == MSN::STATUS_AWAY) - contact->setOnlineStatus (WlmProtocol::protocol ()->wlmAway); - else if (state == MSN::STATUS_AVAILABLE) - contact->setOnlineStatus (WlmProtocol::protocol ()->wlmOnline); - else if (state == MSN::STATUS_INVISIBLE) - contact->setOnlineStatus (WlmProtocol::protocol ()->wlmInvisible); - else if (state == MSN::STATUS_BUSY) - contact->setOnlineStatus (WlmProtocol::protocol ()->wlmBusy); - else if (state == MSN::STATUS_OUTTOLUNCH) - contact->setOnlineStatus (WlmProtocol::protocol ()-> - wlmOutToLunch); - else if (state == MSN::STATUS_ONTHEPHONE) - contact->setOnlineStatus (WlmProtocol::protocol ()-> - wlmOnThePhone); - else if (state == MSN::STATUS_BERIGHTBACK) - contact->setOnlineStatus (WlmProtocol::protocol ()-> - wlmBeRightBack); - else if (state == MSN::STATUS_IDLE) - contact->setOnlineStatus (WlmProtocol::protocol ()->wlmIdle); - - qobject_cast (contact)->setMsnObj(msnobject); - - if (msnobject.isEmpty () || msnobject == "0") // no picture - { - contact->removeProperty(WlmProtocol::protocol()->displayPhotoSHA1); - contact->removeProperty(Kopete::Global::Properties::self()->photo()); - return; - } - - QDomDocument xmlobj; - xmlobj.setContent (msnobject); - - // track display pictures by SHA1D field - QString SHA1D = xmlobj.documentElement ().attribute ("SHA1D"); - - if (SHA1D.isEmpty ()) - return; - - QString currentSHA1D = contact->property(WlmProtocol::protocol()->displayPhotoSHA1).value().toString(); - QString photoPath = contact->property(Kopete::Global::Properties::self()->photo().key()).value().toString(); - if (SHA1D == currentSHA1D && QFileInfo(photoPath).size() > 0) - return; - - // do not request all pictures at once when you are just connected - if (isInitialList ()) - { - // schedule to retrieve this picture later - m_pendingDisplayPictureList.insert(buddy); - return; - } - - if ((myself ()->onlineStatus () != - WlmProtocol::protocol ()->wlmOffline) - && (myself ()->onlineStatus () != - WlmProtocol::protocol ()->wlmInvisible) - && (myself ()->onlineStatus () != - WlmProtocol::protocol ()->wlmUnknown)) - { - // do not open many switchboards in a short period of time - if(!m_recentDPRequests.contains(buddy)) - { - m_recentDPRequests.append(buddy); - QTimer::singleShot(10 * 1000, this, SLOT(slotRemoveRecentDPRequests())); - chatManager ()->requestDisplayPicture(buddy); - } - } - } -} - -void -WlmAccount::contactDisconnected (const QString & buddy) -{ - kDebug (14210) << k_funcinfo; - WlmContact * contact = qobject_cast(contacts().value(buddy)); - if (contact) - { - contact->setOnlineStatus (WlmProtocol::protocol ()->wlmOffline); - } -} - -void -WlmAccount::groupListReceivedFromServer (std::map < std::string, MSN::Group > &list) -{ - kDebug (14210) << k_funcinfo; - // add server groups on local list - std::map < std::string, MSN::Group >::iterator it; - for (it = list.begin (); it != list.end (); ++it) // groups from server - { - MSN::Group * g = &(*it).second; - - QString gName = WlmUtils::utf8(g->name); - Kopete::Group * b = Kopete::ContactList::self ()->findGroup(gName); - if (!b) - { - b = new Kopete::Group(gName); - Kopete::ContactList::self ()->addGroup( b ); - } - - m_groupToGroupId.insert(gName, WlmUtils::latin1(g->groupID)); - } -/* - // remove local groups which are not on server - QPtrList::Iterator it1 = Kopete::ContactList::self()->groups().begin(); - Kopete::Group *group; - for ( group = Kopete::ContactList::self()->groups().first(); group; group = Kopete::ContactList::self()->groups().next() ) - { - bool ok=false; - std::map::iterator it; - for ( it = list.begin(); it != list.end(); ++it ) // groups from server - { - MSN::Group *g = &(*it).second; - if(Kopete::ContactList::self()->findGroup(WlmUtils::utf8(g->name))) - ok=true; - } - if(!ok) - { - if(!group->members().count()) - Kopete::ContactList::self()->removeGroup(group); - } - } -*/ -} - -void -WlmAccount::addressBookReceivedFromServer (std::map < std::string, - MSN::Buddy * >&list) -{ - kDebug (14210) << k_funcinfo; - - // Clear server side passports - m_serverSideContactsPassports.clear (); - m_allowList.clear(); - m_blockList.clear(); - m_pendingList.clear(); - m_reverseList.clear(); - - // local contacts which do not exist on server should be deleted - std::map < std::string, MSN::Buddy * >::iterator it; - for (it = list.begin (); it != list.end (); ++it) - { - Kopete::MetaContact * metacontact = 0L; - MSN::Buddy * b = (*it).second; - QString passport = WlmUtils::passport(b->userName); - - if (b->lists & MSN::LST_AB) - m_serverSideContactsPassports.insert(passport); - if ( b->lists & MSN::LST_AL ) - m_allowList.insert( passport ); - if ( b->lists & MSN::LST_BL ) - m_blockList.insert( passport ); - if ( b->lists & MSN::LST_PL ) - m_pendingList.insert( passport ); - if ( b->lists & MSN::LST_RL ) - m_reverseList.insert(passport); - - // disabled users (not in list) - if(b->properties["isMessengerUser"] == "false") - { - // disable this contact - WlmContact *contact = qobject_cast(contacts().value( passport )); - if (!contact) - { - addContact (passport, QString(), Kopete::Group::topLevel (), Kopete::Account::DontChangeKABC); - contact = qobject_cast(contacts().value( passport )); - } - if(contact) - { - contact->setContactSerial(WlmUtils::latin1(b->properties["contactId"])); - contact->setCurrentGroup(Kopete::Group::topLevel()); - contact->setDisabled(true, false); - } - continue; - } - - if ( !contacts().value( passport ) ) - { - if (!b->friendlyName.length ()) - b->friendlyName = b->userName; - - std::list < MSN::Group * >::iterator i = b->groups.begin (); - - // no groups, add to top level - if (!b->groups.size ()) - { - // only add users in forward list - if (b->lists & MSN::LST_AB) - { - metacontact = addContact (passport, QString(), Kopete::Group::topLevel (), Kopete::Account::DontChangeKABC); - - WlmContact * newcontact = qobject_cast(contacts().value(passport)); - if(!newcontact) - return; - - newcontact->setNickName (WlmUtils::utf8(b->friendlyName)); - } - - if (metacontact) - { - WlmContact *contact = qobject_cast(contacts().value( passport )); - if (contact) - { - contact->setContactSerial(WlmUtils::latin1(b->properties["contactId"])); - kDebug (14210) << "ContactID: " << WlmUtils::latin1(b->properties["contactId"]); - } - } - continue; - } - - for (; i != b->groups.end (); ++i) - { - Kopete::Group * g = Kopete::ContactList::self ()->findGroup (WlmUtils::utf8((*i)->name)); - - if (g) - metacontact = addContact (passport, QString(), g, Kopete::Account::DontChangeKABC); - else - metacontact = addContact (passport, QString(), Kopete::Group::topLevel (), Kopete::Account::DontChangeKABC); - - if (metacontact) - { - WlmContact *contact = qobject_cast(contacts().value( passport )); - if (contact) - { - contact->setNickName(WlmUtils::utf8(b->friendlyName)); - contact->setContactSerial(WlmUtils::latin1(b->properties["contactId"])); - kDebug (14210) << "ContactID: " << WlmUtils::latin1(b->properties["contactId"]); - } - } - } - } - else - { - // check if this contact has changed groups while we were offline. - // users in the toplevel group on server side - if( b->groups.size() == 0) - { - Kopete::Group *current = contacts().value( passport )->metaContact()->groups().first(); - // the contact has no group, so put it on top level group - if(current != Kopete::Group::topLevel ()) - { - contacts().value( passport )->metaContact()-> - moveToGroup(current, Kopete::Group::topLevel ()); - qobject_cast(contacts().value( passport ))->setCurrentGroup(Kopete::Group::topLevel()); - } - continue; - } - // users in only one group on server side - if( b->groups.size() == 1) - { - // users in only one group in the local list - if(contacts().value( passport )->metaContact()->groups().size() == 1) - { - Kopete::Group *current = contacts().value( passport )->metaContact()->groups().first(); - Kopete::Group *newgroup = Kopete::ContactList::self ()->findGroup(WlmUtils::utf8(b->groups.front()->name)); - - if(!current || !newgroup) - continue; - - if(current != newgroup) - { - contacts().value( passport )->metaContact()->moveToGroup(current, newgroup); - qobject_cast(contacts().value( passport ))->setCurrentGroup(newgroup); - } - } - } - } - } -} - -void -WlmAccount::slotGlobalIdentityChanged (Kopete::PropertyContainer *, - const QString & key, const QVariant &, - const QVariant & newValue) -{ - kDebug (14210) << k_funcinfo; - if (key == Kopete::Global::Properties::self ()->photo ().key ()) - { - m_pictureFilename = newValue.toString (); - // TODO - Set no photo on server - if (m_pictureFilename.isEmpty ()) - { - myself()->removeProperty(Kopete::Global::Properties::self()->photo ()); - if(m_server && isConnected ()) - { - m_server->cb.mainConnection->change_DisplayPicture (""); - setOnlineStatus (myself ()->onlineStatus ()); - } - return; - } - - QImage contactPhoto = QImage( m_pictureFilename ); - Kopete::AvatarManager::AvatarEntry entry; - entry.name = myself ()->contactId(); - entry.image = contactPhoto; - entry.category = Kopete::AvatarManager::Contact; - entry.contact = myself(); - entry = Kopete::AvatarManager::self()->add(entry); - - kDebug (14140) << k_funcinfo << m_pictureFilename; - if(!entry.path.isNull()) - { - if(m_server) - m_server->cb.mainConnection->change_DisplayPicture(QFile::encodeName(entry.path).constData()); - - myself()->setProperty(Kopete::Global::Properties::self()->photo (), entry.path); - } - setOnlineStatus (myself ()->onlineStatus ()); - } - else if (key == Kopete::Global::Properties::self ()->nickName ().key ()) - { - QString oldNick = - myself ()->property (Kopete::Global::Properties::self ()-> - nickName ()).value ().toString (); - QString newNick = newValue.toString (); - - if (newNick != oldNick) - { - if(m_server && isConnected()) - m_server->cb.mainConnection->setFriendlyName (newNick.toUtf8().constData()); - } - } -} - -void -WlmAccount::changedStatus (MSN::BuddyStatus & state) -{ - kDebug (14210) << k_funcinfo; - if (state == MSN::STATUS_AWAY) - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmAway); - else if (state == MSN::STATUS_AVAILABLE) - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmOnline); - else if (state == MSN::STATUS_INVISIBLE) - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmInvisible); - else if (state == MSN::STATUS_BUSY) - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmBusy); - else if (state == MSN::STATUS_OUTTOLUNCH) - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmOutToLunch); - else if (state == MSN::STATUS_ONTHEPHONE) - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmOnThePhone); - else if (state == MSN::STATUS_BERIGHTBACK) - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmBeRightBack); - if (state == MSN::STATUS_IDLE) - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmIdle); - -} - -void -WlmAccount::connectionFailed () -{ - kDebug (14210) << k_funcinfo; - logOff( Kopete::Account::Unknown ); - Kopete::Utils::notifyCannotConnect (this); -} - -void -WlmAccount::connectionCompleted () -{ - kDebug (14210) << k_funcinfo; - - // set all users as offline - foreach ( Kopete::Contact *kc , contacts() ) - { - WlmContact *c = static_cast( kc ); - c->setOnlineStatus (WlmProtocol::protocol ()->wlmOffline); - } - - if (identity ()->hasProperty (Kopete::Global::Properties::self ()->photo ().key())) - { - m_server->cb.mainConnection->change_DisplayPicture(QFile::encodeName(identity()->customIcon()).constData()); - QImage contactPhoto = QImage( identity ()->customIcon() ); - Kopete::AvatarManager::AvatarEntry entry; - entry.name = myself ()->contactId(); - entry.image = contactPhoto; - entry.category = Kopete::AvatarManager::Contact; - entry.contact = myself(); - entry = Kopete::AvatarManager::self()->add(entry); - if(!entry.path.isNull()) - myself()->setProperty(Kopete::Global::Properties::self()->photo (), entry.path); - } - - if ( identity()->hasProperty( Kopete::Global::Properties::self()->nickName().key() )) - { - // use the identity nickname instead of the one stored on the server side - QString nick = identity()->property( - Kopete::Global::Properties::self()->nickName()).value().toString(); - m_server->cb.mainConnection->setFriendlyName(nick.toUtf8().constData()); - } - else - { - // Set myself contact display name here - // This information come along with the address book - // Fix BUG 182366 - m_server->cb.mainConnection->setFriendlyName( m_server->mainConnection->myDisplayName ); - } - - password ().setWrong (false); - - QObject::connect (&m_server->cb, - SIGNAL (changedStatus(MSN::BuddyStatus&)), this, - SLOT (changedStatus(MSN::BuddyStatus&))); - - QObject::connect (&m_server->cb, - SIGNAL (contactChangedStatus - (const QString &, const QString &, - const MSN::BuddyStatus &, const unsigned int &, - const QString &)), this, - SLOT (contactChangedStatus - (const QString &, const QString &, - const MSN::BuddyStatus &, const unsigned int &, - const QString &))); - - QObject::connect (&m_server->cb, - SIGNAL (contactDisconnected(QString)), - this, - SLOT (contactDisconnected(QString))); - - QObject::connect (identity (), - SIGNAL (propertyChanged - (Kopete::PropertyContainer *, const QString &, - const QVariant &, const QVariant &)), - SLOT (slotGlobalIdentityChanged - (Kopete::PropertyContainer *, const QString &, - const QVariant &, const QVariant &))); - - QObject::connect (&m_server->cb, - SIGNAL (gotDisplayPicture - (const QString &, const QString &)), - SLOT (gotDisplayPicture - (const QString &, const QString &))); - - QObject::connect (&m_server->cb, - SIGNAL (gotContactPersonalInfo - (const QString &, - const MSN::personalInfo &)), - SLOT (gotContactPersonalInfo - (const QString &, - const MSN::personalInfo &))); - - QObject::connect (&m_server->cb, SIGNAL(gotNewContact(MSN::ContactList,QString,QString)), - SLOT (gotNewContact(MSN::ContactList,QString,QString))); - - QObject::connect (&m_server->cb, SIGNAL(gotRemovedContactFromList(MSN::ContactList,QString)), - this, SLOT(gotRemovedContactFromList(MSN::ContactList,QString)) ); - - QObject::connect (&m_server->cb, SIGNAL(gotAddedContactToGroup(bool,QString,QString)), - this, SLOT(gotAddedContactToGroup(bool,QString,QString)) ); - - QObject::connect (&m_server->cb, SIGNAL(gotRemovedContactFromGroup(bool,QString,QString)), - this, SLOT(gotRemovedContactFromGroup(bool,QString,QString)) ); - - QObject::connect (&m_server->cb, SIGNAL(gotAddedGroup(bool,QString,QString)), - this, SLOT(gotAddedGroup(bool,QString,QString)) ); - - QObject::connect (&m_server->cb, SIGNAL(gotRemovedGroup(bool,QString)), - this, SLOT(gotRemovedGroup(bool,QString)) ); - - QObject::connect (&m_server->cb, SIGNAL(gotAddedContactToAddressBook(bool,QString,QString,QString)), - this, SLOT(gotAddedContactToAddressBook(bool,QString,QString,QString))); - - QObject::connect (&m_server->cb, SIGNAL(gotRemovedContactFromAddressBook(bool,QString,QString)), - this, SLOT(gotRemovedContactFromAddressBook(bool,QString,QString))); - - MSN::BuddyStatus state = MSN::STATUS_AVAILABLE; - - if (temporaryStatus == WlmProtocol::protocol ()->wlmOnline) - state = MSN::STATUS_AVAILABLE; - else if (temporaryStatus == WlmProtocol::protocol ()->wlmAway) - state = MSN::STATUS_AWAY; - else if (temporaryStatus == WlmProtocol::protocol ()->wlmInvisible) - state = MSN::STATUS_INVISIBLE; - else if (temporaryStatus == WlmProtocol::protocol ()->wlmBusy) - state = MSN::STATUS_BUSY; - else if (temporaryStatus == WlmProtocol::protocol ()->wlmOutToLunch) - state = MSN::STATUS_OUTTOLUNCH; - else if (temporaryStatus == WlmProtocol::protocol ()->wlmOnThePhone) - state = MSN::STATUS_ONTHEPHONE; - else if (temporaryStatus == WlmProtocol::protocol ()->wlmBeRightBack) - state = MSN::STATUS_BERIGHTBACK; - - m_server->cb.mainConnection->setState (state, clientid); - // this prevents our client from downloading display pictures - // when is just connected. - QTimer::singleShot (10 * 1000, this, SLOT (disableInitialList())); - setPersonalMessage(myself()->statusMessage()); - - // download a pending picture every 20 seconds - m_pendingDisplayPicturesTimer = new QTimer(this); - - QObject::connect(m_pendingDisplayPicturesTimer, SIGNAL(timeout()), - this, SLOT(downloadPendingDisplayPicture())); - - m_pendingDisplayPicturesTimer->start(30 * 1000); - - // manage pending list - foreach ( const QString &contact, pendingList() ) - { - // if we do not have this contact yet, so ask for add it - if(!isOnServerSideList(contact) && - !isOnAllowList(contact) && - !isOnBlockList(contact)) - { - // fake this contact in RL to prompt the user to add it - gotNewContact (MSN::LST_RL, contact, contact); - } - } -} - -void WlmAccount::downloadPendingDisplayPicture() -{ - if(!m_pendingDisplayPicturesTimer) - return; - - if (m_pendingDisplayPictureList.isEmpty()) - { - m_pendingDisplayPicturesTimer->stop(); - m_pendingDisplayPicturesTimer->deleteLater(); - m_pendingDisplayPicturesTimer = NULL; - return; - } - - QString passport = m_pendingDisplayPictureList.toList().first(); - m_pendingDisplayPictureList.remove(passport); - - WlmContact * contact = qobject_cast(contacts().value(passport)); - if(!contact) - return; - - // we only download the display picture if we and the contact are online - if ((myself ()->onlineStatus () != WlmProtocol::protocol ()->wlmOffline) - && (myself ()->onlineStatus () != WlmProtocol::protocol ()->wlmInvisible) - && (myself ()->onlineStatus () != WlmProtocol::protocol ()->wlmUnknown) - && (contact->onlineStatus () != WlmProtocol::protocol ()->wlmOffline) - && (contact->onlineStatus () != WlmProtocol::protocol ()->wlmInvisible) - && (contact->onlineStatus () != WlmProtocol::protocol ()->wlmUnknown)) - - { - // do not open many switchboards in a short period of time - if(!m_recentDPRequests.contains(passport)) - { - m_recentDPRequests.append(passport); - QTimer::singleShot(10 * 1000, this, SLOT(slotRemoveRecentDPRequests())); - chatManager ()->requestDisplayPicture (passport); - } - } -} - -void -WlmAccount::slotInitialEmailNotification (const int unread_inbox) -{ - if ( isBusy() ) - return; - - KNotification *notification= new KNotification ("msn_mail", Kopete::UI::Global::mainWidget()); - - notification->setText(i18np( "You have one unread message in your Hotmail inbox.", - "You have %1 unread messages in your Hotmail inbox.", unread_inbox)); - notification->setActions(( QStringList() << i18nc("@action", "Open Inbox" ) << i18nc("@action", "Close" )) ); - notification->setFlags(KNotification::Persistent); - notification->setPixmap(accountIcon(KIconLoader::SizeMedium)); - QObject::connect(notification,SIGNAL(activated()), this , SLOT(slotOpenInbox()) ); - QObject::connect(notification,SIGNAL(action1Activated()), this, SLOT(slotOpenInbox()) ); - QObject::connect(notification,SIGNAL(action2Activated()), notification, SLOT(close()) ); - QObject::connect(notification,SIGNAL(ignored()), notification, SLOT(close()) ); - notification->sendEvent(); -} - -void -WlmAccount::slotNewEmailNotification (const QString from, const QString subject) -{ - if ( isBusy() ) - return; - - KNotification *notification= new KNotification ("msn_mail", Kopete::UI::Global::mainWidget()); - - notification->setText(i18n( "New message from %1 in your Hotmail inbox.

Subject: %2", from, subject)); - notification->setActions(( QStringList() << i18nc("@action", "Open Inbox" ) << i18nc("@action", "Close" )) ); - notification->setFlags(KNotification::Persistent); - notification->setPixmap(accountIcon(KIconLoader::SizeMedium)); - QObject::connect(notification,SIGNAL(activated()), this , SLOT(slotOpenInbox()) ); - QObject::connect(notification,SIGNAL(action1Activated()), this, SLOT(slotOpenInbox()) ); - QObject::connect(notification,SIGNAL(action2Activated()), notification, SLOT(close()) ); - QObject::connect(notification,SIGNAL(ignored()), notification, SLOT(close()) ); - notification->sendEvent(); -} - -void -WlmAccount::slotInboxUrl (MSN::hotmailInfo & info) -{ - //write the tmp file - QString UserID = accountId(); - - QString hotmailRequest = "\n" - "\n" - "\n" - "\n" - "\n" - "

\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "
\n\n"; - - slotRemoveTmpMailFile(); - tmpMailFile = new KTemporaryFile(); - tmpMailFile->setSuffix(".html"); - - if (tmpMailFile->open()) - { - tmpMailFile->write(hotmailRequest.toUtf8()); - tmpMailFile->flush(); - - /* tmpMailFile->close() erases tmpMailFile->fileName property(), so use it before closing file. */ - KToolInvocation::invokeBrowser( tmpMailFile->fileName(), "0" ); // "0" means we don't need startup notification - tmpMailFile->close(); - m_tmpMailFileTimer->start(30000); - m_tmpMailFileTimer->setSingleShot(true); - } - else - kDebug(14140) << "Error opening temporary file"; -} - -void WlmAccount::slotRemoveTmpMailFile() -{ - if (tmpMailFile) - { - delete tmpMailFile; - tmpMailFile = 0L; - } - - m_tmpMailFileTimer->stop(); -} - -void WlmAccount::gotAddedGroup (bool added, - const QString & groupName, - const QString & groupId) -{ - kDebug() << "groupName: " << groupName << "groupId: " << groupId << " added:" << added; - const QStringList contactIdList = m_contactAddQueue.keys (groupName); - if (!added) - { - // Remove contact from add queue. FIXME: We should somehow sync the contact list here - foreach ( const QString &contactId, contactIdList ) - m_contactAddQueue.remove(contactId); - - return; - } - - // Insert new group - m_groupToGroupId.insert(groupName, groupId); - - // Add contact to the new group - foreach ( const QString &contactId, contactIdList ) - { - kDebug() << "adding contact " << contactId; - m_server->cb.mainConnection->addToAddressBook (contactId.toLatin1().constData(), contactId.toUtf8().constData()); - } - - // Sync contact belonging to the new group - foreach ( Kopete::Contact *kc , contacts() ) - { - WlmContact *c = static_cast( kc ); - if ( c->metaContact()->groups().first()->displayName() == groupName ) - c->sync( Kopete::Contact::MovedBetweenGroup ); - } -} - -void WlmAccount::gotRemovedGroup (bool removed, - const QString & groupId) -{ - kDebug() << "groupId: " << groupId << " removed:" << removed; - if ( !removed ) - return; - - // remove group - m_groupToGroupId.remove(m_groupToGroupId.key(groupId)); -} - -void -WlmAccount::gotAddedContactToGroup (bool added, - const QString & groupId, - const QString & contactId) -{ - kDebug() << "groupId: " << groupId << " contactId: " << contactId << " added:" << added; -} - -void -WlmAccount::gotRemovedContactFromGroup (bool removed, - const QString & groupId, - const QString & contactId) -{ - kDebug() << "groupId: " << groupId << " contactId: " << contactId << " removed:" << removed; -} - -void -WlmAccount::gotAddedContactToAddressBook (bool added, const QString & passport, const QString & displayName, const QString & guid) -{ - kDebug() << "contact: " << passport << " added:" << added << " guid: " << guid; - if (added) - { - m_serverSideContactsPassports.insert (passport); - addContact (passport, QString(), Kopete::Group::topLevel (), Kopete::Account::DontChangeKABC); - - WlmContact * newcontact = qobject_cast (contacts().value(passport)); - if (!newcontact) - return; - - newcontact->setContactSerial (guid); - newcontact->setNickName (displayName); - - QString groupName = m_contactAddQueue.value (passport); - if( !groupName.isEmpty() && m_groupToGroupId.contains (groupName) ) - { - kDebug() << "Adding contact \'" << passport << "\' to group \'" << groupName << "\'"; - QString groupId = m_groupToGroupId.value (groupName); - m_server->cb.mainConnection->addToGroup (groupId.toLatin1().constData(), guid.toLatin1().constData()); - } - } - else - { - // TODO: Raise an error - } - - // Remove contact from add queue - m_contactAddQueue.remove(passport); -} - -void -WlmAccount::gotRemovedContactFromAddressBook (bool removed, const QString & passport, const QString & contactId) -{ - Q_UNUSED( contactId ); - - kDebug() << "contact: " << passport << " removed:" << removed; - if (removed) - m_serverSideContactsPassports.remove( passport ); - -} - -void -WlmAccount::NotificationServerConnectionTerminated (MSN:: - NotificationServerConnection - * conn) -{ - Q_UNUSED( conn ); - - kDebug (14210) << k_funcinfo; - - if (m_lastMainConnectionError == Callbacks::WrongPassword) - logOff( Kopete::Account::BadPassword ); - else if (m_lastMainConnectionError == Callbacks::OtherClient) - logOff( Kopete::Account::OtherClient ); - else if (myself ()->onlineStatus () == WlmProtocol::protocol ()->wlmConnecting) - connectionFailed (); - else if (isConnected ()) - logOff( Kopete::Account::Unknown ); -} - -void WlmAccount::disconnect() -{ - logOff( Kopete::Account::Manual ); -} - -void WlmAccount::error( int /*errCode*/ ) -{ - logOff( Kopete::Account::ConnectionReset ); -} - -void WlmAccount::logOff( Kopete::Account::DisconnectReason reason ) -{ - kDebug (14210) << k_funcinfo; - if (m_server) - m_server->WlmDisconnect (); - - if (myself ()) - myself ()->setOnlineStatus (WlmProtocol::protocol ()->wlmOffline); - - foreach ( Kopete::Contact *kc , contacts() ) - { - WlmContact *c = static_cast( kc ); - c->setOnlineStatus (WlmProtocol::protocol ()->wlmOffline); - } - - delete m_transferManager; - m_transferManager = NULL; - delete m_chatManager; - m_chatManager = NULL; - if (m_server) - { - QObject::disconnect (&m_server->cb, 0, 0, 0); - m_server->deleteLater(); - m_server = NULL; - } - - disconnected( reason ); -} - -WlmServer *WlmAccount::server () -{ - return m_server; -} - -bool WlmAccount::isContactBlocked(const QString& passport) const -{ - return (isOnBlockList(passport) || (blockUnknownUsers() && !isOnAllowList(passport))); -} - -void WlmAccount::blockContact(const QString& passport, bool block) -{ - if (!isConnected() || isContactBlocked(passport) == block) - return; - - if (block) - { - if (isOnAllowList(passport)) - server()->mainConnection->removeFromList(MSN::LST_AL, passport.toLatin1().constData()); - - server()->mainConnection->addToList(MSN::LST_BL, passport.toLatin1().constData()); - } - else - { - if (isOnBlockList(passport)) - server()->mainConnection->removeFromList(MSN::LST_BL, passport.toLatin1().constData()); - - server()->mainConnection->addToList(MSN::LST_AL, passport.toLatin1().constData()); - } -} - -void -WlmAccount::slotGoOnline () -{ - kDebug (14210) << k_funcinfo; - - if (!isConnected ()) - connect (WlmProtocol::protocol ()->wlmOnline); - else - m_server->cb.mainConnection->setState (MSN::STATUS_AVAILABLE, - clientid); -} - -void -WlmAccount::slotGoInvisible () -{ - kDebug (14210) << k_funcinfo; - - if (!isConnected ()) - connect (WlmProtocol::protocol ()->wlmInvisible); - else - m_server->cb.mainConnection->setState (MSN::STATUS_INVISIBLE, - clientid); -} - -void -WlmAccount::slotGoAway (const Kopete::OnlineStatus & status) -{ - kDebug (14210) << k_funcinfo; - - if (!isConnected ()) - connect (status); - else - { - if (status == WlmProtocol::protocol ()->wlmIdle) - m_server->cb.mainConnection->setState (MSN::STATUS_IDLE, - clientid); - if (status == WlmProtocol::protocol ()->wlmAway) - m_server->cb.mainConnection->setState (MSN::STATUS_AWAY, - clientid); - else if (status == WlmProtocol::protocol ()->wlmOutToLunch) - m_server->cb.mainConnection->setState (MSN::STATUS_OUTTOLUNCH, - clientid); - else if (status == WlmProtocol::protocol ()->wlmBusy) - m_server->cb.mainConnection->setState (MSN::STATUS_BUSY, - clientid); - else if (status == WlmProtocol::protocol ()->wlmOnThePhone) - m_server->cb.mainConnection->setState (MSN::STATUS_ONTHEPHONE, - clientid); - else if (status == WlmProtocol::protocol ()->wlmBeRightBack) - m_server->cb.mainConnection->setState (MSN::STATUS_BERIGHTBACK, - clientid); - } -} - -void -WlmAccount::slotGoOffline () -{ - kDebug (14210) << k_funcinfo; - - if ( isConnected() || myself ()->onlineStatus ().status () == Kopete::OnlineStatus::Connecting ) - disconnect(); -} - -void -WlmAccount::updateContactStatus () -{ -} - -void -WlmAccount::receivedOIMList (std::vector < MSN::eachOIM > &oimlist) -{ - kDebug (14210) << k_funcinfo; - std::vector < MSN::eachOIM >::iterator i = oimlist.begin (); - for (; i != oimlist.end (); i++) - { - m_oimList[WlmUtils::latin1((*i).id)] = WlmUtils::passport((*i).from); - m_server->cb.mainConnection->get_oim((*i).id, true); - } -} - -void -WlmAccount::deletedOIM(const QString& id, const bool deleted) -{ - kDebug() << " deleted OIM " << id << " " << deleted; -} - -void -WlmAccount::receivedOIM (const QString & id, const QString & message) -{ - kDebug (14210) << k_funcinfo; - QString contactId = m_oimList[id]; - WlmContact * contact = qobject_cast(contacts().value( contactId)); - - Kopete::Message msg = Kopete::Message (contact, myself ()); - msg.setPlainBody (message); - msg.setDirection (Kopete::Message::Inbound); - - if (contact) - contact->manager (Kopete::Contact::CanCreate)->appendMessage (msg); - - m_oimList.remove (id); - m_server->cb.mainConnection->delete_oim (id.toLatin1().constData ()); -} - -void WlmAccount::slotRemoveRecentDPRequests() -{ - m_recentDPRequests.pop_front(); -} - diff --git a/protocols/wlm/wlmaccount.h b/protocols/wlm/wlmaccount.h deleted file mode 100644 index f154108fb..000000000 --- a/protocols/wlm/wlmaccount.h +++ /dev/null @@ -1,378 +0,0 @@ -/* - wlmaccount.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMACCOUNT_H -#define WLMACCOUNT_H - -#include -#include -#include "kopetechatsessionmanager.h" -#include "kopetepasswordedaccount.h" -#include "wlmserver.h" -#include "wlmchatsession.h" -#include "wlmtransfermanager.h" -#include "wlmchatmanager.h" - -class KActionMenu; -namespace Kopete -{ - class Contact; -} -namespace Kopete -{ - class MetaContact; -} - -class WlmProtocol; -class WlmServer; -class WlmTransferManager; -class WlmChatManager; - -/** - * This represents an account connected to the wlm - * @author Will Stephenson -*/ -class WlmAccount:public - Kopete::PasswordedAccount -{ - Q_OBJECT - public: - WlmAccount (WlmProtocol * parent, const QString & accountID); - ~ - WlmAccount (); - /** - * Construct the context menu used for the status bar icon - */ - virtual void - fillActionMenu (KActionMenu * actionMenu); - - /** - * Creates a protocol specific Kopete::Contact subclass and adds it to the supplie - * Kopete::MetaContact - */ - virtual bool - createContact (const QString & contactId, - Kopete::MetaContact * parentContact); - /** - * Called when Kopete status is changed globally - */ - virtual void - setOnlineStatus (const Kopete::OnlineStatus & status, - const Kopete::StatusMessage & reason = Kopete::StatusMessage (), - const OnlineStatusOptions& options = None); - virtual void - setStatusMessage (const Kopete::StatusMessage & statusMessage); - /** - * 'Connect' to the wlm server. Only sets myself() online. - */ -// virtual void connect( const Kopete::OnlineStatus& initialStatus = Kopete::OnlineStatus::OnlineStatus() ); - /** - * Disconnect from the server. Only sets myself() offline. - */ - virtual void disconnect (); - - void logOff( Kopete::Account::DisconnectReason reason ); - - /** - * Return a reference to the server stub - */ - virtual void connectWithPassword (const QString & password); - - QString serverName() const; - uint serverPort() const; - - bool isProxyEnabled() const; - QString proxyHost() const; - uint proxyPort() const; - QString proxyUsername() const; - QString proxyPassword() const; - uint proxyType() const; - bool doNotRequestEmoticons() const; - bool doNotSendEmoticons() const; - - WlmServer * server (); - - WlmChatManager * chatManager () - { - return m_chatManager; - } - WlmTransferManager * transferManager () - { - return m_transferManager; - } - - // TODO: Check BPL - bool blockUnknownUsers() const { return true; } - - bool isContactBlocked(const QString& passport) const; - - void blockContact(const QString& passport, bool block); - - bool isOnAllowList(const QString& passport) const { return m_allowList.contains( passport ); } - - bool isOnBlockList(const QString& passport) const { return m_blockList.contains( passport ); } - - bool isOnPendingList(const QString& passport) const { return m_pendingList.contains( passport ); } - - bool isOnReverseList(const QString& passport) const { return m_reverseList.contains( passport ); } - - // forward list (or also called address book) - bool isOnServerSideList(const QString& passport) const { return m_serverSideContactsPassports.contains( passport ); } - - QSet allowList() const { return m_allowList; } - - QSet blockList() const { return m_blockList; } - - QSet pendingList() const { return m_pendingList; } - - QSet serverSideContacts() const { return m_serverSideContactsPassports; } - - QMap groupToGroupId() const { return m_groupToGroupId; } - -public slots: - - void error( int errCode ); - - /** - * Called by the server when it has a message for us. - * This identifies the sending Kopete::Contact and passes it a Kopete::Message - */ - void - contactChangedStatus (const QString & buddy, - const QString & friendlyname, - const MSN::BuddyStatus & status, - const unsigned int &clientID, - const QString & msnobject); - - void - contactDisconnected (const QString & buddy); - - void - connectionCompleted (); - - void - connectionFailed (); - - void - changedStatus (MSN::BuddyStatus & state); - - void - slotGlobalIdentityChanged (Kopete::PropertyContainer *, - const QString & key, const QVariant &, - const QVariant & newValue); - - void setPersonalMessage (const Kopete::StatusMessage & reason); - - void - addressBookReceivedFromServer (std::map < std::string, - MSN::Buddy * >&list); - - void - groupListReceivedFromServer (std::map < std::string, MSN::Group > &list); - - void - gotDisplayName (const QString & displayName); - - void - gotDisplayPicture (const QString & contactId, const QString & filename); - - void - gotNewContact (const MSN::ContactList & list, const QString & contact, - const QString & friendlyname); - - void gotRemovedContactFromList (const MSN::ContactList & list, const QString & contact); - - void - receivedOIMList (std::vector < MSN::eachOIM > &oimlist); - - void - receivedOIM (const QString & id, const QString & message); - - void - gotContactPersonalInfo (const QString & fromPassport, - const MSN::personalInfo & pInfo); - - void - NotificationServerConnectionTerminated (MSN:: - NotificationServerConnection * - conn); - - void mainConnectionError (int errorCode); - - void - scheduleConnect (); - - void gotAddedGroup (bool added, - const QString & groupName, - const QString & groupId); - - void gotRemovedGroup (bool removed, - const QString & groupId); - - void - gotAddedContactToGroup (bool added, - const QString & groupId, - const QString & contactId); - - void - gotRemovedContactFromGroup (bool removed, - const QString & groupId, - const QString & contactId); - - void - gotAddedContactToAddressBook (bool added, - const QString & passport, - const QString & displayName, - const QString & guid); - - void - gotRemovedContactFromAddressBook (bool removed, - const QString & passport, - const QString & contactId); - void - deletedOIM(const QString& id, const bool deleted); - - void - downloadPendingDisplayPicture(); - - void - slotInitialEmailNotification(const int unread_inbox); - - void - slotNewEmailNotification(const QString from, const QString subject); - - void - slotInboxUrl(MSN::hotmailInfo & info); - - protected: - /** - * This simulates contacts going on and offline in sync with the account's status changes - */ - void - updateContactStatus (); - - WlmServer * - m_server; - - WlmTransferManager * - m_transferManager; - - WlmChatManager * - m_chatManager; - - protected - slots: - /** - * Change the account's status. Called by KActions and internally. - */ - void - slotGoOnline (); - /** - * Change the account's status. Called by KActions and internally. - */ - void - slotGoAway (const Kopete::OnlineStatus & status); - /** - * Change the account's status. Called by KActions and internally. - */ - void - slotGoOffline (); - - void - slotGoInvisible (); - - void - disableInitialList () - { - m_initialList = false; - } - - void - enableInitialList () - { - m_initialList = true; - } - - bool - isInitialList () - { - return m_initialList; - } - -private slots: - void addedInfoEventActionActivated(uint actionId); -// void slotStartChat(); - void slotOpenInbox(); - void slotChangePublicName(); - void slotOpenStatus(); - void slotRemoveTmpMailFile(); - void slotRemoveRecentDPRequests(); - -private: - Kopete::OnlineStatus temporaryStatus; - - QAction *m_openInboxAction; -// QAction *m_startChatAction; - QAction *m_changeDNAction; - QAction *m_openStatusAction; - - QString - m_pictureFilename; - - bool - m_initialList; - - uint - clientid; - - QMap < QString, QString > m_oimList; - - //contacts waiting on their group to be added - QMap m_contactAddQueue; - - //group name to group id map - QMap m_groupToGroupId; - - // passport set of contacts which are stored on server - QSet m_serverSideContactsPassports; - - // passport set of contacts which are on allow list - QSet m_allowList; - - // passport set of contacts which are on block list - QSet m_blockList; - - // passport set of contacts which are on pending list - QSet m_pendingList; - - // passport set of contacts which are on reverse list - QSet m_reverseList; - - // passport set of contacts which we do not have the display picture yet - QSet m_pendingDisplayPictureList; - - QTimer * m_pendingDisplayPicturesTimer; - - KTemporaryFile * tmpMailFile; - - QTimer * m_tmpMailFileTimer; - - QStringList m_recentDPRequests; - - int m_lastMainConnectionError; -}; - -#endif diff --git a/protocols/wlm/wlmchatmanager.cpp b/protocols/wlm/wlmchatmanager.cpp deleted file mode 100644 index 588ca524e..000000000 --- a/protocols/wlm/wlmchatmanager.cpp +++ /dev/null @@ -1,720 +0,0 @@ -/* - wlmchatsession.cpp - MSN Message Manager - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2005 by the Kopete developers - - ************************************************************************* - * * - * 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. * - * * - ************************************************************************* -*/ - -#include "wlmchatmanager.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "kopetecontactaction.h" -#include "kopetemetacontact.h" -#include "kopetecontactlist.h" -#include "kopetechatsessionmanager.h" -#include "kopeteuiglobal.h" -#include "kopeteglobal.h" -#include "kopeteview.h" - -#include "wlmcontact.h" -#include "wlmprotocol.h" -#include "wlmaccount.h" - -const int EmoticonsTimeoutCheckInterval = 2; //seconds -const int EmoticonsTimeoutThreshold = 5; //seconds - -WlmChatManager::WlmChatManager (WlmAccount * account1): -m_account (account1), m_emoticonsTimeoutTimerId(0) -{ - QObject::connect (&account ()->server ()->cb, - SIGNAL (messageReceived - (MSN::SwitchboardServerConnection *, - const QString &, const Kopete::Message &)), - this, - SLOT (receivedMessage - (MSN::SwitchboardServerConnection *, - const QString &, const Kopete::Message &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (joinedConversation - (MSN::SwitchboardServerConnection *, - const QString &, const QString &)), this, - SLOT (joinedConversation - (MSN::SwitchboardServerConnection *, - const QString &, const QString &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (leftConversation - (MSN::SwitchboardServerConnection *, - const QString &)), this, - SLOT (leftConversation - (MSN::SwitchboardServerConnection *, - const QString &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (gotNewSwitchboard - (MSN::SwitchboardServerConnection *, - const void *)), this, - SLOT (gotNewSwitchboard - (MSN::SwitchboardServerConnection *, - const void *))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (SwitchboardServerConnectionTerminated - (MSN::SwitchboardServerConnection *)), this, - SLOT (SwitchboardServerConnectionTerminated - (MSN::SwitchboardServerConnection *))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (messageSentACK - (MSN::SwitchboardServerConnection *, - const unsigned int &)), this, - SLOT (messageSentACK - (MSN::SwitchboardServerConnection *, - const unsigned int &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (receivedNudge - (MSN::SwitchboardServerConnection *, - const QString &)), this, - SLOT (receivedNudge - (MSN::SwitchboardServerConnection *, - const QString &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (receivedTypingNotification - (MSN::SwitchboardServerConnection *, - const QString &)), this, - SLOT (receivedTypingNotification - (MSN::SwitchboardServerConnection *, - const QString &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (slotGotEmoticonNotification (MSN::SwitchboardServerConnection *, - const QString &, const QString &, - const QString &)), this, - SLOT (slotGotEmoticonNotification (MSN::SwitchboardServerConnection *, - const QString &, const QString &, - const QString &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (slotGotVoiceClipNotification (MSN::SwitchboardServerConnection *, - const QString &, - const QString &)), this, - SLOT(slotGotVoiceClipNotification (MSN::SwitchboardServerConnection *, - const QString &, - const QString &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL(slotGotWinkNotification (MSN::SwitchboardServerConnection *, - const QString &, - const QString &)), this, - SLOT(slotGotWinkNotification (MSN::SwitchboardServerConnection *, - const QString &, - const QString &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL(slotGotInk (MSN::SwitchboardServerConnection *, - const QString &, - const QByteArray &)), this, - SLOT(slotGotInk (MSN::SwitchboardServerConnection *, - const QString &, - const QByteArray &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL(slotGotVoiceClipFile(MSN::SwitchboardServerConnection *, - const unsigned int &, - const QString &)), this, - SLOT(slotGotVoiceClipFile(MSN::SwitchboardServerConnection *, - const unsigned int &, - const QString &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL(slotGotEmoticonFile(MSN::SwitchboardServerConnection *, - const unsigned int &, - const QString &, - const QString &)), this, - SLOT(slotGotEmoticonFile(MSN::SwitchboardServerConnection *, - const unsigned int &, - const QString &, - const QString &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL(slotGotWinkFile(MSN::SwitchboardServerConnection *, - const unsigned int &, - const QString &)), this, - SLOT(slotGotWinkFile(MSN::SwitchboardServerConnection *, - const unsigned int &, - const QString &))); -} - -WlmChatManager::~WlmChatManager () -{ - QMap < MSN::SwitchboardServerConnection *, - WlmChatSession * >::Iterator it; - for (it = chatSessions.begin (); it != chatSessions.end (); ++it) - { - if (it.value ()) - it.value ()->setChatService (NULL); - } - chatSessions.clear (); -} - -void -WlmChatManager::receivedNudge (MSN::SwitchboardServerConnection * conn, - const QString & passport) -{ - createChat (conn); - - if(conn) - if(chatSessions[conn]) - chatSessions[conn]->receivedNudge (passport); - -} - -void -WlmChatManager::leftConversation (MSN::SwitchboardServerConnection * conn, - const QString & passport) -{ - kDebug (14210) << k_funcinfo << " " << conn; - WlmChatSession *chat = chatSessions[conn]; - - if (chat) - { - WlmContact * contact = qobject_cast(account ()->contacts().value(passport)); - if (!contact) - return; - chat->removeContact (contact); - } -} - -void -WlmChatManager::removeChatSession (QObject * obj) -{ - QMap ::Iterator it; - for (it = chatSessions.begin (); it != chatSessions.end (); ++it) - { - if (it.value () == obj) - { - it.value ()->deleteLater(); - chatSessions.remove (it.key ()); - return; - } - } -} - -void -WlmChatManager::createChat (MSN::SwitchboardServerConnection * conn) -{ - Kopete::ContactPtrList chatmembers; - kDebug (14210) << k_funcinfo << " " << conn; - - if (chatSessions[conn]) - return; - - std::list < MSN::Passport >::iterator users = conn->users.begin (); - for (; users != conn->users.end (); ++users) - { - QString userPassport = WlmUtils::passport(*users); - Kopete::Contact * contact = account ()->contacts().value(userPassport); - if (!contact) - { - account ()->addContact (userPassport, QString(), 0L, Kopete::Account::Temporary); - contact = account ()->contacts().value(userPassport); - contact->setOnlineStatus (WlmProtocol::protocol ()->wlmUnknown); - } - chatmembers.append (contact); - } - - Kopete::ChatSession * _manager = - Kopete::ChatSessionManager::self ()->findChatSession (account ()->myself (), - chatmembers, - account ()->protocol ()); - if (_manager) - chatSessions[conn] = qobject_cast < WlmChatSession * >(_manager); - else - // create a new chat window - chatSessions[conn] = new WlmChatSession (account ()->protocol (), - account ()->myself (), chatmembers, conn); - if(chatSessions[conn]) - chatSessions[conn]->setChatService (conn); -} - -void -WlmChatManager::joinedConversation (MSN::SwitchboardServerConnection * conn, - const QString & passport, - const QString & friendlyname) -{ - Q_UNUSED( friendlyname ); - - Kopete::ContactPtrList chatmembers; - Kopete::Contact * contact = account ()->contacts().value(passport); - if (!contact) - { - account ()->addContact (passport, QString(), 0L, Kopete::Account::Temporary); - contact = account ()->contacts().value(passport); - contact->setOnlineStatus (WlmProtocol::protocol ()->wlmUnknown); - } - // populate chatmembers from SwitchboardServerConnection - std::list < MSN::Passport >::iterator users = conn->users.begin (); - for (; users != conn->users.end (); ++users) - { - QString userPassport = WlmUtils::passport(*users); - Kopete::Contact * contact = account ()->contacts().value(userPassport); - if (!contact) - { - account ()->addContact (userPassport, QString(), 0L, Kopete::Account::Temporary); - contact = account ()->contacts().value(userPassport); - contact->setOnlineStatus (WlmProtocol::protocol ()->wlmUnknown); - } - chatmembers.append (contact); - } - - // check if we already have a similar connection - WlmChatSession *_manager = - qobject_cast (Kopete::ChatSessionManager::self ()-> - findChatSession (account ()->myself (), chatmembers, - account ()->protocol ())); - - if (_manager) - { - // drop the old and replace by the new one - MSN::SwitchboardServerConnection * conn_current = - chatSessions.key (_manager); - if (conn_current && conn_current != conn) - { - chatSessions.remove (conn_current); - chatSessions[conn] = _manager; - chatSessions[conn]->setChatService(conn); - delete conn_current; - return; - } - } - - createChat (conn); - chatSessions[conn]->addContact (contact); - // the session is ready when there are at least 2 contacts, me and somebody - if (!chatSessions[conn]->isReady ()) - chatSessions[conn]->setReady (true); -} - -void -WlmChatManager::receivedMessage (MSN::SwitchboardServerConnection * conn, - const QString & from, - const Kopete::Message & message) -{ - kDebug (14210) << k_funcinfo << " " << conn; - - createChat (conn); - - WlmChatSession *chat = chatSessions[conn]; - - // Pass it on to the contact to process and display via a KMM - if (chat) - { - Kopete::Contact * contact = account ()->contacts().value(from); - if(!contact) - { - account ()->addContact (from, QString(), 0L, - Kopete::Account::Temporary); - contact = account ()->contacts().value(from); - } - Kopete::Message * newMessage = - new Kopete::Message (contact, chat->members ()); - newMessage->setPlainBody (message.plainBody ()); - newMessage->setFont (message.font ()); - newMessage->setForegroundColor (message.foregroundColor ()); - newMessage->setDirection (Kopete::Message::Inbound); - - WlmContact *contact_from = qobject_cast(contact); - if(!contact_from) - return; - - if(!contact_from->dontShowEmoticons()) - { - if (!fillEmoticons(chat, newMessage)) - { - pendingMessages[conn].append(PendingMessage(newMessage)); - if (m_emoticonsTimeoutTimerId == 0) - m_emoticonsTimeoutTimerId = startTimer(EmoticonsTimeoutCheckInterval * 1000); - return; - } - } - // Add it to the manager - chat->appendMessage (*newMessage); - - delete newMessage; - // send keepalive each 50 seconds. - chat->startSendKeepAlive(); - } - else - { - kWarning (14210) << k_funcinfo << - "unable to look up contact for delivery"; - } -} - -void -WlmChatManager::SwitchboardServerConnectionTerminated ( - MSN::SwitchboardServerConnection * conn) -{ - if(!conn) - return; - - WlmChatSession *chat = chatSessions[conn]; - if (chat) - { - chat->setChatService (NULL); - chatSessions.remove (conn); -/* if(chat->view()) - { - if(!chat->view()->isVisible()) - delete chat; - } - else - delete chat; -*/ - } -} - -void -WlmChatManager::gotNewSwitchboard (MSN::SwitchboardServerConnection * conn, - const void *tag) -{ - Kopete::ContactPtrList chatmembers; - const std::pair < std::string, std::string > *ctx = - static_cast < const std::pair < std::string, std::string > *>(tag); - - if (!ctx) - return; - - conn->inviteUser (ctx->first); - delete ctx; - conn->auth.tag = NULL; - kDebug (14210) << k_funcinfo << " " << conn; -} - -void -WlmChatManager::messageSentACK (MSN::SwitchboardServerConnection * conn, - const unsigned int &trID) -{ - WlmChatSession *chat = chatSessions[conn]; - if (chat) - { - chat->messageSentACK (trID); - } -} - -void -WlmChatManager::requestDisplayPicture (QString contactId) -{ - Kopete::Contact * contact = account ()->contacts().value(contactId); - - if (!contact) - return; - - WlmChatSession *session = - qobject_cast (contact->manager (Kopete::Contact::CanCreate)); - - if (session) - session->requestDisplayPicture (); - -} - -void -WlmChatManager::receivedTypingNotification (MSN::SwitchboardServerConnection * - conn, const QString & contactId) -{ - Kopete::Contact * contact = account ()->contacts().value(contactId); - - if (!contact) - return; - - WlmChatSession *chat = chatSessions[conn]; - if (chat) - { - chat->receivedTypingMsg (contact, true); - } -} - -void -WlmChatManager::slotGotVoiceClipNotification (MSN::SwitchboardServerConnection * conn, - const QString & from, - const QString & msnobject) -{ - Q_UNUSED( from ); - WlmChatSession *chat = chatSessions[conn]; - if (!chat) - return; - unsigned int sessionID = chat->generateSessionID(); - - KTemporaryFile voiceClip; - voiceClip.setPrefix("kopete_voiceclip-"); - voiceClip.setSuffix(".wav"); - voiceClip.setAutoRemove(false); - voiceClip.open(); - chat->addFileToRemove(voiceClip.fileName()); - conn->requestVoiceClip(sessionID, QFile::encodeName(voiceClip.fileName()).constData(), - msnobject.toUtf8().constData()); -} - -void -WlmChatManager::slotGotWinkNotification (MSN::SwitchboardServerConnection * conn, - const QString & from, - const QString & msnobject) -{ - Q_UNUSED( conn ); - Q_UNUSED( from ); - Q_UNUSED( msnobject ); -} - -void -WlmChatManager::slotGotInk (MSN::SwitchboardServerConnection * conn, - const QString & from, - const QByteArray & image) -{ - QByteArray ink; - WlmChatSession *chat = chatSessions[conn]; - if (!chat) - { - return; - } - Kopete::Contact * contact = account ()->contacts().value(from); - if(!contact) - { - account ()->addContact (from, QString(), 0L, Kopete::Account::Temporary); - contact = account ()->contacts().value(from); - } - if(!contact) - return; - - ink = QByteArray::fromBase64(image); - KTemporaryFile *inkImage = new KTemporaryFile(); - inkImage->setPrefix("inkformatgif-"); - inkImage->setSuffix(".gif"); - inkImage->open(); - inkImage->write(ink.constData(), ink.size()); - QString msg=QString ("").arg ( inkImage->fileName() ); - inkImage->close(); - - Kopete::Message kmsg( contact, chat->members() ); - kmsg.setHtmlBody( msg ); - kmsg.setDirection( Kopete::Message::Inbound ); - chat->appendMessage ( kmsg ); - chat->addFileToRemove(inkImage->fileName()); - //TODO mem leak ? inkImage ? - inkImage = 0l; - -} - -void -WlmChatManager::slotGotVoiceClipFile(MSN::SwitchboardServerConnection * conn, - const unsigned int & sessionID, - const QString & file) -{ - Q_UNUSED( sessionID ); - - WlmChatSession *chat = chatSessions[conn]; - if(!chat) - return; - - Kopete::Message kmsg( chat->members().first(), chat->members() ); - kmsg.setType(Kopete::Message::TypeVoiceClipRequest); - kmsg.setDirection( Kopete::Message::Inbound ); - kmsg.setFileName(file); - chat->appendMessage ( kmsg ); -} - -void WlmChatManager::slotGotEmoticonNotification (MSN::SwitchboardServerConnection * conn, - const QString & buddy, - const QString & alias, - const QString & msnobject) -{ - WlmContact *contact = qobject_cast(m_account->contacts().value(buddy)); - - if(!contact) - return; - - if(m_account->doNotRequestEmoticons() || contact->dontShowEmoticons()) - return; - - WlmChatSession *chat = chatSessions[conn]; - if(!chat) - return; - - unsigned int sessionID = chat->generateSessionID(); - - QDomDocument xmlobj; - xmlobj.setContent (msnobject); - - // track display pictures by SHA1D field - QString SHA1D = xmlobj.documentElement ().attribute ("SHA1D"); - if (SHA1D.isEmpty ()) - return; - - QString newlocation = - KGlobal::dirs ()->locateLocal ("appdata", - "wlmpictures/" + - QString (SHA1D.replace ('/', '_'))); - QFile f(newlocation); - if (f.exists () && f.size ()) - { - chat->emoticonsList[alias] = newlocation; - return; - } - - // pending emoticon - chat->emoticonsList[alias].clear(); - - conn->requestEmoticon(sessionID, QFile::encodeName(newlocation).constData(), - msnobject.toUtf8().constData(), alias.toUtf8().constData()); -} - -void -WlmChatManager::slotGotEmoticonFile(MSN::SwitchboardServerConnection * conn, - const unsigned int & sessionID, - const QString & alias, - const QString & file) -{ - Q_UNUSED( sessionID ); - - WlmChatSession *chat = chatSessions[conn]; - if(!chat) - return; - - chat->emoticonsList[alias] = file; - - if(pendingMessages.value(conn).isEmpty()) - return; - - { - QMutableLinkedListIterator it(pendingMessages[conn]); - while (it.hasNext()) - { - PendingMessage pendingMsg = it.next(); - if (fillEmoticons(chat, pendingMsg.message)) - { - chat->appendMessage(*pendingMsg.message); - it.remove(); - delete pendingMsg.message; - } - } - } - - if (pendingMessages.value(conn).isEmpty()) - pendingMessages.remove(conn); -} - -void -WlmChatManager::slotGotWinkFile(MSN::SwitchboardServerConnection * conn, - const unsigned int & sessionID, - const QString & file) -{ - Q_UNUSED( conn ); - Q_UNUSED( sessionID ); - Q_UNUSED( file ); -} - -void WlmChatManager::timerEvent(QTimerEvent *event) -{ - if (m_emoticonsTimeoutTimerId == event->timerId() ) - { - QTime thresholdTime = QTime::currentTime().addSecs(-EmoticonsTimeoutThreshold); - QMutableMapIterator > connIt(pendingMessages); - while (connIt.hasNext()) - { - connIt.next(); - - { - QMutableLinkedListIterator it(connIt.value()); - while (it.hasNext()) - { - PendingMessage pendingMsg = it.next(); - if (pendingMsg.receiveTime < thresholdTime) - { - kDebug(14210) << "Did not get emoticons in time!"; - WlmChatSession *chat = chatSessions[connIt.key()]; - if (chat) - chat->appendMessage(*pendingMsg.message); - - it.remove(); - delete pendingMsg.message; - } - } - } - if (connIt.value().isEmpty()) - connIt.remove(); - } - - if (pendingMessages.isEmpty()) - { - killTimer(m_emoticonsTimeoutTimerId); - m_emoticonsTimeoutTimerId = 0; - } - } -} - -bool WlmChatManager::fillEmoticons(WlmChatSession *chat, Kopete::Message* message) -{ - QString escapedMessage = message->escapedBody(); - - // for each emoticon in our list - QMap::iterator it2 = chat->emoticonsList.begin(); - for (;it2!=chat->emoticonsList.end(); ++it2) - { - QString es = it2.key().toHtmlEscaped(); - if (escapedMessage.contains(es)) - { - if (!QFile::exists(it2.value())) - { // an emoticon is still missing, so wait for it - message->setHtmlBody(escapedMessage); - return false; - } - - QImage iconImage = QImageReader(it2.value()).read(); - - escapedMessage.replace( QRegExp(QString::fromLatin1("%1(?![^><]*>)").arg(QRegExp::escape(es))), - QString::fromLatin1("\"")" ) ); - } - } - message->setHtmlBody(escapedMessage); - return true; -} diff --git a/protocols/wlm/wlmchatmanager.h b/protocols/wlm/wlmchatmanager.h deleted file mode 100644 index f49156783..000000000 --- a/protocols/wlm/wlmchatmanager.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - wlmchatsession.h - Wlm Message Manager - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2005 by the Kopete developers - - ************************************************************************* - * * - * 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMCHATMANAGER_H -#define WLMCHATMANAGER_H - -#include - -#include "kopetechatsession.h" -#include "wlmchatsession.h" -#include "wlmaccount.h" -#include - - -class WlmChatManager : public QObject -{ - Q_OBJECT - - public: - WlmChatManager (WlmAccount * account); - ~WlmChatManager (); - WlmAccount *account () - { - return m_account; - } - QMap < MSN::SwitchboardServerConnection *, WlmChatSession * >chatSessions; - - // messages waiting for emoticons to be received - class PendingMessage { - public: - PendingMessage( Kopete::Message* msg ) - : receiveTime(QTime::currentTime()), message(msg) - {} - - QTime receiveTime; - Kopete::Message* message; - }; - QMap > pendingMessages; - - void requestDisplayPicture (QString contactId); - - void createChat (MSN::SwitchboardServerConnection * conn); - - private slots: - - void receivedMessage (MSN::SwitchboardServerConnection * conn, - const QString & from, - const Kopete::Message & message); - - void joinedConversation (MSN::SwitchboardServerConnection * conn, - const QString & passport, - const QString & friendlyname); - - void leftConversation (MSN::SwitchboardServerConnection * conn, - const QString & passport); - - void removeChatSession (QObject * obj); - - void gotNewSwitchboard (MSN::SwitchboardServerConnection * conn, - const void *tag); - - void SwitchboardServerConnectionTerminated ( - MSN::SwitchboardServerConnection * conn); - - void messageSentACK (MSN::SwitchboardServerConnection * conn, - const unsigned int &trID); - - void receivedNudge (MSN::SwitchboardServerConnection * conn, - const QString & passport); - - void receivedTypingNotification (MSN::SwitchboardServerConnection * conn, - const QString & contactId); - - void slotGotVoiceClipNotification (MSN::SwitchboardServerConnection * conn, - const QString & from, - const QString & msnobject); - - void slotGotWinkNotification (MSN::SwitchboardServerConnection * conn, - const QString & from, - const QString & msnobject); - - void slotGotInk (MSN::SwitchboardServerConnection * conn, - const QString & from, - const QByteArray & image); - - void slotGotVoiceClipFile(MSN::SwitchboardServerConnection * conn, - const unsigned int & sessionID, - const QString & file); - - void slotGotEmoticonFile(MSN::SwitchboardServerConnection * conn, - const unsigned int & sessionID, - const QString & alias, - const QString & file); - - void slotGotWinkFile(MSN::SwitchboardServerConnection * conn, - const unsigned int & sessionID, - const QString & file); - - void slotGotEmoticonNotification (MSN::SwitchboardServerConnection * conn, - const QString & buddy, - const QString & alias, - const QString & msnobject); - -protected: - virtual void timerEvent(QTimerEvent *event); - bool fillEmoticons(WlmChatSession *chat, Kopete::Message* message); - -private: - WlmAccount * m_account; - int m_emoticonsTimeoutTimerId; -}; - -#endif diff --git a/protocols/wlm/wlmchatsession.cpp b/protocols/wlm/wlmchatsession.cpp deleted file mode 100644 index fa4bb0122..000000000 --- a/protocols/wlm/wlmchatsession.cpp +++ /dev/null @@ -1,1183 +0,0 @@ -/* - wlmchatsession.cpp - MSN Message Manager - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2005 by the Kopete developers - - ************************************************************************* - * * - * 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. * - * * - ************************************************************************* -*/ - -#include "wlmchatsession.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "kopetecontactaction.h" -#include "kopeteonlinestatus.h" -#include "kopetemetacontact.h" -#include "kopetecontactlist.h" -#include "kopetechatsessionmanager.h" -#include "kopeteuiglobal.h" -#include "kopeteglobal.h" -#include "kopeteview.h" -#include "kopeteutils.h" -#include "private/kopeteemoticons.h" -#include "kopetetransfermanager.h" - -#include "wlmcontact.h" -#include "wlmprotocol.h" -#include "wlmaccount.h" -#include "wlmchatsessioninkaction.h" -#ifdef HAVE_GIFLIB -#include -#include -/* old giflib has no GIFLIB_MAJOR, define to avoid cpp warnings */ -#ifndef GIFLIB_MAJOR -#define GIFLIB_MAJOR 4 -#endif -#endif - -WlmChatSession::WlmChatSession (Kopete::Protocol * protocol, - const Kopete::Contact * user, - Kopete::ContactPtrList others, - MSN::SwitchboardServerConnection * conn): -Kopete::ChatSession (user, others, protocol), -m_chatService (conn), -m_downloadDisplayPicture (false), -m_sendNudge (false), -m_chatServiceRequested (false), -m_tries (0), -m_oimid (1), -m_sessionID(1) -{ -#ifdef HAVE_MEDIASTREAMER - m_voiceFilter = NULL; - m_voiceCardCapture = NULL; - m_voiceTicker = NULL; - m_voiceRecorder = NULL; - m_voiceTimer = NULL; -#endif - - Kopete::ChatSessionManager::self ()->registerChatSession (this); - - setComponentData (protocol->componentData ()); - - connect (this, SIGNAL (messageSent (Kopete::Message &, - Kopete::ChatSession *)), - this, SLOT (slotMessageSent (Kopete::Message &, - Kopete::ChatSession *))); - - connect (this, SIGNAL (myselfTyping(bool)), - this, SLOT (sendTypingMsg(bool))); - - m_keepalivetimer = new QTimer (this); - connect (m_keepalivetimer, SIGNAL (timeout()), SLOT (sendKeepAlive())); - - if (getChatService () - && getChatService ()->connectionState () == - MSN::SwitchboardServerConnection::SB_READY) - { - setReady (true); - } - - m_actionNudge = new QAction (QIcon::fromTheme(QStringLiteral("preferences-desktop-notification-bell")), i18n ("Send Nudge"), this); - actionCollection ()->addAction ("wlmSendNudge", m_actionNudge); - connect (m_actionNudge, SIGNAL (triggered(bool)), this, - SLOT (sendNudge())); - - m_actionInvite = - new KActionMenu (QIcon::fromTheme(QStringLiteral("system-users")), i18n ("&Invite"), this); - actionCollection ()->addAction ("wlmInvite", m_actionInvite); - m_actionInvite->setDelayed(false); - connect (m_actionInvite->menu (), SIGNAL (aboutToShow()), this, - SLOT (slotActionInviteAboutToShow())); - - unsigned int userCaps = qobject_cast(members ().first ())->property(WlmProtocol::protocol()->contactCapabilities).value().toString().toUInt(); - - // if the official client supports Isf, for some reason it won't accept gif's. - if(userCaps & MSN::InkGifSupport && - !(userCaps & MSN::InkIsfSupport)) - { - m_actionInk = new WlmChatSessionInkAction; -#ifdef HAVE_GIFLIB - actionCollection ()->addAction ("wlmSendInk", m_actionInk); -#endif - m_actionInk->setDelayed(false); - connect(m_actionInk, SIGNAL(sendInk(QPixmap)), this, SLOT(slotSendInk(QPixmap))); - } - -#ifdef HAVE_MEDIASTREAMER - if(userCaps & MSN::VoiceClips) - { - m_actionVoice = new KActionMenu (QIcon::fromTheme(QStringLiteral("preferences-desktop-sound")), i18n ("Send &Voice"), this); - actionCollection ()->addAction ("wlmSendVoice", m_actionVoice); - ms_init(); - m_voiceCardCapture = ms_snd_card_manager_get_default_capture_card(ms_snd_card_manager_get()); - if (!m_voiceCardCapture) - { - actionCollection()->action("wlmSendVoice")->setEnabled(false); - actionCollection()->action("wlmSendVoice")->setToolTip(i18n("Sound card not detected")); - } - connect (m_actionVoice->menu(), SIGNAL (aboutToShow()), this, - SLOT (slotSendVoiceStartRec())); - - connect (m_actionVoice->menu(), SIGNAL (aboutToHide()), this, - SLOT (slotSendVoiceStopRec())); - - QAction *stopRec = new QAction(QIcon::fromTheme(QStringLiteral("wlm_fakefriend")), i18n("Stop &recording"), actionCollection ()); - m_actionVoice->addAction (stopRec); - m_actionVoice->setDelayed(false); - } -#endif - - setXMLFile ("wlmchatui.rc"); - setMayInvite (true); -} - -void -WlmChatSession::sendKeepAlive () -{ - if(isReady ()) - getChatService ()->sendKeepAlive (); -} - -void -WlmChatSession::inviteContact (const QString & passport) -{ - if (!isReady () && !isConnecting ()) - { - m_pendingInvitations.append (passport); - requestChatService (); - return; - } - WlmContact * c = qobject_cast(account ()->contacts().value(passport)); - if (c) - slotInviteContact (c); -} - -unsigned int -WlmChatSession::generateSessionID() -{ - m_sessionID++; - QTime midnight(0, 0, 0); - qsrand(midnight.secsTo(QTime::currentTime())); - return (unsigned int) (qrand() + m_sessionID) & 0xFFFFFFFF; -} - -void -WlmChatSession::sendFile (const QString & fileLocation, long unsigned int fileSize) -{ - Q_UNUSED( fileSize ); - - QFileInfo fileInfo(fileLocation); - - MSN::fileTransferInvite ft; - ft.type = MSN::FILE_TRANSFER_WITHOUT_PREVIEW; - ft.sessionId = generateSessionID(); - ft.filename = QFile::encodeName(fileLocation).constData(); - ft.friendlyname = fileInfo.fileName().toUtf8().constData(); - ft.filesize = fileInfo.size (); - ft.userPassport = members ().first ()->contactId ().toLatin1 ().constData (); - - // do not generate preview for big pictures - if(ft.filesize < 2097152) - { - QImage tryImage( fileLocation ); - if(tryImage.format() != QImage::Format_Invalid) - { - ft.type = MSN::FILE_TRANSFER_WITH_PREVIEW; - QByteArray ba; - QBuffer buffer(&ba); - buffer.open(QIODevice::WriteOnly); - tryImage = tryImage.scaled(64,64, Qt::KeepAspectRatio); - // some clients are stretching the image, so make sure it is really 64x64 - if (tryImage.size() != QSize(64,64)) - { - QImage temp(64,64, QImage::Format_ARGB32_Premultiplied); - temp.fill(Qt::transparent); - QRect r = tryImage.rect(); - r.moveCenter(temp.rect().center()); - QPainter p(&temp); - p.drawImage(r.topLeft(), tryImage); - tryImage = temp; - } - tryImage.save(&buffer, "PNG"); - ft.preview = KCodecs::base64Encode(ba).constData(); - } - } - - // TODO create a switchboard to send the file is one if not available. - if (isReady ()) - { - if (!account ()) - return; - WlmAccount *acc = qobject_cast < WlmAccount * >(account ()); - if (!acc) - return; - Kopete::Transfer * transf = - Kopete::TransferManager::transferManager ()-> - addTransfer (members ().first (), fileLocation, - QFile (fileLocation).size (), - members ().first ()->contactId (), - Kopete::FileTransferInfo::Outgoing); - - connect (transf, SIGNAL (transferCanceled()), - acc->transferManager (), SLOT (slotCanceled())); - acc->transferManager ()->addTransferSession (ft.sessionId, transf, - account ()->myself ()-> - contactId (), - members ().first ()-> - contactId ()); - - setCanBeDeleted (false); - getChatService ()->sendFile (ft); - } - else - { - m_pendingFiles.append (fileLocation); - if (!isConnecting ()) - requestChatService (); - } -} - -void -WlmChatSession::slotSendVoiceStartRec () -{ -#ifdef HAVE_MEDIASTREAMER - if (members ().count () < 0) - return; - - if(members ().first ()->onlineStatus () == - WlmProtocol::protocol ()->wlmOffline || - members ().first ()->onlineStatus () == - WlmProtocol::protocol ()->wlmUnknown) - { - Kopete::Message msg = Kopete::Message (); - msg.setPlainBody (i18n ("The other contact needs to be online to receive voice clips.")); - msg.setDirection (Kopete::Message::Internal); - appendMessage (msg); - // we cannot call hide() directly because the menu is not shown yet. - QTimer::singleShot(0, m_actionVoice->menu(), SLOT(hide())); - return; - } - - if(myself()->onlineStatus () == - WlmProtocol::protocol ()->wlmInvisible) - { - Kopete::Message msg = Kopete::Message (); - msg.setPlainBody (i18n ("You cannot send voice clips in invisible status")); - msg.setDirection (Kopete::Message::Internal); - appendMessage (msg); - // we cannot call hide() directly because the menu is not shown yet. - QTimer::singleShot(0, m_actionVoice->menu(), SLOT(hide())); - return; - } - - KTemporaryFile voiceClip; - voiceClip.setPrefix("kopete_voiceClip-"); - voiceClip.setSuffix(".wav"); - voiceClip.open(); - voiceClip.setAutoRemove(false); - m_currentVoiceClipName = voiceClip.fileName(); - addFileToRemove(m_currentVoiceClipName); - - int rate = 16000; - - m_voiceFilter=ms_snd_card_create_reader(m_voiceCardCapture); - - ms_filter_call_method (m_voiceFilter, MS_FILTER_SET_SAMPLE_RATE, &rate); - m_voiceTicker=ms_ticker_new(); - - m_voiceRecorder = ms_filter_new(MS_FILE_REC_ID); - ms_filter_call_method(m_voiceRecorder,MS_FILE_REC_OPEN, QFile::encodeName(m_currentVoiceClipName).data ()); - ms_filter_call_method_noarg(m_voiceRecorder,MS_FILE_REC_START); - ms_filter_call_method (m_voiceRecorder, MS_FILTER_SET_SAMPLE_RATE, &rate); - - ms_filter_link(m_voiceFilter,0,m_voiceRecorder,0); - - ms_ticker_attach(m_voiceTicker,m_voiceFilter); - if(!m_voiceTimer) - { - m_voiceTimer = new QTimer(this); - connect(m_voiceTimer, SIGNAL(timeout()), this, SLOT(slotSendVoiceStopRecTimeout())); - m_voiceTimer->start (15 * 1000); - } -#endif -} - -void -WlmChatSession::slotSendVoiceStopRecTimeout() -{ -#ifdef HAVE_MEDIASTREAMER - if(m_voiceTimer) - { - Kopete::Message msg = Kopete::Message (); - msg.setPlainBody (i18n ("The maximum recording time is 15 seconds")); - msg.setDirection (Kopete::Message::Internal); - appendMessage (msg); - slotSendVoiceStopRec(); - } -#endif -} - -void -WlmChatSession::slotSendVoiceStopRec() -{ -#ifdef HAVE_MEDIASTREAMER - if(m_actionVoice) - m_actionVoice->menu()->hide(); - if(m_voiceTimer) - { - m_voiceTimer->stop(); - m_voiceTimer->deleteLater(); - m_voiceTimer = NULL; - } - if(m_voiceRecorder) - ms_filter_call_method_noarg(m_voiceRecorder,MS_FILE_REC_CLOSE); - if(m_voiceTicker && m_voiceFilter) - ms_ticker_detach(m_voiceTicker,m_voiceFilter); - if(m_voiceFilter && m_voiceRecorder) - ms_filter_unlink(m_voiceFilter,0,m_voiceRecorder,0); - if(m_voiceFilter) - ms_filter_destroy(m_voiceFilter); - if(m_voiceTicker) - ms_ticker_destroy(m_voiceTicker); - if(m_voiceRecorder) - ms_filter_destroy(m_voiceRecorder); - - m_voiceRecorder=NULL; - m_voiceTicker=NULL; - m_voiceFilter=NULL; - - if(m_currentVoiceClipName.isEmpty()) - return; - - // average size of a 0.5 second voice clip - if(QFile(m_currentVoiceClipName).size() < 15000) - { - Kopete::Message msg = Kopete::Message (); - msg.setPlainBody (i18n ("The voice clip must be longer")); - msg.setDirection (Kopete::Message::Internal); - appendMessage (msg); - m_currentVoiceClipName = QString(); - return; - } - - if(getChatService () && isReady()) - { - std::string obj; - - // keep a local file without the conversion to siren. - // we use KTemporaryFile to generate a random file name - KTemporaryFile voiceClip; - voiceClip.setPrefix("kopete_voiceClip-"); - voiceClip.setSuffix(".wav"); - voiceClip.setAutoRemove(false); - voiceClip.open(); - QString localVoice = voiceClip.fileName(); - addFileToRemove(voiceClip.fileName()); - voiceClip.close(); - // copy will not overwrite the file, so we need to delete it - voiceClip.remove(); - QFile::copy(m_currentVoiceClipName, localVoice); - - QByteArray localFileName = QFile::encodeName(m_currentVoiceClipName); - getChatService ()->myNotificationServer()->msnobj.addMSNObject(localFileName.constData (),11); - getChatService ()->myNotificationServer()->msnobj.getMSNObjectXML(localFileName.constData (), 11, obj); - getChatService ()->sendVoiceClip(obj); - - Kopete::Message kmsg( myself(), members() ); - kmsg.setType(Kopete::Message::TypeVoiceClipRequest); - kmsg.setDirection( Kopete::Message::Outbound ); - kmsg.setFileName(localVoice); - appendMessage ( kmsg ); - } - else if (!isReady () && !isConnecting ()) - { - m_pendingVoices.append (m_currentVoiceClipName); - requestChatService (); - } - else if(isConnecting ()) - { - m_pendingVoices.append (m_currentVoiceClipName); - } - m_currentVoiceClipName = QString(); -#endif -} - -void -WlmChatSession::slotSendFile () -{ - qobject_cast < WlmContact * >(members ().first ())->sendFile (); -} - -void -WlmChatSession::slotInviteContact (Kopete::Contact * contact) -{ - // if we have a session, just invite the new contact - if (isReady ()) - { - getChatService ()->inviteUser (contact->contactId ().toLatin1 ().constData ()); - return; - } - // if we are not in a session or connecting, add this contact to be invited later - if (!isReady () && !isConnecting ()) - { - m_pendingInvitations.append (contact->contactId ()); - requestChatService (); - return; - } - // finally if we have a connection in progress, only add this user to be invited later - if (isConnecting ()) - m_pendingInvitations.append (contact->contactId ()); -} - -static void -printGifErrorMessage() -{ -#ifdef HAVE_GIFLIB -#ifdef HAVE_GIF_ERROR_STRING // giflib 4.2.0+ -#if GIFLIB_MAJOR >= 5 - fprintf(stderr, "GIF-LIB error (exact reporting not implemented)\n"); -#else - const char * errorString = GifErrorString(); - if (errorString) - fprintf(stderr, "GIF-LIB error: %s\n", errorString); - else - fprintf(stderr, "GIF-LIB undefined error: %d\n", GifError()); -#endif -#else // older giflib versions, libungif - PrintGifError(); -#endif // HAVE_GIF_ERROR_STRING -#endif // HAVE_GIFLIB -} - -static int -closeGif(GifFileType* file) -{ -#if ((GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1) || GIFLIB_MAJOR > 5) - return EGifCloseFile(file, NULL); -#else - return EGifCloseFile(file); -#endif -} - -/* stolen from kpaint write_to_gif() */ -void -WlmChatSession::convertToGif( const QPixmap & ink, QString filename) -{ -#ifdef HAVE_GIFLIB -#if GIFLIB_MAJOR >= 5 -#define FreeMapObject GifFreeMapObject -#define MakeMapObject GifMakeMapObject -#endif - int i, status; - GifFileType *GifFile; - ColorMapObject *screenColourmap; - ColorMapObject *imageColourmap; - QImage img = ink.toImage().convertToFormat(QImage::Format_Indexed8); - - imageColourmap= MakeMapObject(256, NULL); - if (!imageColourmap) { - return; - } - - screenColourmap= MakeMapObject(256, NULL); - if (!screenColourmap) { - return; - } - - for (i= 0; i < 256; i++) { - if (i Colors[i].Red= qRed(img.color(i)); - imageColourmap->Colors[i].Green= qGreen(img.color(i)); - imageColourmap->Colors[i].Blue= qBlue(img.color(i)); - } - else { - imageColourmap->Colors[i].Red= 0; - imageColourmap->Colors[i].Green= 0; - imageColourmap->Colors[i].Blue= 0; - } - } - - for (i= 0; i < 256; i++) { - if (i Colors[i].Red= qRed(img.color(i)); - screenColourmap->Colors[i].Green= qGreen(img.color(i)); - screenColourmap->Colors[i].Blue= qBlue(img.color(i)); - } - else { - screenColourmap->Colors[i].Red= 0; - screenColourmap->Colors[i].Green= 0; - screenColourmap->Colors[i].Blue= 0; - } - } - -#if GIFLIB_MAJOR >= 5 - GifFile= EGifOpenFileName(QFile::encodeName(filename).constData(), 0, NULL); -#else - GifFile= EGifOpenFileName(QFile::encodeName(filename).constData(), 0); -#endif - if (!GifFile) { - FreeMapObject(imageColourmap); - FreeMapObject(screenColourmap); - return; - } - - status= EGifPutScreenDesc(GifFile, - img.width(), - img.height(), - 256, - 0, - screenColourmap); - - if (status != GIF_OK) { - closeGif(GifFile); - return; - } - - status= EGifPutImageDesc(GifFile, - 0, 0, - img.width(), - img.height(), - 0, - imageColourmap); - - if (status != GIF_OK) { - return; - } - - for (i = 0; status && (i < img.height()); i++) { - status= EGifPutLine(GifFile, - img.scanLine(i), - img.width()); - } - - if (status != GIF_OK) { - printGifErrorMessage(); - closeGif(GifFile); - return; - } - - if (closeGif(GifFile) != GIF_OK) { - printGifErrorMessage(); - return; - } - return; -#endif -} - -void -WlmChatSession::slotSendInk ( const QPixmap & ink) -{ - KTemporaryFile inkImage; - inkImage.setPrefix("inkformatgif-"); - inkImage.setSuffix(".gif"); - inkImage.open(); - // if we autoremove the image, it will be deleted before - // khtml have the chance to show it on the screen. - inkImage.setAutoRemove(false); - QString name = inkImage.fileName(); - addFileToRemove(name); - convertToGif(ink, name); - - // encode to base64 and send it to libmsn - QByteArray draw = KCodecs::base64Encode(inkImage.readAll()); - if(!isReady() && !isConnecting()) - { - m_pendingInks << draw; - requestChatService (); - } - else if (isConnecting ()) - m_pendingInks << draw; - else - getChatService ()->sendInk(draw.constData()); - - QString msg=QString ("").arg ( name ); - - Kopete::Message kmsg( myself(), members() ); - kmsg.setHtmlBody( msg ); - kmsg.setDirection( Kopete::Message::Outbound ); - appendMessage ( kmsg ); - - inkImage.deleteLater(); -} - -void -WlmChatSession::slotActionInviteAboutToShow () -{ - // We can't simply insert QAction in this menu bebause we don't know when to delete them. - // items inserted with insert items are automatically deleted when we call clear - - qDeleteAll (m_inviteactions); - m_inviteactions.clear (); - - m_actionInvite->menu ()->clear (); - - QHash < QString, Kopete::Contact * >contactList = account ()->contacts(); - QHash < QString, Kopete::Contact * >::Iterator it, itEnd = - contactList.end (); - for (it = contactList.begin (); it != itEnd; ++it) - { - if (!members ().contains (it.value ()) && it.value ()->isOnline ()) - { - QAction *a = - new Kopete::UI::ContactAction (it.value (), - actionCollection ()); - connect( a, SIGNAL(triggered(Kopete::Contact*,bool)), - this, SLOT(slotInviteContact(Kopete::Contact*)) ); - - m_actionInvite->addAction (a); - m_inviteactions.append (a); - } - } - - // We can't simply insert QAction in this menu bebause we don't know when to delete them. - // items inserted with insert items are automatically deleted when we call clear -/* - m_inviteactions.setAutoDelete(true); - m_inviteactions.clear(); - - m_actionInvite->popupMenu()->clear(); - - QListIterator it( account()->contacts() ); - for( ; it.current(); ++it ) - { - if( !members().contains( it.current() ) && it.current()->isOnline() && it.current() != myself() ) - { - QAction *a=new KopeteContactAction( it.current(), this, - SLOT(slotInviteContact(Kopete::Contact*)), m_actionInvite ); - m_actionInvite->insert( a ); - m_inviteactions.append( a ) ; - } - } -// QAction *b=new QAction( i18n ("Other..."), 0, this, SLOT(slotInviteOtherContact()), m_actionInvite, "actionOther" ); -// m_actionInvite->insert( b ); -// m_inviteactions.append( b ) ; -*/ -} - -void -WlmChatSession::sendNudge () -{ - if (isReady ()) - { - getChatService ()->sendNudge (); - Kopete::Message msg = Kopete::Message (myself (), members ()); - msg.setDirection (Kopete::Message::Outbound); - msg.setType (Kopete::Message::TypeAction); - msg.setPlainBody (i18n ("has sent a nudge")); - - appendMessage (msg); - return; - } - - if (!isConnecting ()) - { - setSendNudge (true); - requestChatService (); - } -} - -WlmChatSession::~WlmChatSession () -{ - if (!account ()) - return; - - WlmAccount *acc = qobject_cast < WlmAccount * >(account ()); - - if (!acc) - return; - - WlmChatManager *manager = acc->chatManager (); - - if (manager && getChatService ()) - manager->chatSessions.remove (getChatService ()); - - stopSendKeepAlive(); - - if (isReady () && getChatService ()) - { - delete getChatService (); - setChatService(NULL); - } - for (int i = 0; i < m_filesToRemove.size(); ++i) - QFile::remove(m_filesToRemove.at(i)); -} - -void -WlmChatSession::addFileToRemove (QString path) -{ - m_filesToRemove << path; -} - -bool -WlmChatSession::isConnecting() -{ - if(!getChatService ()) - return false; - - if(getChatService()->connectionState () != - MSN::SwitchboardServerConnection::SB_READY && - getChatService ()->connectionState () != - MSN::SwitchboardServerConnection::SB_DISCONNECTED) - return true; - return false; -} - -void -WlmChatSession::setChatService (MSN::SwitchboardServerConnection * conn) -{ - m_chatService = conn; - if (!getChatService()) - { - setReady (false); - return; - } - if (getChatService () - && getChatService ()->connectionState () == - MSN::SwitchboardServerConnection::SB_READY) - { - setReady (true); - } -} - -MSN::Message WlmChatSession::parseMessage(Kopete::Message & msg) -{ - // send the message and wait for the ACK - int fontEffects = 0; - MSN::Message mmsg(msg.plainBody().toUtf8().constData()); - - // FIXME: Can we add FontFamily FF_DONTCARE ? - if (msg.format() == Qt::RichText) - { - mmsg.setFontName(msg.font().family().toLatin1().constData()); - if (msg.font().bold()) - fontEffects |= MSN::Message::BOLD_FONT; - if (msg.font().italic()) - fontEffects |= MSN::Message::ITALIC_FONT; - if (msg.font().underline()) - fontEffects |= MSN::Message::UNDERLINE_FONT; - if (msg.font().strikeOut()) - fontEffects |= MSN::Message::STRIKETHROUGH_FONT; - - mmsg.setFontEffects(fontEffects); - QColor color = msg.foregroundColor(); - mmsg.setColor(color.red(), color.green(), color.blue()); - } - - WlmAccount *acc = qobject_cast < WlmAccount * >(account ()); - if(!acc) - return mmsg; - - if(!acc->doNotSendEmoticons()) - { - // stolen from msn plugin - const QHash emap = Kopete::Emoticons::self()->theme().emoticonsMap(); - - // Check the list for any custom emoticons - for (QHash::const_iterator itr = emap.begin(); itr != emap.end(); ++itr) - { - for (QStringList::const_iterator itr2 = itr.value().constBegin(); itr2 != itr.value().constEnd(); ++itr2) - { - if (msg.plainBody().contains(*itr2)) - { - getChatService()->sendEmoticon((*itr2).toUtf8().constData(), QFile::encodeName(itr.key()).constData()); - } - } - } - } - return mmsg; -} - -void -WlmChatSession::setReady (bool value) -{ - Q_UNUSED( value ); - - if (isReady ()) - { - m_tries = 0; - if (isDownloadDisplayPicture ()) - { - setDownloadDisplayPicture (false); - requestDisplayPicture (); - } - if (isSendNudge ()) - { - sendNudge (); - setSendNudge (false); - } - - // invite pending contacts - QLinkedList < QString >::iterator it; - for (it = m_pendingInvitations.begin (); - it != m_pendingInvitations.end (); ++it) - { - WlmContact * c = qobject_cast(account ()->contacts().value(*it)); - if (c) - slotInviteContact (c); - } - m_pendingInvitations.clear (); - - // send queued messages first - QLinkedList < Kopete::Message >::iterator it2; - for (it2 = m_messagesQueue.begin (); it2 != m_messagesQueue.end (); - ++it2) - { - MSN::Message mmsg = parseMessage(*it2); - - int trid = getChatService ()->sendMessage (&mmsg); - - m_messagesSentQueue[trid] = (*it2); - } - m_messagesQueue.clear (); - - // send pending files - QLinkedList < QString >::iterator it3; - for (it3 = m_pendingFiles.begin (); it3 != m_pendingFiles.end (); - ++it3) - { - sendFile ((*it3), 0); - } - m_pendingFiles.clear (); - - QLinkedList < QByteArray >::iterator it4; - for (it4 = m_pendingInks.begin (); it4 != m_pendingInks.end (); ++it4) - { - getChatService ()->sendInk((*it4).constData()); - } - m_pendingInks.clear (); - -#ifdef HAVE_MEDIASTREAMER - QLinkedList < QString >::iterator it5; - for (it5 = m_pendingVoices.begin (); it5 != m_pendingVoices.end (); - ++it5) - { - std::string obj; - - // keep a local file without the conversion to siren. - KTemporaryFile voiceClip; - voiceClip.setPrefix("kopete_voiceClip-"); - voiceClip.setSuffix(".wav"); - voiceClip.setAutoRemove(false); - voiceClip.open(); - addFileToRemove(voiceClip.fileName()); - QString localVoice = voiceClip.fileName(); - voiceClip.close(); - // copy will not overwrite the file, so we need to delete it - voiceClip.remove(); - QFile::copy((*it5), localVoice); - - QByteArray localFileName = QFile::encodeName( (*it5) ); - getChatService ()->myNotificationServer()->msnobj.addMSNObject(localFileName.constData (),11); - getChatService ()->myNotificationServer()->msnobj.getMSNObjectXML(localFileName.constData (), 11, obj); - getChatService ()->sendVoiceClip(obj); - - Kopete::Message kmsg( myself(), members() ); - kmsg.setType(Kopete::Message::TypeVoiceClipRequest); - kmsg.setDirection( Kopete::Message::Outbound ); - kmsg.setFileName(localVoice); - appendMessage ( kmsg ); - } - m_pendingVoices.clear (); - m_currentVoiceClipName = QString(); -#endif - } - else - { - stopSendKeepAlive(); - } -} - -bool -WlmChatSession::requestChatService () -{ - // check if the other contact is offline - if (members ().count () > 0 && - members ().first ()->onlineStatus () == - WlmProtocol::protocol ()->wlmOffline) - return false; - - if (!isReady () && account ()->isConnected () && !isConnecting () && !m_chatServiceRequested) - { - const std::string rcpt_ = members().first()->contactId().toLatin1().constData(); - const std::string msg_ = ""; - const std::pair *ctx = new std::pair(rcpt_, msg_); - // request a new switchboard connection - static_cast (account ())->server ()->cb.mainConnection->requestSwitchboardConnection (ctx); - QTimer::singleShot (30 * 1000, this, SLOT (switchboardConnectionTimeout())); - // if the user attempts to send more than one message a new sb - // is requested every time unless we received one in the mean - // time and the other client has already joined - m_chatServiceRequested = true; - return true; - } - // probably we are about to connect - return true; -} - -void -WlmChatSession::switchboardConnectionTimeout () -{ - if (!isReady ()) - { - // allow a new chat service request - m_chatServiceRequested = false; - // try 3 times - if (m_tries < 3) - { - m_tries++; - requestChatService (); - return; - } - Kopete::Utils::notifyCannotConnect(account(), "Could not open switchboard connection"); - - QMap::const_iterator i; - for (i = m_messagesSentQueue.constBegin(); i != m_messagesSentQueue.constEnd(); ++i) - this->receivedMessageState(i->id(), Kopete::Message::StateError ); - - messageSucceeded (); - } -} - -void -WlmChatSession::messageTimeout () -{ - int trid = m_messagesTimeoutQueue.takeFirst(); - if(m_messagesSentQueue.contains(trid)) - this->receivedMessageState(m_messagesSentQueue[trid].id(), Kopete::Message::StateError ); -} - -void -WlmChatSession::slotMessageSent (Kopete::Message & msg, - Kopete::ChatSession * chat) -{ - Q_UNUSED( chat ); - if (!account ()->isConnected ()) - { - KMessageBox::queuedMessageBox (Kopete::UI::Global::mainWidget (), - KMessageBox::Information, - "You cannot send a message while in offline status", - "Information"); - messageSucceeded (); - return; - } - - if (isReady ()) - { - MSN::Message mmsg = parseMessage(msg); - - int trid = getChatService ()->sendMessage (&mmsg); - - // Show the message we just sent in the chat window as sending - msg.setState( Kopete::Message::StateSending ); - this->appendMessage(msg); - this->messageSucceeded(); - - m_messagesSentQueue[trid] = msg; - m_messagesTimeoutQueue.append(trid); - QTimer::singleShot (60 * 1000, this, - SLOT (messageTimeout())); - return; - } - - if (!isConnecting () && !isReady ()) - { - // request switchboard - if (!requestChatService ()) - { - MSN::Soap::OIM oim; - oim.myFname = myself ()->displayName ().toUtf8().constData(); - oim.toUsername = members ().first ()->contactId ().toLatin1 ().constData(); - oim.message = msg.plainBody ().toUtf8 ().constData(); - oim.myUsername = myself ()->contactId ().toLatin1 ().constData(); - oim.id = m_oimid++; - - static_cast (account ())->server ()->cb.mainConnection->send_oim (oim); - appendMessage (msg); - messageSucceeded (); - return; - } - - // Show the message we just sent in the chat window as sending - msg.setState( Kopete::Message::StateSending ); - this->appendMessage(msg); - this->messageSucceeded(); - - // put the message in a queue - m_messagesQueue.append (msg); - return; - } - - if (isConnecting ()) - { - // Show the message we just sent in the chat window as sending - msg.setState( Kopete::Message::StateSending ); - this->appendMessage(msg); - this->messageSucceeded(); - - // put the message in the queue, we are trying to connect to the - // switchboard server - m_messagesQueue.append (msg); - return; - } - -} -bool -WlmChatSession::isReady () -{ - if(!getChatService ()) - return false; - - // check in libmsn if we are really ready - if(getChatService ()->connectionState () == - MSN::SwitchboardServerConnection::SB_READY) - return true; - else - return false; -} - -void -WlmChatSession::sendTypingMsg (bool istyping) -{ - if (!istyping || isConnecting ()) - return; - - // do not send notification if we - // are alone in the session - if (!isReady ()) - return; - - getChatService ()->sendTypingNotification (); - - startSendKeepAlive(); -} - -void -WlmChatSession::messageSentACK (unsigned int trID) -{ - this->receivedMessageState(m_messagesSentQueue[trID].id(), Kopete::Message::StateSent ); - - m_messagesSentQueue.remove (trID); - // remove the blinking icon when there are no messages - // waiting for delivery - if (m_messagesSentQueue.empty ()) - messageSucceeded (); -} - -void -WlmChatSession::startSendKeepAlive() -{ - // send keepalive each 50 seconds. - if(m_keepalivetimer && isReady()) - m_keepalivetimer->start (50 * 1000); -} - -void -WlmChatSession::stopSendKeepAlive() -{ - if(m_keepalivetimer) - m_keepalivetimer->stop (); -} - -void -WlmChatSession::receivedNudge (QString passport) -{ - WlmContact * c = qobject_cast(account ()->contacts().value(passport)); - if (!c) - c = qobject_cast(members ().first ()); - - Kopete::Message msg = Kopete::Message (c, myself ()); - msg.setPlainBody (i18n ("has sent you a nudge")); - msg.setDirection (Kopete::Message::Inbound); - msg.setType (Kopete::Message::TypeAction); - appendMessage (msg); - emitNudgeNotification (); // notifies with system message close to tray icon - startSendKeepAlive(); - -} - -void -WlmChatSession::requestDisplayPicture () -{ - // only request picture in a 2 session people only - if (members ().count () != 1) - return; - - WlmContact *contact = qobject_cast < WlmContact * >(members ().first ()); - - if (!contact) - return; - - if (contact->getMsnObj ().isEmpty () || contact->getMsnObj () == "0") - return; - - QString msnobj = contact->getMsnObj (); - - QDomDocument xmlobj; - xmlobj.setContent (msnobj); - - // track display pictures by SHA1D field - QString SHA1D = xmlobj.documentElement ().attribute ("SHA1D"); - - if (SHA1D.isEmpty ()) - return; - - QString currentSHA1D = contact->property(WlmProtocol::protocol()->displayPhotoSHA1).value().toString(); - QString photoPath = contact->property(Kopete::Global::Properties::self()->photo().key()).value().toString(); - if (SHA1D == currentSHA1D && QFileInfo(photoPath).size() > 0) - return; - - // request switchboard connection - // and ask for the display picture - if (!isReady () && !isConnecting ()) - { - requestChatService (); - setDownloadDisplayPicture (true); - return; // TODO - schedule this action - } - if (isReady ()) - { - QString newlocation = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1Char('/') + "wlmpictures/" + QString(SHA1D.replace ('/', '_')); - getChatService()->requestDisplayPicture(generateSessionID(), QFile::encodeName(newlocation).constData(), - contact->getMsnObj().toUtf8().constData()); - setDownloadDisplayPicture (false); - } -} - diff --git a/protocols/wlm/wlmchatsession.h b/protocols/wlm/wlmchatsession.h deleted file mode 100644 index 63f6cf393..000000000 --- a/protocols/wlm/wlmchatsession.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - wlmchatsession.h - Wlm Message Manager - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2005 by the Kopete developers - - ************************************************************************* - * * - * 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMCHATSESSION_H -#define WLMCHATSESSION_H - -#include -#include -#include -#include - -#include -#include -#include - -#include "kopetechatsession.h" -#include "wlmchatsessioninkaction.h" - -#include - -#ifdef HAVE_MEDIASTREAMER -#include -#include -#include -#include -#endif - - -class WlmChatSession: public Kopete::ChatSession -{ - Q_OBJECT - public: - WlmChatSession (Kopete::Protocol * protocol, const Kopete::Contact * user, - Kopete::ContactPtrList others, - MSN::SwitchboardServerConnection * conn = NULL); - virtual ~WlmChatSession (); - void setReady (bool value); - bool isReady (); - void addFileToRemove(QString path); - void setChatService (MSN::SwitchboardServerConnection * conn); - bool isConnecting(); - MSN::SwitchboardServerConnection * getChatService () - { - return m_chatService; - } - void messageSentACK (unsigned int trID); - bool requestChatService (); - void requestDisplayPicture (); - void - setDownloadDisplayPicture (bool a) - { - m_downloadDisplayPicture = a; - } - bool - isDownloadDisplayPicture () - { - return m_downloadDisplayPicture; - } - void - setSendNudge (bool a) - { - m_sendNudge = a; - } - bool - isSendNudge () - { - return m_sendNudge; - } - void receivedNudge (QString passport); - void sendFile (const QString & fileLocation, long unsigned int fileSize); - virtual void inviteContact (const QString &); - void startSendKeepAlive(); - void stopSendKeepAlive(); - unsigned int generateSessionID(); - QMap < QString, QString > emoticonsList; - void convertToGif( const QPixmap & ink, QString filename); - - private slots: - void slotMessageSent (Kopete::Message & message, Kopete::ChatSession * kmm); - void sendTypingMsg (bool istyping); - void sendNudge (); - void switchboardConnectionTimeout (); - void slotActionInviteAboutToShow (); - void slotInviteContact (Kopete::Contact * contact); - void slotSendInk ( const QPixmap &); - void slotSendVoiceStartRec(); - void slotSendVoiceStopRec(); - void slotSendVoiceStopRecTimeout(); - void slotSendFile (); - void sendKeepAlive (); - void messageTimeout(); - - private: - MSN::Message parseMessage(Kopete::Message & msg); - - MSN::SwitchboardServerConnection * m_chatService; - bool m_downloadDisplayPicture; - bool m_sendNudge; - bool m_chatServiceRequested; - int m_tries; - int m_oimid; - int m_sessionID; - QString m_lastMsnObj; - QLinkedList < Kopete::Message > m_messagesQueue; - QMap < unsigned int, Kopete::Message > m_messagesSentQueue; - QLinkedList < int > m_messagesTimeoutQueue; - QLinkedList < QString > m_pendingInvitations; - QLinkedList < QString > m_pendingFiles; - QLinkedList < QByteArray > m_pendingInks; - QAction * m_actionNudge; - WlmChatSessionInkAction * m_actionInk; - KActionMenu * m_actionInvite; - QList < QAction * > m_inviteactions; - QTimer * m_keepalivetimer; - QStringList m_filesToRemove; - -#ifdef HAVE_MEDIASTREAMER - KActionMenu * m_actionVoice; - QString m_currentVoiceClipName; - QTimer *m_voiceTimer; - QLinkedList < QString > m_pendingVoices; - - MSFilter *m_voiceFilter; - MSSndCard *m_voiceCardCapture; - MSTicker *m_voiceTicker; - MSFilter *m_voiceRecorder; -#endif - -}; - -#endif - diff --git a/protocols/wlm/wlmchatsessioninkaction.cpp b/protocols/wlm/wlmchatsessioninkaction.cpp deleted file mode 100644 index dab1b111f..000000000 --- a/protocols/wlm/wlmchatsessioninkaction.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/* - wlmchatsessioninkaction.cpp - Kopete Wlm Protocol - - Copyright (c) 2009 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#include "wlmchatsessioninkaction.h" - -#include - -#include -#include -#include - -#include "wlmchatsessioninkarea.h" -#include "ui_wlmchatsessioninkpopup.h" - -class WlmChatSessionInkAction::WlmChatSessionInkActionPrivate -{ -public: - WlmChatSessionInkActionPrivate() - { - m_popup = new QMenu(0L); - m_sessionInk = new QWidget; - Ui::InkWindow ui; - ui.setupUi(m_sessionInk); - m_sessionInk->setObjectName( QLatin1String("WlmChatSessionInkActionPrivate::m_sessionInk") ); - QWidgetAction *act = new QWidgetAction(m_popup); - act->setDefaultWidget(m_sessionInk); - m_popup->addAction(act); - } - - ~WlmChatSessionInkActionPrivate() - { - delete m_popup; - m_popup = 0; - delete m_sessionInk; - m_sessionInk = 0; - } - - QMenu *m_popup; - QWidget *m_sessionInk; -}; - -WlmChatSessionInkAction::WlmChatSessionInkAction( QObject* parent ) - : KActionMenu( i18n( "Send Ink" ), parent ) -{ - d = new WlmChatSessionInkActionPrivate; - setMenu( d->m_popup ); - - setIcon( QIcon::fromTheme(QStringLiteral("application-pgp-signature")) ); - QList sessionInkList = d->m_sessionInk->findChildren(); - WlmChatSessionInkArea *inkArea = sessionInkList.first(); - if(inkArea) - { - connect( inkArea, SIGNAL(sendInk(QPixmap)), - this, SIGNAL(sendInk(QPixmap)) ); - connect( inkArea, SIGNAL(raiseInkWindow()), - this, SLOT(raiseInkWindow()) ); - } -} - -void WlmChatSessionInkAction::raiseInkWindow() -{ - menu()->exec(); -} - -WlmChatSessionInkAction::~WlmChatSessionInkAction() -{ - delete d; - d = NULL; -} - diff --git a/protocols/wlm/wlmchatsessioninkaction.h b/protocols/wlm/wlmchatsessioninkaction.h deleted file mode 100644 index f0a707824..000000000 --- a/protocols/wlm/wlmchatsessioninkaction.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - wlmchatsessioninkaction.h - Kopete Wlm Protocol - - Copyright (c) 2009 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ -#ifndef WLMCHATSESSIONINKACTION_H -#define WLMCHATSESSIONINKACTION_H - -#include -#include -#include - -class WlmChatSessionInkAction : public KActionMenu -{ - Q_OBJECT - public: - WlmChatSessionInkAction(QObject * parent = 0); - virtual ~WlmChatSessionInkAction(); - signals: - void sendInk( const QPixmap & ink ); - private: - class WlmChatSessionInkActionPrivate; - WlmChatSessionInkActionPrivate *d; - public slots: - void raiseInkWindow(); -}; -#endif diff --git a/protocols/wlm/wlmchatsessioninkarea.cpp b/protocols/wlm/wlmchatsessioninkarea.cpp deleted file mode 100644 index fba37c9ad..000000000 --- a/protocols/wlm/wlmchatsessioninkarea.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - wlmchatsessioninkarea.cpp - Kopete Wlm Protocol - - Copyright (c) 2009 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#include "wlmchatsessioninkarea.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -WlmChatSessionInkArea::WlmChatSessionInkArea(QWidget * parent) -: QWidget(parent), - m_pen(Qt::black, 3), - m_buffer(350, 100), - mousePressed( FALSE ) -{ - setFixedSize(350,100); - m_buffer.fill(Qt::white); -} - -void WlmChatSessionInkArea::slotChangePenSize(int size) -{ - m_pen.setWidth(size); -} - -void WlmChatSessionInkArea::slotClear() -{ - m_polyline.clear(); - m_buffer.fill(Qt::white); - update(); -} - -void WlmChatSessionInkArea::slotColor() -{ - m_pen.setColor(QColorDialog::getColor(m_pen.color(), this, i18n("Select the pen's color"))); - emit raiseInkWindow(); -} - -void WlmChatSessionInkArea::slotSend() -{ - QRect r = QRegion(QBitmap::fromImage(m_buffer.toImage())).boundingRect(); - QPixmap buffer_tmp = m_buffer.copy(r); - emit sendInk(buffer_tmp); - slotClear(); - if ( isVisible() && parentWidget() && - parentWidget()->inherits("QMenu") ) - { - parentWidget()->close(); - } -} - -void WlmChatSessionInkArea::paintEvent(QPaintEvent *) -{ - QPainter painter(&m_buffer); - painter.setPen( m_pen ); - painter.drawPolyline(m_polyline); - - QPainter paint(this); - paint.drawPixmap(0, 0, 350, 100, m_buffer); -} - -void WlmChatSessionInkArea::mousePressEvent( QMouseEvent *e ) -{ - mousePressed = TRUE; - m_polyline << e->pos(); - update(); -} - -void WlmChatSessionInkArea::mouseReleaseEvent( QMouseEvent * ) -{ - mousePressed = FALSE; - m_polyline.clear(); - update(); -} - -void WlmChatSessionInkArea::mouseMoveEvent( QMouseEvent *e ) -{ - if ( mousePressed ) { - m_polyline << e->pos(); - update(); - } -} - -WlmChatSessionInkArea::~WlmChatSessionInkArea() -{ -} - diff --git a/protocols/wlm/wlmchatsessioninkarea.h b/protocols/wlm/wlmchatsessioninkarea.h deleted file mode 100644 index 4b1fbbc4e..000000000 --- a/protocols/wlm/wlmchatsessioninkarea.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - wlmchatsessioninkarea.h - Kopete Wlm Protocol - - Copyright (c) 2009 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ -#ifndef WLMCHATSESSIONINKAREA_H -#define WLMCHATSESSIONINKAREA_H - -#include -#include -#include -#include - -class WlmChatSessionInkArea : public QWidget -{ - Q_OBJECT - public: - WlmChatSessionInkArea(QWidget * parent = 0); - virtual ~WlmChatSessionInkArea(); - private: - void paintEvent(QPaintEvent * ); - protected: - void mousePressEvent( QMouseEvent *e ); - void mouseReleaseEvent( QMouseEvent *e ); - void mouseMoveEvent( QMouseEvent *e ); - QPen m_pen; - QPolygon m_polyline; - QPixmap m_buffer; - - bool mousePressed; -signals: - void sendInk( const QPixmap &); - void raiseInkWindow(); - void closeWindow(); -public slots: - void slotChangePenSize(int size); - void slotClear(); - void slotSend(); - void slotColor(); -}; -#endif - diff --git a/protocols/wlm/wlmchatui.rc b/protocols/wlm/wlmchatui.rc deleted file mode 100644 index 8e10370f1..000000000 --- a/protocols/wlm/wlmchatui.rc +++ /dev/null @@ -1,17 +0,0 @@ - - - - - &Chat - - - - - - - - - - - - diff --git a/protocols/wlm/wlmcontact.cpp b/protocols/wlm/wlmcontact.cpp deleted file mode 100644 index c5890ba93..000000000 --- a/protocols/wlm/wlmcontact.cpp +++ /dev/null @@ -1,491 +0,0 @@ -/* - wlmcontact.cpp - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#include "wlmcontact.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "kopeteaccount.h" -#include "kopetechatsessionmanager.h" -#include "kopetemetacontact.h" -#include "kopeteuiglobal.h" -#include "kopetegroup.h" - -#include "ui_wlminfo.h" -#include "wlmaccount.h" -#include "wlmprotocol.h" - -WlmContact::WlmContact (Kopete::Account * _account, - const QString & uniqueName, - const QString & contactSerial, - Kopete::MetaContact * parent): -Kopete::Contact (_account, uniqueName, parent) -{ - kDebug (14210) << k_funcinfo << " uniqueName: " << uniqueName; - m_msgManager = 0L; - m_account = qobject_cast(account()); - setFileCapable (true); - setOnlineStatus (WlmProtocol::protocol ()->wlmOffline); - m_contactSerial = contactSerial; - m_disabled = false; - m_dontShowEmoticons = false; - - if ( metaContact() ) - m_currentGroup = metaContact()->groups().first(); - - m_actionBlockContact = new KToggleAction(QIcon::fromTheme(QStringLiteral("wlm_blocked")), i18n("Block Contact"), this ); - QObject::connect( m_actionBlockContact, SIGNAL(triggered(bool)), this, SLOT(blockContact(bool)) ); - - m_actionShowProfile = new QAction(i18n("Show Profile"), this); - QObject::connect(m_actionShowProfile, SIGNAL(triggered(bool)), this, SLOT(slotShowProfile())); - - m_actionUpdateDisplayPicture = new QAction(i18n("Update Photo"), this); - QObject::connect(m_actionUpdateDisplayPicture, SIGNAL(triggered(bool)), this, SLOT(slotUpdateDisplayPicture())); - - m_actionDontShowEmoticons = new KToggleAction (QIcon::fromTheme(QStringLiteral("wlm_fakefriend")), - i18n ("&Block custom emoticons"), this); - QObject::connect (m_actionDontShowEmoticons, SIGNAL(triggered(bool)), this, SLOT(slotDontShowEmoticons(bool))); -} - -void WlmContact::slotDontShowEmoticons(bool block) -{ - m_actionDontShowEmoticons->setChecked(block); - m_dontShowEmoticons = block; -} - -bool WlmContact::dontShowEmoticons() -{ - return m_dontShowEmoticons; -} - -void WlmContact::setDisabled(bool disabled, bool updateServer) -{ - WlmAccount* acc = qobject_cast(account()); - if(!acc) - return; - - if(disabled) - { - // already disabled - if(isDisabled()) - return; - - m_disabled = true; - - if(!metaContact()) - return; - - metaContact()->setTemporary(m_disabled); - - setOnlineStatus(WlmProtocol::protocol()->wlmOffline); - - if(updateServer && account ()->isConnected ()) - acc->server ()->mainConnection->disableContactOnAddressBook( m_contactSerial.toLatin1().constData(), contactId ().toLatin1().constData() ); - } - else - { - // already enabled - if(!isDisabled()) - return; - - m_disabled = false; - - if(!metaContact()) - return; - - metaContact()->setTemporary(m_disabled); - setOnlineStatus(WlmProtocol::protocol()->wlmOffline); - - if(updateServer && account ()->isConnected ()) - acc->server()->mainConnection->enableContactOnAddressBook(m_contactSerial.toLatin1().constData(), contactId().toLatin1().constData()); - } -} - -WlmContact::~WlmContact () -{ -} - -bool -WlmContact::isReachable () -{ - // always true, as we can send offline messages - return true; -} - -void -WlmContact::slotShowProfile() -{ - KToolInvocation::invokeBrowser(QString::fromLatin1("http://members.msn.com/default.msnw?mem=") + contactId()) ; -} - -void -WlmContact::slotUpdateDisplayPicture() -{ - if(!account()->isConnected()) - return; - - WlmAccount* acc = qobject_cast(account()); - if(!acc) - return; - - if ((onlineStatus() != WlmProtocol::protocol ()->wlmOffline) - && (onlineStatus() != WlmProtocol::protocol ()->wlmInvisible) - && (onlineStatus() != WlmProtocol::protocol ()->wlmUnknown)) - { - acc->chatManager ()->requestDisplayPicture (contactId()); - } - -} - -void -WlmContact::sendFile (const KUrl & sourceURL, const QString & fileName, - uint fileSize) -{ - Q_UNUSED( fileName ); - Q_UNUSED( fileSize ); - - QString filePath; - - if (!sourceURL.isValid ()) - filePath = - KFileDialog::getOpenFileName (KUrl (), "*", 0l, - i18n ("Kopete File Transfer")); - else - filePath = sourceURL.path (KUrl::RemoveTrailingSlash); - - if (!filePath.isEmpty ()) - { - quint32 fileSize = QFileInfo (filePath).size (); - //Send the file - static_cast - (manager (Kopete::Contact::CanCreate))->sendFile (filePath, - fileSize); - } -} - -void -WlmContact::serialize (QMap < QString, QString > &serializedData, - QMap < QString, QString > & /* addressBookData */ ) -{ - serializedData["displayPicture"] = - property (Kopete::Global::Properties::self ()->photo ()).value (). - toString (); - serializedData["contactSerial"] = m_contactSerial; - serializedData["dontShowEmoticons"] = m_dontShowEmoticons ? "true" : "false"; -} - -Kopete::ChatSession * - WlmContact::manager (Kopete::Contact::CanCreateFlags canCreate) -{ - Kopete::ContactPtrList chatmembers; - chatmembers.append (this); - - Kopete::ChatSession * _manager = - Kopete::ChatSessionManager::self ()-> - findChatSession (account ()->myself (), chatmembers, protocol ()); - WlmChatSession *manager = qobject_cast (_manager); - if (!manager && canCreate == Kopete::Contact::CanCreate) - { - manager = - new WlmChatSession (protocol (), account ()->myself (), - chatmembers); - } - return manager; -} - -QList < QAction * >* WlmContact::customContextMenuActions () //OBSOLETE -{ - QList *actions = new QList(); - - m_actionBlockContact->setEnabled(m_account->isConnected()); - m_actionBlockContact->setChecked(m_account->isContactBlocked(contactId())); - actions->append(m_actionBlockContact); - actions->append(m_actionShowProfile); - actions->append(m_actionUpdateDisplayPicture); - actions->append(m_actionDontShowEmoticons); - - // temporary action collection, used to apply Kiosk policy to the actions - KActionCollection tempCollection((QObject*)0); - tempCollection.addAction(QLatin1String("contactBlock"), m_actionBlockContact); - tempCollection.addAction(QLatin1String("contactViewProfile"), m_actionShowProfile); - tempCollection.addAction(QLatin1String("updateDisplayPicture"), m_actionUpdateDisplayPicture); - tempCollection.addAction(QLatin1String("dontShowEmoticons"), m_actionDontShowEmoticons); - - return actions; -} - -void WlmContact::sync(unsigned int flags) -{ - if (!account ()->isConnected ()) - return; - /* - * If the contact has changed groups, then we update the server. - */ - if( !metaContact() ) - return; - - // Don't add the contact if it's myself. - if(contactId() == account()->accountId()) - return; - - if ( (flags & Kopete::Contact::MovedBetweenGroup) == Kopete::Contact::MovedBetweenGroup ) - { - Kopete::Group* newGroup = metaContact()->groups().first(); - WlmAccount* acc = qobject_cast(account()); - if(!acc) - return; - - // if this contact is not in the contact list, add it - if(!acc->isOnServerSideList(contactId())) - { - acc->createContact(contactId(), metaContact()); - m_currentGroup = newGroup; - return; - } - - if(isDisabled()) - { - // enable this contact and update on server side - setDisabled(false,true); - } - - if(newGroup == m_currentGroup) - return; - - if(newGroup == Kopete::Group::topLevel()) - { - acc->server ()->mainConnection->removeFromGroup ( - acc->groupToGroupId().value(m_currentGroup->displayName()).toLatin1().constData(), - m_contactSerial.toLatin1().constData ()); - m_currentGroup = newGroup; - return; - } - - // if the group don't exist on server side, we create it - if(!acc->groupToGroupId().contains(newGroup->displayName())) - { - acc->server ()->mainConnection->addGroup(newGroup->displayName().toUtf8().constData()); - return; - } - - // if we have both groups on server side, just move this contact - if(acc->groupToGroupId().contains(newGroup->displayName()) - && acc->groupToGroupId().contains(m_currentGroup->displayName())) - { - acc->server ()->mainConnection->removeFromGroup ( - acc->groupToGroupId().value(m_currentGroup->displayName()).toLatin1().constData(), - m_contactSerial.toLatin1().constData ()); - acc->server ()->mainConnection->addToGroup ( - acc->groupToGroupId().value(newGroup->displayName()).toLatin1().constData(), - m_contactSerial.toLatin1().constData ()); - m_currentGroup = newGroup; - return; - } - if(m_currentGroup == Kopete::Group::topLevel() && - acc->groupToGroupId().contains(newGroup->displayName())) - { - acc->server ()->mainConnection->addToGroup ( - acc->groupToGroupId().value(newGroup->displayName()).toLatin1().constData(), - m_contactSerial.toLatin1().constData ()); - m_currentGroup = newGroup; - return; - } - } -} - -void WlmContact::blockContact(bool block) -{ - if (!m_account->isConnected()) - return; - - m_account->blockContact(contactId(), block); -} - -void WlmContact::slotUserInfo() -{ - QPointer infoDialog = new KDialog; - infoDialog->setButtons( KDialog::Close); - infoDialog->setDefaultButton(KDialog::Close); - const QString name = displayName(); - const QString personalMessage = statusMessage().message(); - Ui::WLMInfo info; - info.setupUi(infoDialog->mainWidget()); - info.m_id->setText(contactId()); - info.m_displayName->setText(name); - info.m_personalMessage->setText(personalMessage); -// info.m_phh->setText(m_phoneHome); //TODO enable and fill -// info.m_phw->setText(m_phoneWork); -// info.m_phm->setText(m_phoneMobile); -// info.m_reversed->setChecked(m_reversed); - -// connect( info.m_reversed, SIGNAL(toggled(bool)) , this, SLOT(slotUserInfoDialogReversedToggled())); - - info.groupBox->setVisible(false); - info.m_reversed->setVisible(false); - - infoDialog->setCaption(name); - infoDialog->exec(); - delete infoDialog; -} - -void -WlmContact::showContactSettings () -{ - //WlmContactSettings* p = new WlmContactSettings( this ); - //p->show(); -} - -void -WlmContact::sendMessage (Kopete::Message & message) -{ - kDebug (14210) << k_funcinfo; - // give it back to the manager to display - manager ()->appendMessage (message); - // tell the manager it was sent successfully - manager ()->messageSucceeded (); -} - -void -WlmContact::deleteContact () -{ - if (account ()->isConnected ()) - { - qobject_cast (account ())->server ()->mainConnection-> - delFromAddressBook (m_contactSerial.toLatin1 ().constData (), contactId ().toLatin1 ().constData ()); - deleteLater (); - } - else - { - KMessageBox::error (Kopete::UI::Global::mainWidget (), - i18n - ("You need to go online to remove a contact from your contact list. This contact will appear again when you reconnect."), - i18n ("WLM Plugin")); - } -} - -void -WlmContact::receivedMessage (const QString & message) -{ - // Create a Kopete::Message - Kopete::ContactPtrList contactList; - account (); - contactList.append (account ()->myself ()); - Kopete::Message newMessage (this, contactList); - newMessage.setPlainBody (message); - newMessage.setDirection (Kopete::Message::Inbound); - - // Add it to the manager - manager ()->appendMessage (newMessage); -} - -void -WlmContact::slotChatSessionDestroyed () -{ - //FIXME: the chat window was closed? Take appropriate steps. - m_msgManager = 0L; -} - -void -WlmContact::setOnlineStatus(const Kopete::OnlineStatus& status) -{ -#if 0 - bool isBlocked = qobject_cast (account())->isOnBlockList(contactId()); - bool isOnForwardList = qobject_cast (account())->isOnServerSideList(contactId()); - bool isOnReverseList = qobject_cast (account())->isOnReverseList(contactId()); - - // if this contact is blocked, and currently has a regular status, - // create a custom status and add wlm_blocked to ovelayIcons - if(isBlocked || (isOnForwardList && !isOnReverseList)) - { - QStringList overelayIconsList; - QString reason; - if(isOnForwardList && !isOnReverseList) - { - overelayIconsList << "wlm_fakefriend"; - reason = i18n("This contact does not have you in his/her list"); - } - - if(isBlocked) - { - overelayIconsList << "wlm_blocked"; - if(reason.isEmpty()) - reason = i18n("This contact is blocked"); - else - reason = i18n("This contact does not have you in his/her list and is blocked"); - } - // set the new status - Kopete::Contact::setOnlineStatus( - Kopete::OnlineStatus(status.status() , - (status.weight()==0) ? 0 : (status.weight() -1), - protocol(), - status.internalStatus()+15, - status.overlayIcons() + overelayIconsList, - reason ) ); - return; - } - - if (status.internalStatus() >= 15) - { - // if this contact was previously blocked, set a regular status again - switch(status.internalStatus()-15) - { - case 1: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmOnline); - break; - case 2: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmAway); - break; - case 3: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmBusy); - break; - case 4: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmBeRightBack); - break; - case 5: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmOnThePhone); - break; - case 6: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmOutToLunch); - break; - case 7: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmInvisible); - break; - case 8: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmOffline); - break; - case 9: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmIdle); - break; - default: - Kopete::Contact::setOnlineStatus(WlmProtocol::protocol()->wlmUnknown); - break; - } - - } - else -#endif - Kopete::Contact::setOnlineStatus(status); -} - diff --git a/protocols/wlm/wlmcontact.h b/protocols/wlm/wlmcontact.h deleted file mode 100644 index 19062b106..000000000 --- a/protocols/wlm/wlmcontact.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - wlmcontact.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMCONTACT_H -#define WLMCONTACT_H - -#include -#include -#include -#include -#include "kopetecontact.h" -#include "kopetemessage.h" - -#include "wlmchatsession.h" - -class QAction; -class KToggleAction; -namespace Kopete -{ - class Account; -} -namespace Kopete -{ - class ChatSession; -} -namespace Kopete -{ - class MetaContact; -} - -class WlmAccount; - -/** -@author Will Stephenson -*/ -class WlmContact : public Kopete::Contact -{ - Q_OBJECT -public: - WlmContact (Kopete::Account * _account, const QString & uniqueName, - const QString & contactSerial, Kopete::MetaContact * parent); - - ~WlmContact (); - - virtual bool isReachable (); - /** - * Serialize the contact's data into a key-value map - * suitable for writing to a file - */ - virtual void serialize (QMap < QString, QString > &serializedData, - QMap < QString, QString > &addressBookData); - /** - * Return the actions for this contact - */ - virtual QList *customContextMenuActions (); - using Kopete::Contact::customContextMenuActions; - /** - * Returns a Kopete::ChatSession associated with this contact - */ - virtual Kopete::ChatSession * manager (CanCreateFlags canCreate = CannotCreate); - - void setContactSerial (QString contactSerial) { m_contactSerial = contactSerial; } - - QString contactSerial () const { return m_contactSerial; } - Kopete::Group* currentGroup () const { return m_currentGroup; } - void setCurrentGroup (Kopete::Group *currentGroup) { m_currentGroup = currentGroup; } - - void setOnlineStatus(const Kopete::OnlineStatus&); - -public slots: - /** - * Transmits an outgoing message to the server - * Called when the chat window send button has been pressed - * (in response to the relevant Kopete::ChatSession signal) - */ - void sendMessage (Kopete::Message & message); - /** - * Called when an incoming message arrived - * This displays it in the chatwindow - */ - void receivedMessage (const QString & message); - - QString getMsnObj () const { return m_msnobj; } - - void setMsnObj (QString msnobj) { m_msnobj = msnobj; } - - virtual void slotUserInfo(); - virtual void deleteContact (); - - virtual void sendFile (const KUrl & sourceURL = KUrl (), - const QString & fileName = QString(), uint fileSize = 0L); - - void blockContact ( bool block ); - void slotShowProfile(); - void slotUpdateDisplayPicture(); - virtual void sync( unsigned int flags ); - bool isDisabled() const { return m_disabled; } - void setDisabled( bool disabled, bool updateServer ); - void slotDontShowEmoticons(bool block); - bool dontShowEmoticons(); - -protected slots: - /** - * Show the settings dialog - */ - void showContactSettings (); - /** - * Notify the contact that its current Kopete::ChatSession was - * destroyed - probably by the chatwindow being closed - */ - void slotChatSessionDestroyed (); - -protected: - WlmChatSession * m_msgManager; - WlmAccount * m_account; - KToggleAction* m_actionBlockContact; - KToggleAction* m_actionDontShowEmoticons; - QAction * m_actionShowProfile; - QAction * m_actionUpdateDisplayPicture; - QAction * m_actionPrefs; - QString m_msnobj; - QString m_contactSerial; - Kopete::Group *m_currentGroup; - bool m_disabled; - bool m_dontShowEmoticons; -}; - -#endif diff --git a/protocols/wlm/wlmlibmsn.cpp b/protocols/wlm/wlmlibmsn.cpp deleted file mode 100644 index 0cfc79a65..000000000 --- a/protocols/wlm/wlmlibmsn.cpp +++ /dev/null @@ -1,914 +0,0 @@ -/* - * msntest.cpp - * libmsn - * - * Created by Meredydd Luff. - * Refactored by Tiago Salem Herrmann - * Copyright (c) 2004 Meredydd Luff. All rights reserved. - * Copyright (c) 2007 Tiago Salem Herrmann. All rights reserved. - * - * 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. - * - * 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; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "wlmlibmsn.h" -#include "wlmserver.h" -#include "wlmaccount.h" - -#include "kopetemessage.h" -#include "kopetecontact.h" -#include "kopeteuiglobal.h" - -// include first to not get compile errors on windows -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace WlmUtils { -QString passport(const MSN::Passport& pass) -{ - return QString::fromLatin1(pass.c_str()); -} - -QString latin1(const std::string& s) -{ - return QString::fromLatin1(s.c_str()); -} - -QString utf8(const std::string& s) -{ - return QString::fromUtf8(s.c_str()); -} -} - -void -Callbacks::registerSocket (void *s, int reading, int writing, bool isSSL) -{ - Q_UNUSED( writing ); - Q_UNUSED( isSSL ); - - WlmSocket *a = (WlmSocket*)s; - if (!a) - return; - - if (reading) - { - QObject::disconnect(a, SIGNAL (readyRead()),0,0); - QObject::connect (a, SIGNAL (readyRead()), a, - SLOT (incomingData())); - } -} - -void -Callbacks::closeSocket (void *s) -{ - WlmSocket *a = (WlmSocket*)s; - if (a) - { - a->close (); - socketList.removeAll (a); - a->deleteLater(); - } -} - -void -Callbacks::unregisterSocket (void *s) -{ - WlmSocket *a = (WlmSocket*)s; - if (a) - { - QObject::disconnect(a, SIGNAL (readyRead()),0,0); - } -} - -void -Callbacks::gotFriendlyName (MSN::NotificationServerConnection * conn, - std::string friendlyname) -{ - Q_UNUSED( conn ); - emit gotDisplayName( WlmUtils::utf8(friendlyname) ); -} - -void -Callbacks::fileTransferInviteResponse (MSN::SwitchboardServerConnection * conn, - unsigned int sessionID, bool response) -{ - emit slotfileTransferInviteResponse (conn, sessionID, response); -} - -void -Callbacks::gotContactDisplayPicture (MSN::SwitchboardServerConnection * conn, - MSN::Passport passport, - std::string filename) -{ - Q_UNUSED( conn ); - emit gotDisplayPicture(WlmUtils::passport(passport), WlmUtils::utf8(filename)); -} - -void -Callbacks::gotMessageSentACK (MSN::SwitchboardServerConnection * conn, - int trID) -{ - emit messageSentACK (conn, trID); -} - -void -Callbacks::gotBuddyListInfo (MSN::NotificationServerConnection * conn, - MSN::ListSyncInfo * info) -{ - // IMPORTANT - // Here you need to fill a vector with all your contacts - // both received by the server and previous ones. - // Next pass this vector to the function completeConnection() - // if you do not call completeConnection(), the service will - // not work. - std::map < std::string, MSN::Buddy * >::iterator i = - info->contactList.begin (); - std::map < std::string, int >allContacts; - - for (; i != info->contactList.end (); ++i) - { - MSN::Buddy * contact = (*i).second; - if (contact->lists & MSN::LST_AB // only if it is the address book - && contact->properties["isMessengerUser"] == "true") - { - allContacts[contact->userName.c_str ()] = 0; - allContacts[contact->userName.c_str ()] |= MSN::LST_AB; - std::list < MSN::Buddy::PhoneNumber >::iterator pns = contact->phoneNumbers.begin (); - std::list < MSN::Group * >::iterator g = contact->groups.begin (); - } - if (contact->lists & MSN::LST_AL) - { - allContacts[contact->userName.c_str ()] |= MSN::LST_AL; - } - - if (contact->lists & MSN::LST_BL) - { - allContacts[contact->userName.c_str ()] |= MSN::LST_BL; - } - - if (contact->lists & MSN::LST_RL) - { - //printf ("-RL %s \n", contact->userName.c_str ()); - } - if (contact->lists & MSN::LST_PL) - { - //printf ("-PL %s \n", contact->userName.c_str ()); - } - } - //printf ("Available Groups:\n"); - std::map < std::string, MSN::Group >::iterator g = info->groups.begin (); - - for (; g != info->groups.end (); g++) - { - //printf (" %s: %s\n", (*g).second.groupID.c_str (), - // (*g).second.name.c_str ()); - } - - // this will send the ADL command to the server - // It is necessary. Do not forget to add *all* your contacts to allContacts, - // (both Forward, allow and block lists) or you probably will - // loose someone. - // A contact cannot be present both on allow and block lists or the - // server will return an error, so you need to let your application - // choose the better list to put it in. - m_server->m_account->groupListReceivedFromServer (info->groups); - m_server->m_account->addressBookReceivedFromServer (info->contactList); - conn->completeConnection (allContacts, info); -} - -void -Callbacks::gotLatestListSerial (MSN::NotificationServerConnection * conn, - std::string lastChange) -{ - Q_UNUSED( conn ); - Q_UNUSED( lastChange ); -} - -void -Callbacks::gotGTC (MSN::NotificationServerConnection * conn, char c) -{ - Q_UNUSED( conn ); - Q_UNUSED( c ); -} - -void -Callbacks::gotOIMDeleteConfirmation (MSN::NotificationServerConnection * conn, - bool success, std::string id) -{ - Q_UNUSED( conn ); - - if (success) - { - emit deletedOIM (WlmUtils::latin1(id), success); - std::cout << "OIM " << id << " removed successfully." << std::endl; - } - else - std::cout << "OIM " << id << " not removed successfully." << std::endl; - -} - -void -Callbacks::gotOIMSendConfirmation (MSN::NotificationServerConnection * conn, - bool success, int id) -{ - Q_UNUSED( conn ); - - if (success) - std::cout << "OIM " << id << " sent successfully." << std::endl; - else - std::cout << "OIM " << id << " not sent successfully." << std::endl; -} - -void -Callbacks::gotOIM (MSN::NotificationServerConnection * conn, bool success, - std::string id, std::string message) -{ - Q_UNUSED( conn ); - - if (success) - emit receivedOIM(WlmUtils::latin1(id), WlmUtils::utf8(message)); - else - std::cout << "Error retreiving OIM " << id << std::endl; -} - -void -Callbacks::gotOIMList (MSN::NotificationServerConnection * conn, - std::vector < MSN::eachOIM > OIMs) -{ - Q_UNUSED( conn ); - emit receivedOIMList (OIMs); -} - -void -Callbacks::connectionReady (MSN::Connection * conn) -{ - Q_UNUSED( conn ); - emit connectionCompleted (); -} - -void -Callbacks::gotBLP (MSN::NotificationServerConnection * conn, char c) -{ - Q_UNUSED( conn ); - Q_UNUSED( c ); -} - -void -Callbacks::addedListEntry (MSN::NotificationServerConnection * conn, - MSN::ContactList list, MSN::Passport username, - std::string friendlyname) -{ - Q_UNUSED( conn ); - emit gotNewContact (list, WlmUtils::passport(username), WlmUtils::utf8(friendlyname)); - // after adding the user you need to delete it from the pending list. - // it will be added automatically by the msn service - - // on regular lists you'll never receive the contacts displayname - // it is not needed anyway -} - -void -Callbacks::removedListEntry (MSN::NotificationServerConnection * conn, - MSN::ContactList list, MSN::Passport username) -{ - Q_UNUSED( conn ); - emit gotRemovedContactFromList (list, WlmUtils::passport(username)); -} - -void -Callbacks::addedGroup (MSN::NotificationServerConnection * conn, bool added, - std::string groupName, std::string groupID) -{ - Q_UNUSED( conn ); -/* if (added) - printf ("A group named %s (%s) was added\n", groupName.c_str (), - groupID.c_str ()); - else - printf ("Group (%s) was NOT added\n", groupName.c_str ()); -*/ - emit gotAddedGroup (added, WlmUtils::utf8(groupName), WlmUtils::latin1(groupID)); -} - -void -Callbacks::removedGroup (MSN::NotificationServerConnection * conn, - bool removed, std::string groupID) -{ - Q_UNUSED( conn ); -/* - if (removed) - printf ("A group with ID %s was removed\n", groupID.c_str ()); - else - printf ("Group (%s) was NOT removed\n", groupID.c_str ()); -*/ - emit gotRemovedGroup (removed, WlmUtils::latin1(groupID)); -} - -void -Callbacks::renamedGroup (MSN::NotificationServerConnection * conn, - bool renamed, std::string newGroupName, - std::string groupID) -{ - Q_UNUSED( conn ); - Q_UNUSED( renamed ); - Q_UNUSED( newGroupName ); - Q_UNUSED( groupID ); -/* - if (renamed) - printf ("A group with ID %s was renamed to %s\n", groupID.c_str (), - newGroupName.c_str ()); - else - printf ("A group with ID %s was NOT renamed to %s\n", - groupID.c_str (), newGroupName.c_str ()); -*/ -} - -void -Callbacks::showError (MSN::Connection * conn, std::string msg) -{ - std::cout << "MSN: Error: " << msg.c_str () << std::endl; - QString a = WlmUtils::latin1(msg); - // FIXME This is really ugly the libmsn should send some error code instead of msg - if (a.contains("Wrong Password")) - emit mainConnectionError(WrongPassword); - else if (a.contains("You have logged onto MSN twice at once")) - emit mainConnectionError(OtherClient); - else if (conn == mainConnection) - emit mainConnectionError(Unknown); -} - -void -Callbacks::buddyChangedStatus (MSN::NotificationServerConnection * conn, - MSN::Passport buddy, std::string friendlyname, - MSN::BuddyStatus status, unsigned int clientID, - std::string msnobject) -{ - Q_UNUSED( conn ); - emit contactChangedStatus (WlmUtils::passport(buddy), WlmUtils::utf8(friendlyname), - status, clientID, WlmUtils::utf8(msnobject)); -} - -void -Callbacks::buddyOffline (MSN::NotificationServerConnection * conn, - MSN::Passport buddy) -{ - Q_UNUSED( conn ); - emit contactDisconnected(WlmUtils::passport(buddy)); -} - -void -Callbacks::gotSwitchboard (MSN::SwitchboardServerConnection * conn, - const void *tag) -{ - emit gotNewSwitchboard (dynamic_cast(conn), tag); -} - -void -Callbacks::buddyJoinedConversation (MSN::SwitchboardServerConnection * conn, - MSN::Passport username, - std::string friendlyname, int is_initial) -{ - Q_UNUSED( is_initial ); - - emit joinedConversation (conn, WlmUtils::passport(username), WlmUtils::utf8(friendlyname)); - const std::pair *ctx = static_cast *>(conn->auth.tag); - delete ctx; - conn->auth.tag = NULL; - -/* if (conn->auth.tag) - { - const std::pair *ctx = static_cast *>(conn->auth.tag); - // Example of sending a custom emoticon -// conn->myNotificationServer()->msnobj.addMSNObject("/tmp/emoticon.gif",2); -// std::string obj; -// conn->myNotificationServer()->msnobj.getMSNObjectXML("/tmp/emoticon.gif", 2, obj); -// conn->sendEmoticon("(EMOTICON)", obj); - - conn->sendMessage(ctx->second); - delete ctx; - conn->auth.tag = NULL; - - //Example of sending a file -// MSN::fileTransferInvite ft; -// ft.filename = "/tmp/filetosend.txt"; -// ft.friendlyname = "filetosend2.txt"; -// ft.sessionId = sessionID++; -// ft.type = MSN::FILE_TRANSFER_WITHOUT_PREVIEW; -// conn->sendFile(ft); - -// conn->sendNudge(); -// conn->sendAction("Action message here"); - - // Exemple of requesting a display picture. -// std::string filename2("/tmp/displayPicture.bin"+MSN::toStr(sessionID)); - // lastObject is the msnobject received on each contact status change - // you should generate a random sessionID -// conn->requestFile(sessionID++, filename2, lastObject); - - // Example of sending a voice clip -// conn->myNotificationServer()->msnobj.addMSNObject("/tmp/voiceclip.wav",11); -// std::string obj; -// conn->myNotificationServer()->msnobj.getMSNObjectXML("/tmp/voiceclip.wav", 11, obj); -// conn->sendVoiceClip(obj); - // exemple of sending an ink -// std::string ink("base64 data here..."); -// conn->sendInk(ink); - } - */ -} - -void -Callbacks::buddyLeftConversation (MSN::SwitchboardServerConnection * conn, - MSN::Passport username) -{ - emit leftConversation (conn, WlmUtils::passport(username)); - -} - -void -Callbacks::gotInstantMessage (MSN::SwitchboardServerConnection * conn, - MSN::Passport username, - std::string friendlyname, MSN::Message * msg) -{ - Q_UNUSED( friendlyname ); - - Kopete::Message kmsg; - kmsg.setPlainBody(WlmUtils::utf8(msg->getBody())); - QFont font (WlmUtils::latin1(msg->getFontName())); - if (msg->getFontEffects () & MSN::Message::BOLD_FONT) - font.setBold (true); - if (msg->getFontEffects () & MSN::Message::ITALIC_FONT) - font.setItalic (true); - if (msg->getFontEffects () & MSN::Message::UNDERLINE_FONT) - font.setUnderline (true); - if (msg->getFontEffects () & MSN::Message::STRIKETHROUGH_FONT) - font.setStrikeOut (true); - - QColor color (msg->getColor ()[0], msg->getColor ()[1], - msg->getColor ()[2]); - kmsg.setForegroundColor (color); - - kmsg.setFont (font); - emit messageReceived (conn, WlmUtils::passport(username), kmsg); -} - -void -Callbacks::gotEmoticonNotification (MSN::SwitchboardServerConnection * conn, - MSN::Passport username, std::string alias, - std::string msnobject) -{ - emit slotGotEmoticonNotification(conn, WlmUtils::passport(username), - WlmUtils::utf8(alias), WlmUtils::utf8(msnobject)); -} - -void -Callbacks::failedSendingMessage (MSN::Connection * conn) -{ - Q_UNUSED( conn ); - //printf ("**************************************************\n"); - //printf ("ERROR: Your last message failed to send correctly\n"); - //printf ("**************************************************\n"); -} - -void -Callbacks::buddyTyping (MSN::SwitchboardServerConnection * conn, - MSN::Passport username, std::string friendlyname) -{ - Q_UNUSED( friendlyname ); - emit receivedTypingNotification (conn, WlmUtils::passport(username)); - -} - -void -Callbacks::gotNudge (MSN::SwitchboardServerConnection * conn, - MSN::Passport username) -{ - emit receivedNudge (conn, WlmUtils::passport(username)); -} - -void -Callbacks::gotVoiceClipNotification (MSN::SwitchboardServerConnection * conn, - MSN::Passport username, std::string msnobject) -{ - emit slotGotVoiceClipNotification(conn, WlmUtils::passport(username), WlmUtils::utf8(msnobject)); -} - -void -Callbacks::gotWinkNotification (MSN::SwitchboardServerConnection * conn, - MSN::Passport username, std::string msnobject) -{ - emit slotGotWinkNotification(conn, WlmUtils::passport(username), WlmUtils::utf8(msnobject)); -} - -void -Callbacks::gotInk (MSN::SwitchboardServerConnection * conn, - MSN::Passport username, std::string image) -{ - emit slotGotInk(conn, WlmUtils::passport(username), QByteArray(image.c_str())); -} - -void -Callbacks::gotActionMessage (MSN::SwitchboardServerConnection * conn, - MSN::Passport username, std::string message) -{ - Q_UNUSED( conn ); - Q_UNUSED( username ); - Q_UNUSED( message ); -} - -void -Callbacks::gotInitialEmailNotification (MSN::NotificationServerConnection * - conn, int msgs_inbox, - int unread_inbox, int msgs_folders, - int unread_folders) -{ - Q_UNUSED( conn ); - Q_UNUSED( msgs_inbox ); - Q_UNUSED( msgs_folders ); - Q_UNUSED( unread_folders ); - - if (unread_inbox > 0) - emit initialEmailNotification (unread_inbox); -} - -void -Callbacks::gotNewEmailNotification (MSN::NotificationServerConnection * conn, - std::string from, std::string subject) -{ - Q_UNUSED( conn ); - emit newEmailNotification (WlmUtils::utf8(from), KMime::decodeRFC2047String(subject.c_str())); -} - -void -Callbacks::gotInboxUrl (MSN::NotificationServerConnection * conn, - MSN::hotmailInfo info) -{ - Q_UNUSED( conn ); - emit inboxUrl (info); -} - -void -Callbacks::fileTransferProgress (MSN::SwitchboardServerConnection * conn, - unsigned int sessionID, - unsigned long long transferred, - unsigned long long total) -{ - Q_UNUSED( total ); - emit gotFileTransferProgress (conn, sessionID, transferred); -} - -void -Callbacks::fileTransferFailed (MSN::SwitchboardServerConnection * conn, - unsigned int sessionID, MSN::fileTransferError error) -{ - emit gotFileTransferFailed (conn, sessionID, error); -} - -void -Callbacks::fileTransferSucceeded (MSN::SwitchboardServerConnection * conn, - unsigned int sessionID) -{ - //printf ("File transfer successfully completed. session: %d\n", sessionID); - emit gotFileTransferSucceeded (conn, sessionID); -} - -void -Callbacks::gotNewConnection (MSN::Connection * conn) -{ - if (dynamic_cast < MSN::NotificationServerConnection * >(conn)) - dynamic_cast (conn)->synchronizeContactList (); -} - -void -Callbacks::buddyChangedPersonalInfo (MSN::NotificationServerConnection * conn, - MSN::Passport fromPassport, - MSN::personalInfo pInfo) -{ - Q_UNUSED( conn ); - // MSN::personalInfo shows all the data you can grab from the contact - //printf ("User %s Personal Message: %s\n", fromPassport.c_str (), - // pInfo.PSM.c_str ()); - emit gotContactPersonalInfo (WlmUtils::passport(fromPassport), pInfo); -} - -void -Callbacks::closingConnection (MSN::Connection * conn) -{ - if (dynamic_cast < MSN::SwitchboardServerConnection * >(conn)) - emit SwitchboardServerConnectionTerminated ( - dynamic_cast (conn)); - if (dynamic_cast < MSN::NotificationServerConnection * >(conn)) - emit NotificationServerConnectionTerminated ( - dynamic_cast (conn)); -} - -void -Callbacks::changedStatus (MSN::NotificationServerConnection * conn, - MSN::BuddyStatus state) -{ - Q_UNUSED( conn ); - //printf ("Your state is now: %s\n", - // MSN::buddyStatusToString (state).c_str ()); - emit changedStatus (state); -/* MSN::personalInfo pInfo; - pInfo.PSM="my personal message"; - pInfo.mediaType="Music"; - pInfo.mediaIsEnabled=1; - pInfo.mediaFormat="{0} - {1}"; - pInfo.mediaLines.push_back("Artist"); - pInfo.mediaLines.push_back("Song"); - conn->setPersonalStatus(pInfo); -*/ -} - -size_t -Callbacks::getDataFromSocket (void *sock, char *data, size_t size) -{ - WlmSocket *a = (WlmSocket*)sock; - if (!a) - return 0; - - return a->read(data, size); -} - -size_t -Callbacks::writeDataToSocket (void *sock, char *data, size_t size) -{ - WlmSocket *a = (WlmSocket*)sock; - if (!a) - return 0; - - return a->write(data, size); -} - -void * -Callbacks::connectToServer (std::string hostname, int port, bool * connected, bool isSSL) -{ - WlmSocket *a = new WlmSocket (mainConnection, isSSL, m_server); - if(!a) - return NULL; - - connect( a, SIGNAL(sslErrors(QList)), a, SLOT(ignoreSslErrors()) ); - connect( a, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(emitSocketError(QAbstractSocket::SocketError)) ); - - if(!isSSL) - a->connectToHost (WlmUtils::latin1(hostname), port); - else - a->connectToHostEncrypted (WlmUtils::latin1(hostname), port); - - *connected = false; - socketList.append (a); - return (void*)a; -} - -int -Callbacks::listenOnPort (int port) -{ - Q_UNUSED( port ); - // this callback is not used yet, - // so, for now we are returning a dummy - // value to avoid compiling issues - return 0; -} - -std::string Callbacks::getOurIP (void) -{ - // this callback is not used yet, - // so, for now we are returning a dummy - // value to avoid compiling issues - return ""; -} - -void -Callbacks::log (int i, const char *s) -{ - Q_UNUSED( i ); - Q_UNUSED( s ); -} - -int -Callbacks::getSocketFileDescriptor (void *sock) -{ - WlmSocket *a = (WlmSocket*)sock; - if(!a) - return -1; - return a->socketDescriptor(); -} - -std::string Callbacks::getSecureHTTPProxy () -{ - return ""; -} - -void -Callbacks::askFileTransfer (MSN::SwitchboardServerConnection * conn, - MSN::fileTransferInvite ft) -{ - emit incomingFileTransfer (conn, ft); -/* - switch(ft.type) - { - case MSN::FILE_TRANSFER_BACKGROUND_SHARING: - printf("User %s wants to share with you a background file named %s. Size: %llu. Accepting..\n", ft.userPassport.c_str(), ft.filename.c_str(), ft.filesize); - break; - case MSN::FILE_TRANSFER_BACKGROUND_SHARING_CUSTOM: - printf("User %s wants to share with you a *custom background file named %s. Size: %llu. Accepting..\n", ft.userPassport.c_str(), ft.filename.c_str(), ft.filesize); - break; - case MSN::FILE_TRANSFER_WITH_PREVIEW: - printf("User %s wants to send you a file *with preview named %s. Size: %llu. Accepting..\n", ft.userPassport.c_str(), ft.filename.c_str(), ft.filesize); - // ft.preview has the base64 encoded png file - break; - case MSN::FILE_TRANSFER_WITHOUT_PREVIEW: - printf("User %s wants to send you a file *without preview named %s. Size: %llu. Accepting..\n", ft.userPassport.c_str(), ft.filename.c_str(), ft.filesize); - break; - default: - printf("Unknown filetransfer type from %s..\n", ft.userPassport.c_str()); - - } - conn->fileTransferResponse(ft.sessionId, filename2, true); -*/ -} - -void -Callbacks::addedContactToGroup (MSN::NotificationServerConnection * conn, - bool added, std::string groupId, - std::string contactId) -{ - Q_UNUSED( conn ); -/* - if (added) - printf ("User Id (%s) added to group Id (%s)\n", contactId.c_str (), - groupId.c_str ()); - else - printf ("User Id (%s) NOT added to group Id (%s)\n", - contactId.c_str (), groupId.c_str ()); -*/ - emit gotAddedContactToGroup (added, WlmUtils::latin1(groupId), - WlmUtils::latin1(contactId)); -} - -void -Callbacks::removedContactFromGroup (MSN::NotificationServerConnection * conn, - bool removed, std::string groupId, - std::string contactId) -{ - Q_UNUSED( conn ); -/* - if (removed) - printf ("User Id (%s) removed from group Id (%s)\n", - contactId.c_str (), groupId.c_str ()); - else - printf ("User Id (%s) NOT removed from group Id (%s)\n", - contactId.c_str (), groupId.c_str ()); -*/ - emit gotRemovedContactFromGroup (removed, WlmUtils::latin1(groupId), - WlmUtils::latin1(contactId)); -} - -void -Callbacks::addedContactToAddressBook (MSN::NotificationServerConnection * - conn, bool added, std::string passport, - std::string displayName, - std::string guid) -{ - Q_UNUSED( conn ); -/* - if (added) - printf ("User (%s - %s) added to AddressBook. Guid (%s)\n", - passport.c_str (), displayName.c_str (), guid.c_str ()); - else - printf ("User (%s - %s) NOT added to AddressBook.\n", - passport.c_str (), displayName.c_str ()); -*/ - emit gotAddedContactToAddressBook (added, WlmUtils::passport(passport), - WlmUtils::utf8(displayName), WlmUtils::latin1(guid)); -} - -void -Callbacks::removedContactFromAddressBook (MSN::NotificationServerConnection * - conn, bool removed, - std::string contactId, - std::string passport) -{ - Q_UNUSED( conn ); -/* - if (removed) - printf ("User %s removed from AddressBook. Guid (%s)\n", - passport.c_str (), contactId.c_str ()); - else - printf ("User %s NOT removed from AddressBook. Guid (%s)\n", - passport.c_str (), contactId.c_str ()); -*/ - emit gotRemovedContactFromAddressBook (removed, WlmUtils::passport(passport), - WlmUtils::latin1(contactId)); -} - -void -Callbacks::enabledContactOnAddressBook (MSN::NotificationServerConnection * - conn, bool enabled, - std::string contactId, - std::string passport) -{ - Q_UNUSED( conn ); - Q_UNUSED( enabled ); - Q_UNUSED( contactId ); - Q_UNUSED( passport ); -/* - // this is used to enable a contact previously disabled from msn, but not fully removed - if (enabled) - printf ("User (%s) enabled on AddressBook. Guid (%s)\n", - passport.c_str (), contactId.c_str ()); - else - printf ("User (%s) NOT enabled on AddressBook. Guid (%s)\n", - passport.c_str (), contactId.c_str ()); -*/ -} - -void -Callbacks::disabledContactOnAddressBook (MSN::NotificationServerConnection * - conn, bool disabled, - std::string contactId) -{ - Q_UNUSED( conn ); - Q_UNUSED( disabled ); - Q_UNUSED( contactId ); - // this is used when you have disabled this user from msn, but not deleted from hotmail - // I suggest to delete the contact instead of disable, since I haven't tested this too much yet -/* - if (disabled) - printf ("User disabled on AddressBook. Guid (%s)\n", - contactId.c_str ()); - else - printf ("User NOT disabled on AddressBook. Guid (%s)\n", - contactId.c_str ()); -*/ -} - -void Callbacks::gotVoiceClipFile(MSN::SwitchboardServerConnection * conn, unsigned int sessionID, std::string file) -{ - emit slotGotVoiceClipFile(conn, sessionID, WlmUtils::utf8(file)); -} - -void Callbacks::gotEmoticonFile(MSN::SwitchboardServerConnection * conn, unsigned int sessionID, std::string alias, std::string file) -{ - emit slotGotEmoticonFile(conn, sessionID, WlmUtils::utf8(alias), WlmUtils::utf8(file)); -} - -void Callbacks::gotWinkFile(MSN::SwitchboardServerConnection * conn, unsigned int sessionID, std::string file) -{ - emit slotGotWinkFile(conn, sessionID, WlmUtils::utf8(file)); -} - -void Callbacks::emitSocketError( QAbstractSocket::SocketError error ) -{ - if ( !mainConnection ) - return; - - WlmSocket* socket = qobject_cast(sender()); - Q_ASSERT( socket ); - - MSN::Connection *c = mainConnection->connectionWithSocket((void*)socket); - if ( !c ) - return; - - if ( c == mainConnection ) - emit socketError( error ); - else - c->disconnect(); -} - diff --git a/protocols/wlm/wlmlibmsn.h b/protocols/wlm/wlmlibmsn.h deleted file mode 100644 index d51efd13e..000000000 --- a/protocols/wlm/wlmlibmsn.h +++ /dev/null @@ -1,348 +0,0 @@ -/* - wlmlibmsn.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMLIBMSN_H -#define WLMLIBMSN_H - -#include -#include "wlmsocket.h" -#include "kopetemessage.h" - -#include - -class WlmServer; - -namespace WlmUtils { -// MSN::Passport/std::string to QString encoding functions -QString passport(const MSN::Passport& pass); -QString latin1(const std::string& s); -QString utf8(const std::string& s); -} - -class Callbacks:public QObject, public MSN::Callbacks -{ - Q_OBJECT - -private: - virtual void registerSocket (void *s, int read, int write, bool isSSL); - - virtual void unregisterSocket (void *s); - - virtual void closeSocket (void *s); - - virtual void showError (MSN::Connection * conn, std::string msg); - - virtual void buddyChangedStatus (MSN::NotificationServerConnection * conn, - MSN::Passport buddy, std::string friendlyname, - MSN::BuddyStatus state, unsigned int clientID, - std::string msnobject); - - virtual void buddyOffline (MSN::NotificationServerConnection * conn, MSN::Passport buddy); - - virtual void log (int writing, const char *buf); - - virtual void buddyChangedPersonalInfo (MSN::NotificationServerConnection * conn, - MSN::Passport fromPassport, MSN::personalInfo); - - virtual void gotMessageSentACK (MSN::SwitchboardServerConnection * conn, int trID); - - virtual void gotFriendlyName (MSN::NotificationServerConnection * conn, std::string friendlyname); - - virtual void gotBuddyListInfo (MSN::NotificationServerConnection * conn, MSN::ListSyncInfo * data); - - virtual void gotLatestListSerial (MSN::NotificationServerConnection * conn, std::string lastChange); - - virtual void gotGTC (MSN::NotificationServerConnection * conn, char c); - - virtual void gotBLP (MSN::NotificationServerConnection * conn, char c); - - virtual void gotContactDisplayPicture (MSN::SwitchboardServerConnection *, - MSN::Passport, std::string); - - virtual void addedListEntry (MSN::NotificationServerConnection * conn, - MSN::ContactList list, MSN::Passport buddy, - std::string friendlyname); - - virtual void removedListEntry (MSN::NotificationServerConnection * conn, - MSN::ContactList list, MSN::Passport buddy); - - virtual void addedGroup (MSN::NotificationServerConnection * conn, bool added, - std::string groupName, std::string groupID); - - virtual void removedGroup (MSN::NotificationServerConnection * conn, bool removed, - std::string groupID); - - virtual void renamedGroup (MSN::NotificationServerConnection * conn, bool renamed, - std::string newGroupName, std::string groupID); - - virtual void addedContactToGroup (MSN::NotificationServerConnection * conn, bool added, - std::string groupId, std::string contactId); - - virtual void removedContactFromGroup (MSN::NotificationServerConnection * conn, - bool removed, std::string groupId, - std::string contactId); - - virtual void addedContactToAddressBook (MSN::NotificationServerConnection * conn, - bool added, std::string passport, - std::string displayName, std::string guid); - - virtual void removedContactFromAddressBook (MSN::NotificationServerConnection * conn, - bool removed, std::string contactId, - std::string passport); - - virtual void fileTransferInviteResponse (MSN::SwitchboardServerConnection * conn, - unsigned int sessionID, bool response); - - virtual void enabledContactOnAddressBook (MSN::NotificationServerConnection * conn, - bool enabled, std::string contactId, - std::string passport); - - virtual void disabledContactOnAddressBook (MSN::NotificationServerConnection * conn, - bool disabled, std::string contactId); - - virtual void gotSwitchboard (MSN::SwitchboardServerConnection * conn, const void *tag); - - virtual void buddyJoinedConversation (MSN::SwitchboardServerConnection * conn, - MSN::Passport buddy, std::string friendlyname, - int is_initial); - - virtual void buddyLeftConversation (MSN::SwitchboardServerConnection * conn, - MSN::Passport buddy); - - virtual void gotInstantMessage (MSN::SwitchboardServerConnection * conn, - MSN::Passport buddy, std::string friendlyname, - MSN::Message * msg); - - virtual void gotEmoticonNotification (MSN::SwitchboardServerConnection * conn, - MSN::Passport buddy, std::string alias, - std::string msnobject); - - virtual void failedSendingMessage (MSN::Connection * conn); - - virtual void buddyTyping (MSN::SwitchboardServerConnection * conn, MSN::Passport buddy, - std::string friendlyname); - - virtual void gotNudge (MSN::SwitchboardServerConnection * conn, MSN::Passport from); - - virtual void gotVoiceClipNotification (MSN::SwitchboardServerConnection * conn, MSN::Passport from, - std::string msnobject); - - virtual void gotWinkNotification (MSN::SwitchboardServerConnection * conn, MSN::Passport from, - std::string msnobject); - - virtual void gotInk (MSN::SwitchboardServerConnection * conn, MSN::Passport from, - std::string image); - - virtual void gotActionMessage (MSN::SwitchboardServerConnection * conn, - MSN::Passport username, std::string message); - - virtual void gotInitialEmailNotification (MSN::NotificationServerConnection * conn, - int msgs_inbox, int unread_inbox, - int msgs_folders, int unread_folders); - - virtual void gotNewEmailNotification (MSN::NotificationServerConnection * conn, - std::string from, std::string subject); - - virtual void fileTransferProgress (MSN::SwitchboardServerConnection * conn, - unsigned int sessionID, - long long unsigned transferred, - long long unsigned total); - - virtual void fileTransferFailed (MSN::SwitchboardServerConnection * conn, - unsigned int sessionID, MSN::fileTransferError error); - - virtual void fileTransferSucceeded (MSN::SwitchboardServerConnection * conn, - unsigned int sessionID); - - virtual void gotNewConnection (MSN::Connection * conn); - - virtual void gotOIMList (MSN::NotificationServerConnection * conn, - std::vector < MSN::eachOIM > OIMs); - - virtual void gotOIM (MSN::NotificationServerConnection * conn, bool success, - std::string id, std::string message); - - virtual void gotOIMSendConfirmation (MSN::NotificationServerConnection * conn, - bool success, int id); - - virtual void gotOIMDeleteConfirmation (MSN::NotificationServerConnection * conn, - bool success, std::string id); - - virtual void closingConnection (MSN::Connection * conn); - - virtual void changedStatus (MSN::NotificationServerConnection * conn, - MSN::BuddyStatus state); - - virtual void gotVoiceClipFile(MSN::SwitchboardServerConnection * conn, - unsigned int sessionID, - std::string file); - - virtual void gotEmoticonFile(MSN::SwitchboardServerConnection * conn, - unsigned int sessionID, - std::string alias, - std::string file); - - virtual void gotWinkFile(MSN::SwitchboardServerConnection * conn, - unsigned int sessionID, - std::string file); - - virtual void* connectToServer (std::string server, int port, bool * connected, bool isSSL); - - virtual size_t getDataFromSocket (void *sock, char *data, size_t size); - - virtual size_t writeDataToSocket (void *sock, char *data, size_t size); - - virtual void connectionReady (MSN::Connection * conn); - - virtual void askFileTransfer (MSN::SwitchboardServerConnection * conn, - MSN::fileTransferInvite ft); - - virtual int listenOnPort (int port); - - int getSocketFileDescriptor (void *sock); - - virtual std::string getOurIP (); - - virtual std::string getSecureHTTPProxy (); - - virtual void gotInboxUrl (MSN::NotificationServerConnection *conn, MSN::hotmailInfo info); - - public: - WlmServer * m_server; - QList socketList; - MSN::NotificationServerConnection * mainConnection; - enum MSNErrorCode { - NoError = 0, - WrongPassword, - OtherClient, - Unknown - }; - - signals: - void messageReceived (MSN::SwitchboardServerConnection * conn, - const QString & from, const Kopete::Message & message); - void joinedConversation (MSN::SwitchboardServerConnection * conn, - const QString & user, const QString & friendlyname); - void leftConversation (MSN::SwitchboardServerConnection * conn, - const QString & user); - void gotNewSwitchboard (MSN::SwitchboardServerConnection * conn, - const void *tag); - void SwitchboardServerConnectionTerminated (MSN::SwitchboardServerConnection *conn); - void NotificationServerConnectionTerminated (MSN::NotificationServerConnection *conn); - void messageSentACK (MSN::SwitchboardServerConnection * conn, const unsigned int &trID); - void incomingFileTransfer (MSN::SwitchboardServerConnection * conn, const MSN::fileTransferInvite & ft); - void gotFileTransferProgress (MSN::SwitchboardServerConnection * conn, const unsigned int &sessionID, - const unsigned long long &transferred); - void gotFileTransferFailed (MSN::SwitchboardServerConnection * conn, - const unsigned int &sessionID, - const MSN::fileTransferError & error); - - void gotFileTransferSucceeded (MSN::SwitchboardServerConnection * conn, - const unsigned int &sessionID); - - void gotDisplayName (const QString & displayName); - - void gotDisplayPicture (const QString & contact, const QString & filename); - - void gotNewContact (const MSN::ContactList & list, const QString & contact, - const QString & friendlyname); - - void gotRemovedContactFromList (const MSN::ContactList & list, const QString & contact); - - void gotAddedGroup (bool added, const QString & groupName, const QString & groupId); - - void gotRemovedGroup (bool removed, const QString & groupId); - - void gotAddedContactToGroup (bool added, const QString & groupId, const QString & contactId); - - void gotRemovedContactFromGroup (bool removed, const QString & groupId, const QString & contactId); - - void gotAddedContactToAddressBook (bool added, const QString & passport, const QString & displayName, - const QString & guid); - - void gotRemovedContactFromAddressBook (bool removed, const QString & passport, const QString & contactId); - - void receivedNudge (MSN::SwitchboardServerConnection * conn, const QString & contactId); - - void receivedTypingNotification (MSN::SwitchboardServerConnection * conn, const QString & contactId); - - void gotContactPersonalInfo (const QString & fromPassport, const MSN::personalInfo & pInfo); - - void receivedOIMList (std::vector < MSN::eachOIM > &oimlist); - - void receivedOIM (const QString & id, const QString & message); - - void deletedOIM (const QString & id, const bool & deleted); - - void contactChangedStatus (const QString & buddy, const QString & friendlyname, - const MSN::BuddyStatus & status, const unsigned int &clientID, const QString & msnobject); - - void contactDisconnected (const QString & buddy); - - void connectionCompleted (); - - void connectionFailed (); - - void changedStatus (MSN::BuddyStatus & state); - - void slotfileTransferInviteResponse (MSN::SwitchboardServerConnection * conn, - const unsigned int &sessionID, - const bool & response); - void slotGotEmoticonNotification (MSN::SwitchboardServerConnection * conn, - const QString & buddy, - const QString & alias, - const QString & msnobject); - - void slotGotVoiceClipNotification (MSN::SwitchboardServerConnection * conn, - const QString & from, - const QString & msnobject); - - void slotGotWinkNotification (MSN::SwitchboardServerConnection * conn, - const QString & from, - const QString & msnobject); - - void slotGotInk (MSN::SwitchboardServerConnection * conn, - const QString & from, - const QByteArray & image); - - void slotGotVoiceClipFile(MSN::SwitchboardServerConnection * conn, - const unsigned int & sessionID, - const QString & file); - - void slotGotEmoticonFile(MSN::SwitchboardServerConnection * conn, - const unsigned int & sessionID, - const QString & alias, - const QString & file); - - void slotGotWinkFile(MSN::SwitchboardServerConnection * conn, - const unsigned int & sessionID, - const QString & file); - - void mainConnectionError( int error ); - - void socketError( int error ); - - void initialEmailNotification(const int unread_inbox); - - void newEmailNotification(const QString from, const QString subject); - - void inboxUrl(MSN::hotmailInfo & info); - -private slots: - void emitSocketError( QAbstractSocket::SocketError error ); -}; - -#endif diff --git a/protocols/wlm/wlmprotocol.cpp b/protocols/wlm/wlmprotocol.cpp deleted file mode 100644 index 6146ffd12..000000000 --- a/protocols/wlm/wlmprotocol.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/* - wlmprotocol.cpp - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2 of the License, or (at your option) any later version. * - * * - ************************************************************************* -*/ - -#include "wlmprotocol.h" -#include "wlmaccount.h" -#include "wlmcontact.h" -#include "wlmaddcontactpage.h" -#include "wlmeditaccountwidget.h" - -#include -#include -#include -#include "kopeteaccountmanager.h" -#include "kopeteonlinestatusmanager.h" -#include "kopeteappearancesettings.h" -#include "kopeteidentity.h" -#include "kopeteavatarmanager.h" - -static const KAboutData aboutdata ("kopete_wlm", 0, ki18n ("WLM"), "1.0"); - -WlmProtocol * - WlmProtocol::s_protocol = 0L; -K_PLUGIN_FACTORY (WlmProtocolFactory, registerPlugin < WlmProtocol > (); - )K_EXPORT_PLUGIN (WlmProtocolFactory ("kopete_wlm")) - WlmProtocol::WlmProtocol (QObject * parent, - const QVariantList & /*args */ ) - : -Kopete::Protocol(WlmProtocolFactory::componentData (), parent, true), -wlmOnline (Kopete::OnlineStatus::Online, 25, this, 1, QStringList (), - i18n ("Online"), i18n ("O&nline"), - Kopete::OnlineStatusManager::Online), -wlmAway (Kopete::OnlineStatus::Away, 18, this, 2, QStringList ("contact_away_overlay"), - i18n ("Away"), i18n ("&Away"), Kopete::OnlineStatusManager::Away), -wlmBusy (Kopete::OnlineStatus::Busy, 20, this, 3, QStringList ("wlm_busy"), - i18n ("Busy"), i18n ("&Busy"), Kopete::OnlineStatusManager::Busy), -wlmBeRightBack (Kopete::OnlineStatus::Away, 22, this, 4, - QStringList ("wlm_brb"), i18n ("Be Right Back"), - i18n ("Be &Right Back"), 0), -wlmOnThePhone (Kopete::OnlineStatus::Busy, 12, this, 5, - QStringList ("contact_phone_overlay"), i18n ("On the Phone"), - i18n ("On The &Phone"), 0), -wlmOutToLunch (Kopete::OnlineStatus::Away, 15, this, 6, - QStringList ("contact_food_overlay"), i18n ("Out to Lunch"), - i18n ("Out To &Lunch"), 0), -wlmInvisible (Kopete::OnlineStatus::Invisible, 3, this, 7, - QStringList ("contact_invisible_overlay"), i18n ("Invisible"), - i18n ("&Invisible"), Kopete::OnlineStatusManager::Invisible), -wlmOffline (Kopete::OnlineStatus::Offline, 0, this, 8, - QStringList (QString ()), i18n ("Offline"), i18n ("O&ffline"), - Kopete::OnlineStatusManager::Offline, - Kopete::OnlineStatusManager::DisabledIfOffline), -wlmIdle (Kopete::OnlineStatus::Away, 10, this, 9, - QStringList ("contact_away_overlay"), i18n ("Idle"), i18n ("&Idle"), - Kopete::OnlineStatusManager::Idle), -wlmUnknown (Kopete::OnlineStatus::Unknown, 25, this, 0, - QStringList ("status_unknown"), i18n ("Status not available")), -wlmConnecting (Kopete::OnlineStatus::Connecting, 2, this, 10, - QStringList ("wlm_connecting"), i18n ("Connecting")), -currentSong ("currentSong", i18nc ("This is used in the tooltip of a contact", "Listening To")), -contactCapabilities ("contactCapabilities", "Used to keep track of the contact capabilities", QString(), - Kopete::PropertyTmpl::PrivateProperty), -displayPhotoSHA1("displayPhotoSHA1", "Display Photo SHA-1 Hash", QString(), - Kopete::PropertyTmpl::PersistentProperty | Kopete::PropertyTmpl::PrivateProperty) -{ - kDebug (14210) << k_funcinfo; - - s_protocol = this; - - //TODO FIXME - QStringList shownProps = - Kopete::AppearanceSettings::self ()->toolTipContents (); - - if (!shownProps.contains ("currentSong")) - shownProps << QString::fromLatin1 ("currentSong"); - Kopete::AppearanceSettings::self ()->setToolTipContents (shownProps); - - setCapabilities (Kopete::Protocol::BaseFgColor | - Kopete::Protocol::BaseFont | - Kopete::Protocol::BaseFormatting); -} - -WlmProtocol::~WlmProtocol () -{ -} - -Kopete::Contact * WlmProtocol::deserializeContact (Kopete::MetaContact * - metaContact, const QMap &serializedData, - const QMap < QString, QString > & ) -{ - QString contactId = serializedData["contactId"]; - QString contactSerial = serializedData["contactSerial"]; - QString accountId = serializedData["accountId"]; - QString dontShowEmoticons = serializedData["dontShowEmoticons"]; - Kopete::Contact::NameType nameType = Kopete::Contact::nameTypeFromString(serializedData[ "preferredNameType" ]); - - QList accounts = - Kopete::AccountManager::self ()->accounts (this); - Kopete::Account * account = 0; - foreach (Kopete::Account * acct, accounts) - { - if (acct->accountId () == accountId) - account = acct; - } - - if (!account) - { - kDebug (14210) << "Account doesn't exist, skipping"; - return 0; - } - WlmContact * c = new WlmContact (account, contactId, contactSerial, metaContact); - - if(dontShowEmoticons == "true") - c->slotDontShowEmoticons(true); - - c->setPreferredNameType(nameType); - - return c; -} - -AddContactPage * -WlmProtocol::createAddContactWidget (QWidget * parent, Kopete::Account *account) -{ - kDebug (14210) << "Creating Add Contact Page"; - return new WlmAddContactPage(account, parent); -} - -KopeteEditAccountWidget * -WlmProtocol::createEditAccountWidget (Kopete::Account * account, - QWidget * parent) -{ - kDebug (14210) << "Creating Edit Account Page"; - return new WlmEditAccountWidget (parent, account); -} - -Kopete::Account * WlmProtocol::createNewAccount (const QString & accountId) -{ - return new WlmAccount (this, accountId); -} - -WlmProtocol * -WlmProtocol::protocol () -{ - return s_protocol; -} - -bool WlmProtocol::validContactId (const QString& contactId) -{ - QRegExp rx("[^@\\s]+@([^@\\.\\s]+\\.)+[^@\\.\\s]+"); - return ( rx.exactMatch( contactId ) ); -} - -#include "wlmprotocol.moc" diff --git a/protocols/wlm/wlmprotocol.h b/protocols/wlm/wlmprotocol.h deleted file mode 100644 index 51884da9b..000000000 --- a/protocols/wlm/wlmprotocol.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - wlmprotocol.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMPROTOCOL_H -#define WLMPROTOCOL_H - -#include -#include "kopeteproperty.h" - -/** - * Encapsulates the generic actions associated with this protocol - * @author Will Stephenson - */ -class WlmProtocol: public Kopete::Protocol -{ - Q_OBJECT - public: - WlmProtocol (QObject * parent, const QVariantList & args); - ~WlmProtocol (); - /** - * Convert the serialised data back into a WlmContact and add this - * to its Kopete::MetaContact - */ - virtual Kopete::Contact * deserializeContact (Kopete::MetaContact * metaContact, - const QMap < QString, QString > &serializedData, - const QMap < QString, QString > &addressBookData); - /** - * Generate the widget needed to add WlmContacts - */ - virtual AddContactPage * - createAddContactWidget (QWidget * parent, Kopete::Account * account); - /** - * Generate the widget needed to add/edit accounts for this protocol - */ - virtual KopeteEditAccountWidget * - createEditAccountWidget (Kopete::Account * account, QWidget * parent); - /** - * Generate a WlmAccount - */ - virtual Kopete::Account *createNewAccount (const QString & accountId); - /** - * Access the instance of this protocol - */ - static WlmProtocol * protocol (); - - static bool validContactId(const QString&); - - /** - * Represents contacts that are Online - */ - const Kopete::OnlineStatus wlmOnline; - /** - * Represents contacts that are Away - */ - const Kopete::OnlineStatus wlmAway; - /** - * Represents contacts that are Offline - */ - const Kopete::OnlineStatus wlmBusy; - - const Kopete::OnlineStatus wlmBeRightBack; - - const Kopete::OnlineStatus wlmOnThePhone; - - const Kopete::OnlineStatus wlmOutToLunch; - - const Kopete::OnlineStatus wlmInvisible; - - const Kopete::OnlineStatus wlmOffline; - - const Kopete::OnlineStatus wlmIdle; - - const Kopete::OnlineStatus wlmUnknown; - - const Kopete::OnlineStatus wlmConnecting; - - const Kopete::PropertyTmpl currentSong; - - const Kopete::PropertyTmpl contactCapabilities; - - const Kopete::PropertyTmpl displayPhotoSHA1; - - protected: - static WlmProtocol * s_protocol; -}; - -#endif diff --git a/protocols/wlm/wlmserver.cpp b/protocols/wlm/wlmserver.cpp deleted file mode 100644 index be7aa7f60..000000000 --- a/protocols/wlm/wlmserver.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/* - wlmserver.cpp - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#include "wlmserver.h" -#include "wlmsocket.h" - -WlmServer::WlmServer (WlmAccount * account, const QString & accountID, const QString & password): -m_account (account), -m_accountID (accountID), m_password (password), mainConnection (NULL) -{ -} - -WlmServer::~WlmServer () -{ - qDeleteAll(cb.socketList); - delete mainConnection; -} - -void -WlmServer::WlmConnect ( const QString& server, uint port ) -{ - cb.m_server = this; - mainConnection = - new MSN::NotificationServerConnection (m_accountID.toLatin1 ().constData (), - m_password.toUtf8().constData (), - cb); - cb.mainConnection = mainConnection; - - if (mainConnection) - mainConnection->connect (server.toLatin1().constData(), port); -} - -void -WlmServer::WlmDisconnect () -{ - WlmSocket *a = 0; - - if (mainConnection) - { - QListIterator i(cb.socketList); - while (i.hasNext()) - { - a = i.next(); - QObject::disconnect (a, 0, 0, 0); - cb.socketList.removeAll (a); - } - cb.socketList.clear (); - - if ( mainConnection->connectionState() != MSN::NotificationServerConnection::NS_DISCONNECTED ) - mainConnection->disconnect(); - } -} - diff --git a/protocols/wlm/wlmserver.h b/protocols/wlm/wlmserver.h deleted file mode 100644 index c6cdf59f7..000000000 --- a/protocols/wlm/wlmserver.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - wlmserver.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMSERVER_H -#define WLMSERVER_H -#include -#include "wlmlibmsn.h" - -class WlmAccount; - -class WlmServer : public QObject -{ - Q_OBJECT -public: - WlmServer( WlmAccount * account, const QString & m_accountID, const QString & m_password ); - ~WlmServer (); - - void WlmConnect( const QString& server, uint port ); - void WlmDisconnect(); - - WlmAccount * m_account; - QString m_accountID; - QString m_password; - Callbacks cb; - - MSN::NotificationServerConnection * mainConnection; - std::string myFriendlyName; - std::string myUsername; -}; - -#endif diff --git a/protocols/wlm/wlmsocket.cpp b/protocols/wlm/wlmsocket.cpp deleted file mode 100644 index 2dcf389a5..000000000 --- a/protocols/wlm/wlmsocket.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* - wlmsocket.cpp - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#include "wlmsocket.h" - -#include -#include - -#include "kopetesockettimeoutwatcher.h" -#include "kopeteaccount.h" -#include "wlmaccount.h" -#include "wlmserver.h" -#include -#include - -WlmSocket::WlmSocket(MSN::NotificationServerConnection * mainConnection, bool isSSL, WlmServer* server) -: mMainConnection(mainConnection), mIsSSL(isSSL), mPingTimer(0) -{ - QObject::connect( this, SIGNAL(connected()), this, SLOT(connectionReady()) ); - QObject::connect( this, SIGNAL(disconnected()), this, SLOT(connectionFinished()) ); - QObject::connect( this, SIGNAL(encrypted()), this, SLOT(connectionEncryptedReady()) ); - QObject::connect( this, SIGNAL(bytesWritten(qint64)), this, SLOT(resetPing()) ); - - Kopete::SocketTimeoutWatcher* timeoutWatcher = Kopete::SocketTimeoutWatcher::watch( this ); - if ( timeoutWatcher ) - connect( timeoutWatcher, SIGNAL(error(QAbstractSocket::SocketError)), this, SIGNAL(error(QAbstractSocket::SocketError)) ); - - if (server && server->m_account) - { - WlmAccount *acc= server->m_account; - if(acc->isProxyEnabled()) - { - QString proxyHost = acc->proxyHost(); - uint proxyPort = acc->proxyPort(); - QNetworkProxy::ProxyType proxyType = (QNetworkProxy::ProxyType) acc->proxyType(); - QString proxyUsername = acc->proxyUsername(); - QString proxyPassword = acc->proxyPassword(); - setProxy(QNetworkProxy(proxyType, proxyHost, proxyPort, proxyUsername, proxyPassword)); - } - } -} - -WlmSocket::~WlmSocket() -{ - delete mPingTimer; -} - -void WlmSocket::connectionEncryptedReady() -{ - MSN::Connection * c; - - if ( !mMainConnection ) - return; - // Retrieve the connection associated with the - // socket's file handle on which the event has - // occurred. - c = mMainConnection->connectionWithSocket( (void*)this ); - - // if this is a libmsn socket - if (c != NULL) - { - if ( c->isConnected() == false ) - { - c->socketConnectionCompleted(); - } - // If this event is due to new data becoming available - c->socketIsWritable(); - } - - if ( c == mMainConnection ) - initPingTimer(); -} - -void WlmSocket::connectionReady() -{ - MSN::Connection * c; - - // ssl is connected when encrypted() is raised - if( isSSL() ) - return; - - if ( !mMainConnection ) - return; - // Retrieve the connection associated with the - // socket's file handle on which the event has - // occurred. - c = mMainConnection->connectionWithSocket( (void*)this ); - - // if this is a libmsn socket - if (c != NULL) - { - if (c->isConnected() == false) - { - c->socketConnectionCompleted(); - } - // If this event is due to new data becoming available - c->socketIsWritable(); - } - - if ( c == mMainConnection ) - initPingTimer(); -} - -void WlmSocket::connectionFinished() -{ - delete mPingTimer; - mPingTimer = 0; -} - -void WlmSocket::incomingData() -{ - MSN::Connection * c; - - if ( !mMainConnection ) - return; - - // Retrieve the connection associated with the - // socket's file handle on which the event has - // occurred. - c = mMainConnection->connectionWithSocket((void*)this); - - // if this is a libmsn socket - if (c != NULL) - { - if (c->isConnected() == false) - { - c->socketConnectionCompleted(); - } - // If this event is due to new data becoming available - c->dataArrivedOnSocket(); - } -} - -void WlmSocket::resetPing() -{ - if ( mPingTimer ) - mPingTimer->start(); -} - -void WlmSocket::pingTimeout() -{ - if ( !mMainConnection || (mMainConnection->connectionState() < MSN::NotificationServerConnection::NS_CONNECTED) ) - return; - - MSN::Connection *c = mMainConnection->connectionWithSocket((void*)this); - if ( c == mMainConnection ) - mMainConnection->sendPing(); -} - -void WlmSocket::initPingTimer() -{ - if ( !mPingTimer ) - { - mPingTimer = new QTimer(); - QObject::connect( mPingTimer, SIGNAL(timeout()), this, SLOT(pingTimeout()) ); - mPingTimer->setInterval( 50000 ); - } - mPingTimer->start(); -} - diff --git a/protocols/wlm/wlmsocket.h b/protocols/wlm/wlmsocket.h deleted file mode 100644 index 3d504162d..000000000 --- a/protocols/wlm/wlmsocket.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - wlmsocket.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMSOCKET_H -#define WLMSOCKET_H - -#include - -#include - -class QTimer; -class WlmServer; - -class WlmSocket : public QSslSocket -{ - Q_OBJECT -public: - explicit WlmSocket( MSN::NotificationServerConnection * mainConnection, bool isSSL = false, WlmServer* server = NULL ); - ~WlmSocket(); - - bool isSSL() const { return mIsSSL; } - -public slots: - void incomingData(); - void connectionReady(); - void connectionFinished(); - void connectionEncryptedReady(); - -private slots: - void resetPing(); - void pingTimeout(); - -private: - void initPingTimer(); - - MSN::NotificationServerConnection * mMainConnection; - bool mIsSSL; - QTimer* mPingTimer; -}; -#endif diff --git a/protocols/wlm/wlmtransfermanager.cpp b/protocols/wlm/wlmtransfermanager.cpp deleted file mode 100644 index 05dd62370..000000000 --- a/protocols/wlm/wlmtransfermanager.cpp +++ /dev/null @@ -1,329 +0,0 @@ -/* - wlmtransfermanager.cpp - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#include "wlmtransfermanager.h" -#include "wlmcontact.h" -#include "kopetecontact.h" -#include "kopeteuiglobal.h" -#include "kopetetransfermanager.h" - -#include -#include -#include -#include - -#include - -WlmTransferManager::WlmTransferManager (WlmAccount * account1) : -m_account (account1), -nextID (1) -{ - QObject::connect (&account ()->server ()->cb, - SIGNAL (incomingFileTransfer - (MSN::SwitchboardServerConnection *, - const MSN::fileTransferInvite &)), this, - SLOT (incomingFileTransfer - (MSN::SwitchboardServerConnection *, - const MSN::fileTransferInvite &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (gotFileTransferProgress - (MSN::SwitchboardServerConnection *, - const unsigned int &, - const unsigned long long &)), this, - SLOT (gotFileTransferProgress - (MSN::SwitchboardServerConnection *, - const unsigned int &, - const unsigned long long &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (gotFileTransferFailed (MSN::SwitchboardServerConnection *, - const unsigned int &, const MSN::fileTransferError&)), - this, - SLOT (gotFileTransferFailed (MSN::SwitchboardServerConnection *, - const unsigned int &, const MSN::fileTransferError&))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (gotFileTransferSucceeded - (MSN::SwitchboardServerConnection *, - const unsigned int &)), this, - SLOT (gotFileTransferSucceeded (MSN::SwitchboardServerConnection *, - const unsigned int &))); - - QObject::connect (&account ()->server ()->cb, - SIGNAL (slotfileTransferInviteResponse - (MSN::SwitchboardServerConnection *, - const unsigned int &, const bool &)), this, - SLOT (fileTransferInviteResponse - (MSN::SwitchboardServerConnection * , - const unsigned int &, const bool &))); - - connect (Kopete::TransferManager::transferManager (), - SIGNAL (accepted(Kopete::Transfer*,QString)), - this, SLOT (slotAccepted(Kopete::Transfer*,QString))); - connect (Kopete::TransferManager::transferManager (), - SIGNAL (refused(Kopete::FileTransferInfo)), - this, SLOT (slotRefused(Kopete::FileTransferInfo))); -} - -void -WlmTransferManager::fileTransferInviteResponse (MSN::SwitchboardServerConnection * /*conn*/, - const unsigned int &sessionID, - const bool & response) -{ - if(!transferSessions.count(sessionID)) - return; - - if (response) - { - transferSessionData tfd = transferSessions[sessionID]; - Kopete::ContactPtrList chatmembers; - chatmembers.append (account ()->contacts().value(tfd.to)); - WlmChatSession *_manager = - qobject_cast (Kopete::ChatSessionManager::self ()-> - findChatSession (account ()->myself (), chatmembers, - account ()->protocol ())); - if (!_manager) - { - _manager = - new WlmChatSession (account ()->protocol (), - account ()->myself (), chatmembers); - } - } - else - { - transferSessionData tfd = transferSessions[sessionID]; - if(tfd.internalID) - Kopete::TransferManager::transferManager()-> - cancelIncomingTransfer(tfd.internalID); - else - tfd.ft->slotError(KIO::ERR_ABORTED, i18n("File transfer cancelled.")); - } -} - -WlmTransferManager::~WlmTransferManager () -{ -} - -void -WlmTransferManager::incomingFileTransfer (MSN::SwitchboardServerConnection * conn, - const MSN::fileTransferInvite & ft) -{ - QString passport = WlmUtils::passport(ft.userPassport); - Kopete::Contact * contact = account ()->contacts().value(passport); - - if(!contact) - return; - - if (ft.type == MSN::FILE_TRANSFER_WITH_PREVIEW - || ft.type == MSN::FILE_TRANSFER_WITHOUT_PREVIEW) - { - QPixmap preview; - if (ft.type == MSN::FILE_TRANSFER_WITH_PREVIEW) - { - preview.loadFromData (KCodecs::base64Decode (ft.preview.c_str())); - } - transferSessionData tsd; - tsd.from = passport; - tsd.to = account ()->myself ()->contactId (); - tsd.ft = NULL; - tsd.internalID = 0; - account ()->chatManager ()->createChat (conn); - WlmChatSession *chat = account ()->chatManager ()->chatSessions[conn]; - if(chat) - chat->setCanBeDeleted (false); - - tsd.internalID = Kopete::TransferManager::transferManager()->askIncomingTransfer(contact, - WlmUtils::utf8(ft.filename), ft.filesize, "", QString::number (ft.sessionId), preview); - transferSessions[ft.sessionId] = tsd; - } -} - -void -WlmTransferManager::gotFileTransferProgress (MSN::SwitchboardServerConnection * /*conn*/, - const unsigned int &sessionID, - const unsigned long long - &transferred) -{ - if(!transferSessions.count(sessionID)) - return; - - Kopete::Transfer * transfer = transferSessions[sessionID].ft; - if (transfer) - transfer->slotProcessed (transferred); -} - -void -WlmTransferManager::slotAccepted (Kopete::Transfer * ft, - const QString & filename) -{ - Kopete::ContactPtrList chatmembers; - - // grab contactId from the sender - unsigned int sessionID = ft->info ().internalId ().toUInt (); - - if(!transferSessions.count(sessionID)) - return; - - QString from = transferSessions[sessionID].from; - - if (from.isEmpty ()) - return; - - // find an existent session, or create a new one - chatmembers.append (account ()->contacts().value(from)); - WlmChatSession *_manager = qobject_cast - (Kopete::ChatSessionManager::self ()-> - findChatSession (account ()->myself (), chatmembers, - account ()->protocol ())); - - if (!_manager) - { - _manager = - new WlmChatSession (account ()->protocol (), - account ()->myself (), chatmembers); - } - - MSN::SwitchboardServerConnection * conn = _manager->getChatService (); - if (!conn) - return; - - _manager->setCanBeDeleted (false); - transferSessions[sessionID].ft = ft; - - connect (ft, SIGNAL (transferCanceled()), this, SLOT (slotCanceled())); - - conn->fileTransferResponse (sessionID, QFile::encodeName(filename).constData (), true); -} - -void -WlmTransferManager::slotRefused (const Kopete::FileTransferInfo & fti) -{ - Kopete::ContactPtrList chatmembers; - chatmembers.append (fti.contact ()); - WlmChatSession *_manager = qobject_cast - (Kopete::ChatSessionManager::self ()-> - findChatSession (account ()->myself (), chatmembers, - account ()->protocol ())); - - if (!_manager) - return; - - MSN::SwitchboardServerConnection * conn = _manager->getChatService (); - if (!conn) - return; - - conn->fileTransferResponse (fti.internalId ().toUInt (), "", false); -} - -void -WlmTransferManager::gotFileTransferFailed (MSN::SwitchboardServerConnection * /*conn*/, - const unsigned int &sessionID, - const MSN::fileTransferError & /*error*/) -{ - if(!transferSessions.count(sessionID)) - return; - - transferSessionData tsd = transferSessions[sessionID]; - if (tsd.internalID) - { - Kopete::TransferManager::transferManager ()-> - cancelIncomingTransfer(tsd.internalID); - if(tsd.ft) - tsd.ft->slotError(KIO::ERR_ABORTED, i18n("File transfer cancelled.")); - } - else - { - if (tsd.ft) - { - tsd.ft->slotError(KIO::ERR_ABORTED, i18n("File transfer cancelled.")); - } - } - transferSessions.remove (sessionID); - -} - -void -WlmTransferManager::gotFileTransferSucceeded (MSN::SwitchboardServerConnection * /*conn*/, - const unsigned int &sessionID) -{ - Kopete::Transfer * transfer = transferSessions[sessionID].ft; - if (transfer) - { - Kopete::ContactPtrList chatmembers; - if (transfer->info ().direction () == - Kopete::FileTransferInfo::Incoming) - chatmembers.append (account ()->contacts().value(transferSessions[sessionID].from)); - else - chatmembers.append (account ()->contacts().value(transferSessions[sessionID].to)); - - WlmChatSession *_manager = qobject_cast - (Kopete::ChatSessionManager::self ()-> - findChatSession (account ()->myself (), chatmembers, - account ()->protocol ())); - if (_manager) - _manager->raiseView (); - transfer->slotComplete (); - transferSessions.remove (sessionID); - } -} - -void -WlmTransferManager::slotCanceled () -{ - kDebug (14210) << k_funcinfo; - Kopete::Transfer * ft = qobject_cast < Kopete::Transfer * >(sender ()); - if (!ft) - return; - unsigned int sessionID = 0; - QMap < unsigned int, transferSessionData >::iterator i = - transferSessions.begin (); - for (; i != transferSessions.end (); ++i) - if (i.value ().ft == ft) - sessionID = i.key (); - - if (!sessionID) - return; - - transferSessionData session = transferSessions[sessionID]; - - Kopete::ContactPtrList chatmembers; - if (ft->info ().direction () == Kopete::FileTransferInfo::Incoming) - chatmembers.append (account ()->contacts().value(session.from)); - else - chatmembers.append (account ()->contacts().value(session.to)); - - WlmChatSession *_manager = qobject_cast - (Kopete::ChatSessionManager::self ()-> - findChatSession (account ()->myself (), chatmembers, - account ()->protocol ())); - - if (!_manager) - return; - _manager->raiseView (); - - MSN::SwitchboardServerConnection * conn = _manager->getChatService (); - - if (!conn) - return; - - if (sessionID) - { - transferSessions.remove (sessionID); - conn->cancelFileTransfer (sessionID); - } -} - diff --git a/protocols/wlm/wlmtransfermanager.h b/protocols/wlm/wlmtransfermanager.h deleted file mode 100644 index 5a2ec61b8..000000000 --- a/protocols/wlm/wlmtransfermanager.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - wlmtransfermanager.h - Kopete Wlm Protocol - - Copyright (c) 2008 by Tiago Salem Herrmann - Kopete (c) 2002-2003 by the Kopete developers - - ************************************************************************* - * * - * This library 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. * - * * - ************************************************************************* -*/ - -#ifndef WLMTRANSFERMANAGER_H -#define WLMTRANSFERMANAGER_H - -#include - -#include "wlmaccount.h" -#include - -namespace Kopete -{ - class Transfer; - class FileTransferInfo; -} - -class WlmTransferManager:public QObject -{ - Q_OBJECT - public: - struct transferSessionData - { - QString from; - QString to; - bool incoming; - Kopete::Transfer * ft; - unsigned int internalID; - }; - - WlmTransferManager (WlmAccount * account); - ~WlmTransferManager (); - WlmAccount *account () - { - return m_account; - } - QMap < unsigned int, - transferSessionData > *getTransferSessions () - { - return &transferSessions; - } - void addTransferSession (unsigned int sessionID, Kopete::Transfer * ft, - QString from, QString to) - { - transferSessionData tsd; - tsd.from = from; - tsd.to = to; - tsd.ft = ft; - tsd.internalID = 0; - transferSessions[sessionID] = tsd; - } - - public slots: - - void incomingFileTransfer (MSN::SwitchboardServerConnection * conn, - const MSN:: - fileTransferInvite & ft); - - void gotFileTransferProgress (MSN::SwitchboardServerConnection * conn, - const unsigned int &sessionID, - const unsigned long long &transferred); - - void gotFileTransferFailed (MSN::SwitchboardServerConnection * conn, - const unsigned int &sessionID, - const MSN::fileTransferError &error); - - void gotFileTransferSucceeded (MSN::SwitchboardServerConnection * conn, - const unsigned int &sessionID); - - void slotAccepted (Kopete::Transfer * ft, const QString & filename); - - void slotRefused (const Kopete::FileTransferInfo & fti); - - void slotCanceled (); - - void fileTransferInviteResponse (MSN::SwitchboardServerConnection * conn, - const unsigned int &sessionID, - const bool & response); - - private: - QMap < unsigned int, transferSessionData > transferSessions; - WlmAccount *m_account; - unsigned int nextID; -}; -#endif